summaryrefslogtreecommitdiff
path: root/spec/features/merge_requests/filter_by_labels_spec.rb
blob: 9b677aeca0a32a5e0059dff7a3e7d1d8e7e2b041 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
require 'rails_helper'

feature 'Issue filtering by Labels', feature: true, js: true do
  include FilteredSearchHelpers
  include MergeRequestHelpers

  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]
    gitlab_sign_in(user)

    visit namespace_project_merge_requests_path(project.namespace, project)
  end

  context 'filter by label bug' do
    before do
      input_filtered_search('label:~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"
    end
  end

  context 'filter by label feature' do
    before do
      input_filtered_search('label:~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"
    end
  end

  context 'filter by label enhancement' do
    before do
      input_filtered_search('label:~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"
    end
  end

  context 'filter by label enhancement and bug in issues list' do
    before do
      input_filtered_search('label:~bug label:~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"
    end
  end

  context 'clear button' do
    before do
      input_filtered_search('label:~bug')
    end

    it 'allows user to remove filtered labels' do
      first('.clear-search').click
      filtered_search.send_keys(:enter)

      expect(page).to have_issuable_counts(open: 3, closed: 0, all: 3)
      expect(page).to have_content "Bugfix2"
      expect(page).to have_content "Feature1"
      expect(page).to have_content "Bugfix1"
    end
  end

  context 'filter dropdown' do
    it 'filters by label name' do
      init_label_search
      filtered_search.send_keys('~bug')

      page.within '.filter-dropdown' do
        expect(page).not_to have_content 'enhancement'
        expect(page).to have_content 'bug'
      end
    end
  end
end