Welcome to mirror list, hosted at ThFree Co, Russian Federation.

board_filters_spec.rb « boards « features « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 5215909c0da379cdb6cecb53a6a3c76bdf9a5c57 (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe 'Issue board filters', :js do
  let_it_be(:project) { create(:project, :repository) }
  let_it_be(:user) { create(:user) }
  let_it_be(:board) { create(:board, project: project) }
  let_it_be(:milestone_1) { create(:milestone, project: project) }
  let_it_be(:milestone_2) { create(:milestone, project: project) }
  let_it_be(:release) { create(:release, tag: 'v1.0', project: project, milestones: [milestone_1]) }
  let_it_be(:release_2) { create(:release, tag: 'v2.0', project: project, milestones: [milestone_2]) }
  let_it_be(:issue) { create(:issue, project: project, milestone: milestone_1) }
  let_it_be(:issue_2) { create(:issue, project: project, milestone: milestone_2) }

  let(:filtered_search) { find('[data-testid="issue-board-filtered-search"]') }
  let(:filter_input) { find('.gl-filtered-search-term-input')}
  let(:filter_dropdown) { find('.gl-filtered-search-suggestion-list') }
  let(:filter_first_suggestion) { find('.gl-filtered-search-suggestion-list').first('.gl-filtered-search-suggestion') }
  let(:filter_submit) { find('.gl-search-box-by-click-search-button') }

  before do
    stub_feature_flags(issue_boards_filtered_search: true)

    project.add_maintainer(user)
    sign_in(user)

    visit_project_board
  end

  describe 'filters by releases' do
    before do
      set_filter('release')
    end

    it 'loads all the releases when opened and submit one as filter', :aggregate_failures do
      expect(find('.board:nth-child(1)')).to have_selector('.board-card', count: 2)

      expect_filtered_search_dropdown_results(filter_dropdown, 2)

      click_on release.tag
      filter_submit.click

      expect(find('.board:nth-child(1)')).to have_selector('.board-card', count: 1)
    end
  end

  describe 'filters by milestone' do
    before do
      set_filter('milestone')
    end

    it 'loads all the milestones when opened and submit one as filter', :aggregate_failures do
      expect(find('.board:nth-child(1)')).to have_selector('.board-card', count: 2)

      expect_filtered_search_dropdown_results(filter_dropdown, 6)
      expect(filter_dropdown).to have_content('None')
      expect(filter_dropdown).to have_content('Any')
      expect(filter_dropdown).to have_content('Started')
      expect(filter_dropdown).to have_content('Upcoming')
      expect(filter_dropdown).to have_content(milestone_1.title)
      expect(filter_dropdown).to have_content(milestone_2.title)

      click_on milestone_1.title
      filter_submit.click

      expect(find('.board:nth-child(1)')).to have_selector('.board-card', count: 1)
    end
  end

  def set_filter(filter)
    filter_input.click
    filter_input.set("#{filter}:")
    filter_first_suggestion.click # Select `=` operator
  end

  def expect_filtered_search_dropdown_results(filter_dropdown, count)
    expect(filter_dropdown).to have_selector('.gl-new-dropdown-item', count: count)
  end

  def visit_project_board
    visit project_board_path(project, board)
    wait_for_requests
  end
end