triggers_spec.rb 5.84 KB
Newer Older
1 2
# frozen_string_literal: true

3 4
require 'spec_helper'

5
RSpec.describe 'Triggers', :js do
6
  let(:trigger_title) { 'trigger desc' }
7
  let(:user) { create(:user) }
8 9
  let(:user2) { create(:user) }
  let(:guest_user) { create(:user) }
10 11

  before do
12
    sign_in(user)
13

14
    @project = create(:project)
15 16
    @project.add_maintainer(user)
    @project.add_maintainer(user2)
17
    @project.add_guest(guest_user)
18

19
    visit project_settings_ci_cd_path(@project)
20 21
  end

22 23 24 25 26 27 28 29 30
  shared_examples 'triggers page' do
    describe 'create trigger workflow' do
      it 'prevents adding new trigger with no description' do
        fill_in 'trigger_description', with: ''
        click_button 'Add trigger'

        # See if input has error due to empty value
        expect(page.find('form.gl-show-field-errors .gl-field-error')).to be_visible
      end
31

32 33 34
      it 'adds new trigger with description' do
        fill_in 'trigger_description', with: 'trigger desc'
        click_button 'Add trigger'
35

36 37 38 39 40 41
        aggregate_failures 'display creation notice and trigger is created' do
          expect(page.find('.flash-notice')).to have_content 'Trigger was created successfully.'
          expect(page.find('.triggers-list')).to have_content 'trigger desc'
          expect(page.find('.triggers-list .trigger-owner')).to have_content user.name
        end
      end
42 43
    end

44 45
    describe 'edit trigger workflow' do
      let(:new_trigger_title) { 'new trigger' }
46

47 48 49
      it 'click on edit trigger opens edit trigger page' do
        create(:ci_trigger, owner: user, project: @project, description: trigger_title)
        visit project_settings_ci_cd_path(@project)
50

51 52 53 54
        # See if edit page has correct descrption
        find('a[title="Edit"]').send_keys(:return)
        expect(page.find('#trigger_description').value).to have_content 'trigger desc'
      end
55

56 57 58
      it 'edit trigger and save' do
        create(:ci_trigger, owner: user, project: @project, description: trigger_title)
        visit project_settings_ci_cd_path(@project)
59

60 61 62 63
        # See if edit page opens, then fill in new description and save
        find('a[title="Edit"]').send_keys(:return)
        fill_in 'trigger_description', with: new_trigger_title
        click_button 'Save trigger'
64

65 66 67 68 69 70
        aggregate_failures 'display update notice and trigger is updated' do
          expect(page.find('.flash-notice')).to have_content 'Trigger was successfully updated.'
          expect(page.find('.triggers-list')).to have_content new_trigger_title
          expect(page.find('.triggers-list .trigger-owner')).to have_content user.name
        end
      end
71 72
    end

73 74 75 76 77
    describe 'trigger "Revoke" workflow' do
      before do
        create(:ci_trigger, owner: user2, project: @project, description: trigger_title)
        visit project_settings_ci_cd_path(@project)
      end
78

79 80 81
      it 'button "Revoke" has correct alert' do
        expected_alert = 'By revoking a trigger you will break any processes making use of it. Are you sure?'
        expect(page.find('[data-testid="trigger_revoke_button"]')['data-confirm']).to eq expected_alert
82
      end
83

84 85 86 87 88
      it 'revoke trigger' do
        # See if "Revoke" on trigger works post trigger creation
        page.accept_confirm do
          find('[data-testid="trigger_revoke_button"]').send_keys(:return)
        end
89

90 91 92 93 94
        aggregate_failures 'trigger is removed' do
          expect(page.find('.flash-notice')).to have_content 'Trigger removed'
          expect(page).to have_css('[data-testid="no_triggers_content"]')
        end
      end
95 96
    end

97 98 99 100
    describe 'show triggers workflow' do
      it 'contains trigger description placeholder' do
        expect(page.find('#trigger_description')['placeholder']).to eq 'Trigger description'
      end
101

102 103 104 105 106 107 108 109 110
      it 'show "invalid" badge for trigger with owner having insufficient permissions' do
        create(:ci_trigger, owner: guest_user, project: @project, description: trigger_title)
        visit project_settings_ci_cd_path(@project)

        aggregate_failures 'has invalid badge and no edit link' do
          expect(page.find('.triggers-list')).to have_content 'invalid'
          expect(page.find('.triggers-list')).not_to have_selector('a[title="Edit"]')
        end
      end
111

112 113 114 115 116 117 118 119 120 121 122 123
      it 'do not show "Edit" or full token for not owned trigger' do
        # Create trigger with user different from current_user
        create(:ci_trigger, owner: user2, project: @project, description: trigger_title)
        visit project_settings_ci_cd_path(@project)

        aggregate_failures 'shows truncated token, no clipboard button and no edit link' do
          expect(page.find('.triggers-list')).to have_content(@project.triggers.first.token[0..3])
          expect(page.find('.triggers-list')).not_to have_selector('[data-testid="clipboard-btn"]')
          expect(page.find('.triggers-list .trigger-owner')).not_to have_content user.name
          expect(page.find('.triggers-list')).not_to have_selector('a[title="Edit"]')
        end
      end
124

125 126 127
      it 'show "Edit" and full token for owned trigger' do
        create(:ci_trigger, owner: user, project: @project, description: trigger_title)
        visit project_settings_ci_cd_path(@project)
128

129 130 131 132 133 134 135
        aggregate_failures 'shows full token, clipboard button and edit link' do
          expect(page.find('.triggers-list')).to have_content @project.triggers.first.token
          expect(page.find('.triggers-list')).to have_selector('[data-testid="clipboard-btn"]')
          expect(page.find('.triggers-list .trigger-owner')).to have_content user.name
          expect(page.find('.triggers-list')).to have_selector('a[title="Edit"]')
        end
      end
136
    end
137
  end
138

139 140 141
  context 'when ci_pipeline_triggers_settings_vue_ui is enabled' do
    it_behaves_like 'triggers page'
  end
142

143 144 145
  context 'when ci_pipeline_triggers_settings_vue_ui is disabled' do
    before do
      stub_feature_flags(ci_pipeline_triggers_settings_vue_ui: false)
146
    end
147 148

    it_behaves_like 'triggers page'
149 150
  end
end