diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index fe51bdc24861214dcb4341814a87b5bda732d0e4..dd5aedbb760b7df640efd04499ef034eb43f55c0 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -61,6 +61,8 @@ def award_emojis_loaded? end end + has_many :note_authors, -> { distinct }, through: :notes, source: :author + has_many :label_links, as: :target, dependent: :destroy, inverse_of: :target # rubocop:disable Cop/ActiveRecordDependent has_many :labels, through: :label_links has_many :todos, as: :target, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent diff --git a/ee/app/models/approval_wrapped_rule.rb b/ee/app/models/approval_wrapped_rule.rb index 357f38f1ee1d6a60ebe244468f5ca878f510d067..0bbf3ef09f255bb428ef4c653961f277218e247a 100644 --- a/ee/app/models/approval_wrapped_rule.rb +++ b/ee/app/models/approval_wrapped_rule.rb @@ -76,7 +76,7 @@ def approved_approvers def commented_approvers strong_memoize(:commented_approvers) do - [] + merge_request.note_authors & approvers end end diff --git a/ee/changelogs/unreleased/commented-by-3.yml b/ee/changelogs/unreleased/commented-by-3.yml new file mode 100644 index 0000000000000000000000000000000000000000..e5d3e1f14469298e470f077c54213779189129c6 --- /dev/null +++ b/ee/changelogs/unreleased/commented-by-3.yml @@ -0,0 +1,5 @@ +--- +title: Add commented_by to approval_settings endpoint +merge_request: 39237 +author: +type: added diff --git a/ee/spec/models/approval_wrapped_rule_spec.rb b/ee/spec/models/approval_wrapped_rule_spec.rb index cfaa9df90a74e464bd1e9490620891701849c9f5..25a9eaa92479f30fc61567c951239487ef7f5355 100644 --- a/ee/spec/models/approval_wrapped_rule_spec.rb +++ b/ee/spec/models/approval_wrapped_rule_spec.rb @@ -139,9 +139,17 @@ end describe "#commented_approvers" do + let(:rule) { create(:approval_project_rule, project: merge_request.project, approvals_required: approvals_required, users: [approver1, approver3]) } + it "returns an array" do expect(subject.commented_approvers).to be_an(Array) end + + it "returns an array of approvers who have commented" do + create(:note, project: merge_request.project, noteable: merge_request, author: approver1) + + expect(subject.commented_approvers).to eq([approver1]) + end end describe '#unactioned_approvers' do diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index bc51e8747d4021bf34b7420e704ac50c108b8cf1..73ba89c4a960e41e5e4f44f9bdbd9e6836e04eea 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -47,6 +47,7 @@ issues: - alert_management_alert - status_page_published_incident - namespace +- note_authors events: - author - project @@ -167,6 +168,7 @@ merge_requests: - deployments - user_mentions - system_note_metadata +- note_authors external_pull_requests: - project merge_request_diff: @@ -671,6 +673,7 @@ epic: - events - resource_label_events - user_mentions +- note_authors epic_issue: - epic - issue diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb index c943dd57f052697796a77b8536f78b4587688006..0824b5c783457536278d8c116f7db5f5990a7fdd 100644 --- a/spec/models/concerns/issuable_spec.rb +++ b/spec/models/concerns/issuable_spec.rb @@ -17,6 +17,7 @@ it { is_expected.to have_many(:notes).dependent(:destroy) } it { is_expected.to have_many(:todos).dependent(:destroy) } it { is_expected.to have_many(:labels) } + it { is_expected.to have_many(:note_authors).through(:notes) } context 'Notes' do let!(:note) { create(:note, noteable: issue, project: issue.project) }