From dfa8233b17772dda4969d0634d170a1f4236f83b Mon Sep 17 00:00:00 2001
From: Phil Hughes <me@iamphill.com>
Date: Thu, 22 Oct 2020 09:49:01 +0000
Subject: [PATCH] Fixes the ability to filter target branch by not equal

This fixes the target branch filter in merge requests to allow
the user to filter by not equal.
---
 app/finders/merge_requests_finder.rb                | 13 +++++++++++++
 .../unreleased/ph-filterTargetBranchByNotEquals.yml |  5 +++++
 .../user_filters_by_target_branch_spec.rb           | 10 ++++++++++
 3 files changed, 28 insertions(+)
 create mode 100644 changelogs/unreleased/ph-filterTargetBranchByNotEquals.yml

diff --git a/app/finders/merge_requests_finder.rb b/app/finders/merge_requests_finder.rb
index c998de75ab22..28b1530456ba 100644
--- a/app/finders/merge_requests_finder.rb
+++ b/app/finders/merge_requests_finder.rb
@@ -66,6 +66,11 @@ def filter_items(_items)
     by_source_project_id(items)
   end
 
+  def filter_negated_items(items)
+    items = super(items)
+    by_negated_target_branch(items)
+  end
+
   private
 
   def by_commit(items)
@@ -98,6 +103,14 @@ def by_target_branch(items)
   end
   # rubocop: enable CodeReuse/ActiveRecord
 
+  # rubocop: disable CodeReuse/ActiveRecord
+  def by_negated_target_branch(items)
+    return items unless not_params[:target_branch]
+
+    items.where.not(target_branch: not_params[:target_branch])
+  end
+  # rubocop: enable CodeReuse/ActiveRecord
+
   def source_project_id
     @source_project_id ||= params[:source_project_id].presence
   end
diff --git a/changelogs/unreleased/ph-filterTargetBranchByNotEquals.yml b/changelogs/unreleased/ph-filterTargetBranchByNotEquals.yml
new file mode 100644
index 000000000000..169bf3562890
--- /dev/null
+++ b/changelogs/unreleased/ph-filterTargetBranchByNotEquals.yml
@@ -0,0 +1,5 @@
+---
+title: Fixed target branch not filtering
+merge_request: 45652
+author:
+type: fixed
diff --git a/spec/features/merge_requests/user_filters_by_target_branch_spec.rb b/spec/features/merge_requests/user_filters_by_target_branch_spec.rb
index 540d87eb969e..1d9c80238f57 100644
--- a/spec/features/merge_requests/user_filters_by_target_branch_spec.rb
+++ b/spec/features/merge_requests/user_filters_by_target_branch_spec.rb
@@ -44,4 +44,14 @@
       expect(page).not_to have_content mr2.title
     end
   end
+
+  context 'filtering by target-branch:!=master' do
+    it 'applies the filter' do
+      input_filtered_search('target-branch:!=master')
+
+      expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
+      expect(page).not_to have_content mr1.title
+      expect(page).to have_content mr2.title
+    end
+  end
 end
-- 
GitLab