repository_settings_spec.rb 4.34 KB
Newer Older
1 2
require 'spec_helper'

3
describe 'Projects > Settings > Repository settings' do
4 5 6 7
  let(:project) { create(:project_empty_repo) }
  let(:user) { create(:user) }
  let(:role) { :developer }

8
  before do
9
    project.add_role(user, role)
10
    sign_in(user)
11 12 13
  end

  context 'for developer' do
14
    let(:role) { :developer }
15

16
    it 'is not allowed to view' do
17
      visit project_settings_repository_path(project)
18 19 20 21 22 23

      expect(page.status_code).to eq(404)
    end
  end

  context 'for master' do
24
    let(:role) { :master }
25

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

31
      it 'get list of keys' do
32 33 34
        project.deploy_keys << private_deploy_key
        project.deploy_keys << public_deploy_key

35
        visit project_settings_repository_path(project)
36 37 38 39 40

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

41
      it 'add a new deploy key' do
42
        visit project_settings_repository_path(project)
43 44 45

        fill_in 'deploy_key_title', with: 'new_deploy_key'
        fill_in 'deploy_key_key', with: new_ssh_key
46
        check 'deploy_key_deploy_keys_projects_attributes_0_can_push'
47 48 49 50 51 52
        click_button 'Add key'

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

53
      it 'edit an existing deploy key' do
54
        project.deploy_keys << private_deploy_key
55
        visit project_settings_repository_path(project)
56

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

        fill_in 'deploy_key_title', with: 'updated_deploy_key'
60
        check 'deploy_key_deploy_keys_projects_attributes_0_can_push'
61 62 63 64 65 66
        click_button 'Save changes'

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

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

72
        visit project_settings_repository_path(project)
73

74 75 76
        find('.js-deployKeys-tab-available_project_keys').click()

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

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

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

83 84 85
        expect(page).to have_content('updated_deploy_key')
      end

86
      it 'remove an existing deploy key' do
87
        project.deploy_keys << private_deploy_key
88
        visit project_settings_repository_path(project)
89

90
        accept_confirm { find('.deploy-key', text: private_deploy_key.title).find('.ic-remove').click() }
91 92 93 94

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

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

      before do
100
        stub_container_registry_config(enabled: true)
101
        visit project_settings_repository_path(project)
Mayra Cabrera's avatar
Mayra Cabrera committed
102
      end
103

104
      it 'view deploy tokens' do
105 106
        within('.deploy-tokens') do
          expect(page).to have_content(deploy_token.name)
107 108
          expect(page).to have_content('read_repository')
          expect(page).to have_content('read_registry')
109 110 111
        end
      end

112
      it 'add a new deploy token' do
113 114
        fill_in 'deploy_token_name', with: 'new_deploy_key'
        fill_in 'deploy_token_expires_at', with: (Date.today + 1.month).to_s
115 116
        check 'deploy_token_read_repository'
        check 'deploy_token_read_registry'
117 118 119 120 121
        click_button 'Create deploy token'

        expect(page).to have_content('Your new project deploy token has been created')
      end
    end
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136

    context 'remote mirror settings' do
      let(:user2) { create(:user) }

      before do
        project.add_master(user2)

        visit project_settings_repository_path(project)
      end

      it 'shows push mirror settings' do
        expect(page).to have_selector('#project_remote_mirrors_attributes_0_enabled')
        expect(page).to have_selector('#project_remote_mirrors_attributes_0_url')
      end
    end
137 138
  end
end