summaryrefslogtreecommitdiff
path: root/spec/features/merge_requests/filter_by_labels_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/merge_requests/filter_by_labels_spec.rb')
-rw-r--r--spec/features/merge_requests/filter_by_labels_spec.rb154
1 files changed, 154 insertions, 0 deletions
diff --git a/spec/features/merge_requests/filter_by_labels_spec.rb b/spec/features/merge_requests/filter_by_labels_spec.rb
new file mode 100644
index 00000000000..4c60329865c
--- /dev/null
+++ b/spec/features/merge_requests/filter_by_labels_spec.rb
@@ -0,0 +1,154 @@
+require 'rails_helper'
+
+feature 'Issue filtering by Labels', feature: true, js: true do
+ include WaitForAjax
+
+ let(:project) { create(:project, :public) }
+ let!(:user) { create(:user) }
+ let!(:label) { create(:label, project: project) }
+
+ let!(:bug) { create(:label, project: project, title: 'bug') }
+ let!(:feature) { create(:label, project: project, title: 'feature') }
+ let!(:enhancement) { create(:label, project: project, title: 'enhancement') }
+
+ let!(:mr1) { create(:merge_request, title: "Bugfix1", source_project: project, target_project: project, source_branch: "bugfix1") }
+ let!(:mr2) { create(:merge_request, title: "Bugfix2", source_project: project, target_project: project, source_branch: "bugfix2") }
+ let!(:mr3) { create(:merge_request, title: "Feature1", source_project: project, target_project: project, source_branch: "feature1") }
+
+ before do
+ mr1.labels << bug
+
+ mr2.labels << bug
+ mr2.labels << enhancement
+
+ mr3.title = "Feature1"
+ mr3.labels << feature
+
+ project.team << [user, :master]
+ login_as(user)
+
+ visit namespace_project_merge_requests_path(project.namespace, project)
+ end
+
+ context 'filter by label bug' do
+ before do
+ select_labels('bug')
+ end
+
+ it 'apply the filter' do
+ expect(page).to have_content "Bugfix1"
+ expect(page).to have_content "Bugfix2"
+ expect(page).not_to have_content "Feature1"
+ expect(find('.filtered-labels')).to have_content "bug"
+ expect(find('.filtered-labels')).not_to have_content "feature"
+ expect(find('.filtered-labels')).not_to have_content "enhancement"
+
+ find('.js-label-filter-remove').click
+ wait_for_ajax
+ expect(find('.filtered-labels', visible: false)).to have_no_content "bug"
+ end
+ end
+
+ context 'filter by label feature' do
+ before do
+ select_labels('feature')
+ end
+
+ it 'applies the filter' do
+ expect(page).to have_content "Feature1"
+ expect(page).not_to have_content "Bugfix2"
+ expect(page).not_to have_content "Bugfix1"
+ expect(find('.filtered-labels')).to have_content "feature"
+ expect(find('.filtered-labels')).not_to have_content "bug"
+ expect(find('.filtered-labels')).not_to have_content "enhancement"
+ end
+ end
+
+ context 'filter by label enhancement' do
+ before do
+ select_labels('enhancement')
+ end
+
+ it 'applies the filter' do
+ expect(page).to have_content "Bugfix2"
+ expect(page).not_to have_content "Feature1"
+ expect(page).not_to have_content "Bugfix1"
+ expect(find('.filtered-labels')).to have_content "enhancement"
+ expect(find('.filtered-labels')).not_to have_content "bug"
+ expect(find('.filtered-labels')).not_to have_content "feature"
+ end
+ end
+
+ context 'filter by label enhancement and bug in issues list' do
+ before do
+ select_labels('bug', 'enhancement')
+ end
+
+ it 'applies the filters' do
+ expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
+ expect(page).to have_content "Bugfix2"
+ expect(page).not_to have_content "Feature1"
+ expect(find('.filtered-labels')).to have_content "bug"
+ expect(find('.filtered-labels')).to have_content "enhancement"
+ expect(find('.filtered-labels')).not_to have_content "feature"
+
+ find('.js-label-filter-remove', match: :first).click
+ wait_for_ajax
+
+ expect(page).to have_content "Bugfix2"
+ expect(page).not_to have_content "Feature1"
+ expect(page).not_to have_content "Bugfix1"
+ expect(find('.filtered-labels')).not_to have_content "bug"
+ expect(find('.filtered-labels')).to have_content "enhancement"
+ expect(find('.filtered-labels')).not_to have_content "feature"
+ end
+ end
+
+ context 'remove filtered labels' do
+ before do
+ page.within '.labels-filter' do
+ click_button 'Label'
+ wait_for_ajax
+ click_link 'bug'
+ find('.dropdown-menu-close').click
+ end
+
+ page.within '.filtered-labels' do
+ expect(page).to have_content 'bug'
+ end
+ end
+
+ it 'allows user to remove filtered labels' do
+ first('.js-label-filter-remove').click
+ wait_for_ajax
+
+ expect(find('.filtered-labels', visible: false)).not_to have_content 'bug'
+ expect(find('.labels-filter')).not_to have_content 'bug'
+ end
+ end
+
+ context 'dropdown filtering' do
+ it 'filters by label name' do
+ page.within '.labels-filter' do
+ click_button 'Label'
+ wait_for_ajax
+ find('.dropdown-input input').set 'bug'
+
+ page.within '.dropdown-content' do
+ expect(page).not_to have_content 'enhancement'
+ expect(page).to have_content 'bug'
+ end
+ end
+ end
+ end
+
+ def select_labels(*labels)
+ page.find('.js-label-select').click
+ wait_for_ajax
+ labels.each do |label|
+ execute_script("$('.dropdown-menu-labels li:contains(\"#{label}\") a').click()")
+ end
+ page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
+ wait_for_ajax
+ end
+end