File: branch_rules_settings_spec.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (126 lines) | stat: -rw-r--r-- 3,454 bytes parent folder | download
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe 'Projects > Settings > Repository > Branch rules settings', feature_category: :source_code_management do
  include Spec::Support::Helpers::ModalHelpers
  let(:user) { create(:user) }
  let(:role) { :developer }

  let(:branch_rule) do
    create(
      :protected_branch,
      code_owner_approval_required: true,
      allow_force_push: false
    )
  end

  let(:project) { branch_rule.project }
  let(:external_status_check) do
    create(:external_status_check, project: project, protected_branches: [branch_rule])
  end

  before do
    project.add_role(user, role)
    sign_in(user)
    stub_licensed_features(
      merge_request_approvers: true,
      external_status_checks: true
    )
  end

  context 'When viewed by developer' do
    let(:role) { :developer }

    it 'does not allow to view rule details' do
      visit_branch_rules_details

      expect(page).to have_gitlab_http_status(:not_found)
    end
  end

  context 'When viewed by maintainer' do
    let(:role) { :maintainer }

    it 'allows to view rule details' do
      visit_branch_rules_details

      expect(page).to have_gitlab_http_status(:ok)
    end
  end

  context 'Branch rule details for custom rule', :js do
    let(:role) { :maintainer }

    before do
      visit_branch_rules_details
      wait_for_requests
    end

    it 'renders rule details' do
      expect(page).to have_css 'h1', text: 'Branch rule details'
      expect(page).to have_css '[data-testid="branch"]', text: branch_rule.name
      expect(page).to have_css 'h2', text: 'Protect branch'
      expect(page).to have_text 'Allowed to push and merge'
      expect(page).to have_text 'Allowed to merge'
    end

    it 'renders breadcrumbs' do
      within_testid 'breadcrumb-links' do
        expect(page).to have_link('Repository Settings', href: project_settings_repository_path(project))
        expect(page).to have_link('Branch rules',
          href: project_settings_repository_path(project, anchor: 'branch-rules'))
        expect(page).to have_link('Details', href: '#')
      end
    end

    it 'changes target branch on edit' do
      within_testid('rule-target-card') do
        click_button 'Edit'
      end

      within_modal do
        expect(page).to have_text 'Update target branch'
        click_button 'Select Branch or create wildcard'
        fill_in 'Search', with: 'test-*'
        find_by_testid('listbox-item-test-*').click
        click_button 'Update'
      end

      wait_for_requests

      visit_branch_rules_settings
      wait_for_requests

      expect(page).to have_css '[data-testid="branch-content"]', text: 'test-*'
    end

    it 'deletes rule' do
      click_button 'Delete'

      within_modal do
        click_button 'Delete branch rule'
      end

      wait_for_requests

      visit_branch_rules_settings
      wait_for_requests

      expect(page).not_to have_css '[data-testid="branch-content"]', text: branch_rule.name
    end

    it 'passes axe automated accessibility testing' do
      # checking the page for a custom rule to show all possible components
      expect(page).to be_axe_clean.skipping :'link-in-text-block'
    end
  end

  def visit_branch_rules_settings
    visit project_settings_repository_path(project)
  end

  def visit_branch_rules_details
    visit project_settings_repository_branch_rules_path(project, params: { branch: branch_rule.name })
  end
end