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

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

require 'spec_helper'

describe 'Projects > Settings > CI / CD settings' do
  let_it_be(:project) { create(:project_empty_repo) }
  let_it_be(:user) { create(:user) }
  let_it_be(:role) { :maintainer }

  context 'Deploy tokens' do
    let!(:deploy_token) { create(:deploy_token, projects: [project]) }

    before do
      project.add_role(user, role)
      sign_in(user)
      stub_container_registry_config(enabled: true)
      stub_feature_flags(ajax_new_deploy_token: { enabled: false, thing: project })
      visit project_settings_ci_cd_path(project)
    end

    it_behaves_like 'a deploy token in ci/cd settings' do
      let(:entity_type) { 'project' }
    end
  end

  context 'Deploy Keys', :js do
    let_it_be(:private_deploy_key) { create(:deploy_key, title: 'private_deploy_key', public: false) }
    let_it_be(:public_deploy_key) { create(:another_deploy_key, title: 'public_deploy_key', public: true) }
    let(:new_ssh_key) { attributes_for(:key)[:key] }

    before do
      project.add_role(user, role)
      sign_in(user)
    end

    it 'get list of keys' do
      project.deploy_keys << private_deploy_key
      project.deploy_keys << public_deploy_key

      visit project_settings_ci_cd_path(project)

      expect(page).to have_content('private_deploy_key')
      expect(page).to have_content('public_deploy_key')
    end

    it 'add a new deploy key' do
      visit project_settings_ci_cd_path(project)

      fill_in 'deploy_key_title', with: 'new_deploy_key'
      fill_in 'deploy_key_key', with: new_ssh_key
      check 'deploy_key_deploy_keys_projects_attributes_0_can_push'
      click_button 'Add key'

      expect(page).to have_content('new_deploy_key')
      expect(page).to have_content('Write access allowed')
    end

    it 'edit an existing deploy key' do
      project.deploy_keys << private_deploy_key
      visit project_settings_ci_cd_path(project)

      find('.deploy-key', text: private_deploy_key.title).find('.ic-pencil').click

      fill_in 'deploy_key_title', with: 'updated_deploy_key'
      check 'deploy_key_deploy_keys_projects_attributes_0_can_push'
      click_button 'Save changes'

      expect(page).to have_content('updated_deploy_key')
      expect(page).to have_content('Write access allowed')
    end

    it 'edit an existing public deploy key to be writable' do
      project.deploy_keys << public_deploy_key
      visit project_settings_ci_cd_path(project)

      find('.deploy-key', text: public_deploy_key.title).find('.ic-pencil').click

      check 'deploy_key_deploy_keys_projects_attributes_0_can_push'
      click_button 'Save changes'

      expect(page).to have_content('public_deploy_key')
      expect(page).to have_content('Write access allowed')
    end

    it 'edit a deploy key from projects user has access to' do
      project2 = create(:project_empty_repo)
      project2.add_role(user, role)
      project2.deploy_keys << private_deploy_key

      visit project_settings_ci_cd_path(project)

      find('.js-deployKeys-tab-available_project_keys').click

      find('.deploy-key', text: private_deploy_key.title).find('.ic-pencil').click

      fill_in 'deploy_key_title', with: 'updated_deploy_key'
      click_button 'Save changes'

      find('.js-deployKeys-tab-available_project_keys').click

      expect(page).to have_content('updated_deploy_key')
    end

    it 'remove an existing deploy key' do
      project.deploy_keys << private_deploy_key
      visit project_settings_ci_cd_path(project)

      accept_confirm { find('.deploy-key', text: private_deploy_key.title).find('.ic-remove').click }

      expect(page).not_to have_content(private_deploy_key.title)
    end
  end
end