summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/features/protected_branches_access_control_ce_shared_examples.rb
blob: 8212f14d6be2a62cbc89cf486d37904a5d3c7e27 (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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# frozen_string_literal: true

RSpec.shared_examples "protected branches > access control > CE" do
  ProtectedRefAccess::HUMAN_ACCESS_LEVELS.each do |(access_type_id, access_type_name)|
    it "allows creating protected branches that #{access_type_name} can push to" do
      visit project_protected_branches_path(project)

      set_protected_branch_name('master')

      find(".js-allowed-to-merge").click
      within('.rspec-allowed-to-merge-dropdown') do
        expect(first("li")).to have_content("Roles")
        find(:link, 'No one').click
      end

      within('.js-new-protected-branch') do
        allowed_to_push_button = find(".js-allowed-to-push")

        unless allowed_to_push_button.text == access_type_name
          allowed_to_push_button.click
          within(".dropdown.show .dropdown-menu") { click_on access_type_name }
        end
      end

      click_on_protect
      wait_for_requests

      expect(ProtectedBranch.count).to eq(1)
      expect(ProtectedBranch.last.push_access_levels.map(&:access_level)).to eq([access_type_id])
    end

    it "allows updating protected branches so that #{access_type_name} can push to them" do
      visit project_protected_branches_path(project)

      set_protected_branch_name('master')

      find(".js-allowed-to-merge").click
      within('.rspec-allowed-to-merge-dropdown') do
        expect(first("li")).to have_content("Roles")
        find(:link, 'No one').click
      end

      find(".js-allowed-to-push").click
      within('.rspec-allowed-to-push-dropdown') do
        expect(first("li")).to have_content("Roles")
        find(:link, 'No one').click
      end

      click_on_protect

      expect(ProtectedBranch.count).to eq(1)

      within(".protected-branches-list") do
        find(".js-allowed-to-push").click

        within('.js-allowed-to-push-container') do
          expect(first("li")).to have_content("Roles")
          find(:link, access_type_name).click
        end

        find(".js-allowed-to-push").click
      end

      wait_for_requests

      expect(ProtectedBranch.last.push_access_levels.map(&:access_level)).to include(access_type_id)
    end
  end

  ProtectedRefAccess::HUMAN_ACCESS_LEVELS.each do |(access_type_id, access_type_name)|
    it "allows creating protected branches that #{access_type_name} can merge to" do
      visit project_protected_branches_path(project)

      set_protected_branch_name('master')

      within('.js-new-protected-branch') do
        allowed_to_merge_button = find(".js-allowed-to-merge")

        unless allowed_to_merge_button.text == access_type_name
          allowed_to_merge_button.click
          within(".dropdown.show .dropdown-menu") { click_on access_type_name }
        end
      end

      find(".js-allowed-to-push").click
      within('.rspec-allowed-to-push-dropdown') do
        expect(first("li")).to have_content("Roles")
        find(:link, 'No one').click
      end

      click_on_protect

      expect(ProtectedBranch.count).to eq(1)
      expect(ProtectedBranch.last.merge_access_levels.map(&:access_level)).to eq([access_type_id])
    end

    it "allows updating protected branches so that #{access_type_name} can merge to them" do
      visit project_protected_branches_path(project)

      set_protected_branch_name('master')

      find(".js-allowed-to-merge").click
      within('.rspec-allowed-to-merge-dropdown') do
        expect(first("li")).to have_content("Roles")
        find(:link, 'No one').click
      end

      find(".js-allowed-to-push").click
      within('.rspec-allowed-to-push-dropdown') do
        expect(first("li")).to have_content("Roles")
        find(:link, 'No one').click
      end

      click_on_protect

      expect(ProtectedBranch.count).to eq(1)

      within(".protected-branches-list") do
        find(".js-allowed-to-merge").click

        within('.js-allowed-to-merge-container') do
          expect(first("li")).to have_content("Roles")
          find(:link, access_type_name).click
        end
      end

      wait_for_requests

      expect(ProtectedBranch.last.merge_access_levels.map(&:access_level)).to include(access_type_id)
    end
  end
end