From bcc65902dfb8496a945bdcefef4ec3a290c10d7e Mon Sep 17 00:00:00 2001
From: Douwe Maan <douwe@gitlab.com>
Date: Fri, 5 Apr 2019 09:56:59 +0000
Subject: [PATCH] Merge branch 'id-500-filter-by-approver-and-priority' into
 'master'

Fix sorting by priority with filtering by approvers

See merge request gitlab-org/gitlab-ee!10446

(cherry picked from commit 09707c8d1188c024c50e2625035b43117e0b6129)

88f16f8d Fix sorting by priority with filtering by approvers
---
 ee/app/models/ee/merge_request.rb                 |  2 +-
 .../id-500-filter-by-approver-and-priority.yml    |  5 +++++
 .../merge_requests/by_approvers_finder_spec.rb    | 15 +++++++++++++++
 3 files changed, 21 insertions(+), 1 deletion(-)
 create mode 100644 ee/changelogs/unreleased/id-500-filter-by-approver-and-priority.yml

diff --git a/ee/app/models/ee/merge_request.rb b/ee/app/models/ee/merge_request.rb
index 2b0f69a9c404..36352d4e3e73 100644
--- a/ee/app/models/ee/merge_request.rb
+++ b/ee/app/models/ee/merge_request.rb
@@ -36,7 +36,7 @@ module MergeRequest
 
     class_methods do
       def select_from_union(relations)
-        from_union(relations, remove_duplicates: true)
+        where(id: from_union(relations))
       end
     end
 
diff --git a/ee/changelogs/unreleased/id-500-filter-by-approver-and-priority.yml b/ee/changelogs/unreleased/id-500-filter-by-approver-and-priority.yml
new file mode 100644
index 000000000000..053e0d11471a
--- /dev/null
+++ b/ee/changelogs/unreleased/id-500-filter-by-approver-and-priority.yml
@@ -0,0 +1,5 @@
+---
+title: Fix sorting by priority with filtering by approvers
+merge_request: 10446
+author:
+type: fixed
diff --git a/ee/spec/finders/merge_requests/by_approvers_finder_spec.rb b/ee/spec/finders/merge_requests/by_approvers_finder_spec.rb
index 6bbb281dbe9f..320f8d3522f3 100644
--- a/ee/spec/finders/merge_requests/by_approvers_finder_spec.rb
+++ b/ee/spec/finders/merge_requests/by_approvers_finder_spec.rb
@@ -133,4 +133,19 @@ def merge_requests(ids: nil, names: [])
       )
     end
   end
+
+  context 'filter by approvers' do
+    let(:mrs_by_ids) { merge_requests(ids: [first_user.id]) }
+    let(:mrs_by_usernames) { merge_requests(names: [first_user.username]) }
+
+    it 'can be ordered by popularity' do
+      expect(mrs_by_ids.sort_by_attribute("popularity")).to eq([merge_request_with_two_approvers, merge_request_with_approver])
+      expect(mrs_by_usernames.sort_by_attribute("popularity")).to eq([merge_request_with_two_approvers, merge_request_with_approver])
+    end
+
+    it 'can be ordered by priority' do
+      expect(mrs_by_usernames.sort_by_attribute("priority")).to eq([merge_request_with_two_approvers, merge_request_with_approver])
+      expect(mrs_by_ids.sort_by_attribute("priority")).to eq([merge_request_with_two_approvers, merge_request_with_approver])
+    end
+  end
 end
-- 
GitLab