summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-04-13 12:05:10 +0200
committerJacob Schatz <jacobschatz@Jacobs-MBP.fios-router.home>2016-04-13 16:10:49 -0400
commitdc13f7c31dee2c0515c36fba2398bc8b843a8108 (patch)
treed2c33e183fb9f7d83f763c7f16ed8fea1e9d5bd6
parent42e0625dfb2a791affd592df1f879083702e6f86 (diff)
downloadgitlab-ce-dc13f7c31dee2c0515c36fba2398bc8b843a8108.tar.gz
Return unique issues when using multiple labels
This ensures that IssuableFinder returns a collection of unique issues, even when filtering issues using multiple labels.
-rw-r--r--app/finders/issuable_finder.rb4
-rw-r--r--spec/finders/issues_finder_spec.rb16
2 files changed, 19 insertions, 1 deletions
diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb
index f1df6832bf6..d7c5b0a598c 100644
--- a/app/finders/issuable_finder.rb
+++ b/app/finders/issuable_finder.rb
@@ -278,7 +278,9 @@ class IssuableFinder
end
end
- items
+ # When filtering by multiple labels we may end up duplicating issues (if one
+ # has multiple labels). This ensures we only return unique issues.
+ items.distinct
end
def label_names
diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb
index b1648055462..bc607a29751 100644
--- a/spec/finders/issues_finder_spec.rb
+++ b/spec/finders/issues_finder_spec.rb
@@ -62,6 +62,22 @@ describe IssuesFinder do
expect(issues).to eq([issue2])
end
+ it 'returns unique issues when filtering by multiple labels' do
+ label2 = create(:label, project: project2)
+
+ create(:label_link, label: label2, target: issue2)
+
+ params = {
+ scope: 'all',
+ label_name: [label.title, label2.title].join(','),
+ state: 'opened'
+ }
+
+ issues = IssuesFinder.new(user, params).execute
+
+ expect(issues).to eq([issue2])
+ end
+
it 'should filter by no label name' do
params = { scope: "all", label_name: Label::None.title, state: 'opened' }
issues = IssuesFinder.new(user, params).execute