diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-19 15:57:54 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-19 15:57:54 +0300 |
commit | 419c53ec62de6e97a517abd5fdd4cbde3a942a34 (patch) | |
tree | 1f43a548b46bca8a5fb8fe0c31cef1883d49c5b6 /spec/support/shared_examples/features/variable_list_drawer_shared_examples.rb | |
parent | 1da20d9135b3ad9e75e65b028bffc921aaf8deb7 (diff) |
Add latest changes from gitlab-org/gitlab@16-5-stable-eev16.5.0-rc42
Diffstat (limited to 'spec/support/shared_examples/features/variable_list_drawer_shared_examples.rb')
-rw-r--r-- | spec/support/shared_examples/features/variable_list_drawer_shared_examples.rb | 230 |
1 files changed, 222 insertions, 8 deletions
diff --git a/spec/support/shared_examples/features/variable_list_drawer_shared_examples.rb b/spec/support/shared_examples/features/variable_list_drawer_shared_examples.rb index 9f01c69608d..b438a23aafd 100644 --- a/spec/support/shared_examples/features/variable_list_drawer_shared_examples.rb +++ b/spec/support/shared_examples/features/variable_list_drawer_shared_examples.rb @@ -1,23 +1,237 @@ # frozen_string_literal: true RSpec.shared_examples 'variable list drawer' do - it 'adds a new CI variable' do - click_button('Add variable') + it 'renders the list drawer' do + open_drawer - # For now, we just check that the drawer is displayed expect(page).to have_selector('[data-testid="ci-variable-drawer"]') + end + + it 'adds a new CI variable' do + open_drawer + + fill_variable('NEW_KEY', 'NEW_VALUE') + click_add_variable + + wait_for_requests + + page.within('[data-testid="ci-variable-table"]') do + expect(first(".js-ci-variable-row td[data-label='#{s_('CiVariables|Key')}']")).to have_content('NEW_KEY') + + click_button('Reveal values') + + expect(first(".js-ci-variable-row td[data-label='#{s_('CiVariables|Value')}']")).to have_content('NEW_VALUE') + end + end + + it 'allows variable with empty value to be created' do + open_drawer + + fill_variable('NEW_KEY') + + page.within('[data-testid="ci-variable-drawer"]') do + expect(find_button('Add variable', disabled: false)).to be_present + end + end + + it 'defaults to unmasked, expanded' do + open_drawer + + fill_variable('NEW_KEY') + click_add_variable + + wait_for_requests + + page.within('[data-testid="ci-variable-table"]') do + key_column = first(".js-ci-variable-row:nth-child(1) td[data-label='#{s_('CiVariables|Key')}']") + + expect(key_column).not_to have_content(s_('CiVariables|Masked')) + expect(key_column).to have_content(s_('CiVariables|Expanded')) + end + end + + context 'with application setting for protected attribute' do + context 'when application setting is true' do + before do + stub_application_setting(protected_ci_variables: true) + + visit page_path + end + + it 'defaults to protected' do + open_drawer + + page.within('[data-testid="ci-variable-drawer"]') do + expect(find('[data-testid="ci-variable-protected-checkbox"]')).to be_checked + end + end + end + + context 'when application setting is false' do + before do + stub_application_setting(protected_ci_variables: false) + + visit page_path + end - # TODO: Add tests for ADDING a variable via drawer when feature is available + it 'defaults to unprotected' do + open_drawer + + page.within('[data-testid="ci-variable-drawer"]') do + expect(find('[data-testid="ci-variable-protected-checkbox"]')).not_to be_checked + end + end + end end it 'edits a variable' do + key_column = first(".js-ci-variable-row td[data-label='#{s_('CiVariables|Key')}']") + value_column = first(".js-ci-variable-row td[data-label='#{s_('CiVariables|Value')}']") + + expect(key_column).to have_content('test_key') + expect(key_column).not_to have_content(s_('CiVariables|Protected')) + expect(key_column).to have_content(s_('CiVariables|Masked')) + expect(key_column).to have_content(s_('CiVariables|Expanded')) + + click_button('Edit') + + fill_variable('EDITED_KEY', 'EDITED_VALUE') + toggle_protected + toggle_masked + toggle_expanded + click_button('Edit variable') + + wait_for_requests + page.within('[data-testid="ci-variable-table"]') do - click_button('Edit') + expect(key_column).to have_content('EDITED_KEY') + expect(key_column).to have_content(s_('CiVariables|Protected')) + expect(key_column).not_to have_content(s_('CiVariables|Masked')) + expect(key_column).not_to have_content(s_('CiVariables|Expanded')) + + click_button('Reveal values') + + expect(value_column).to have_content('EDITED_VALUE') end + end - # For now, we just check that the drawer is displayed - expect(page).to have_selector('[data-testid="ci-variable-drawer"]') + it 'shows validation error for duplicate keys' do + open_drawer + + fill_variable('NEW_KEY', 'NEW_VALUE') + click_add_variable + + wait_for_requests + + open_drawer - # TODO: Add tests for EDITING a variable via drawer when feature is available + fill_variable('NEW_KEY', 'NEW_VALUE') + click_add_variable + + wait_for_requests + + expect(find('.flash-container')).to be_present + expect(find('[data-testid="alert-danger"]').text).to have_content('(NEW_KEY) has already been taken') + end + + it 'shows validation error for unmaskable values' do + open_drawer + + toggle_masked + fill_variable('EMPTY_MASK_KEY', '???') + + expect(page).to have_content('This variable value does not meet the masking requirements.') + page.within('[data-testid="ci-variable-drawer"]') do + expect(find_button('Add variable', disabled: true)).to be_present + end + end + + it 'handles multiple edits and a deletion' do + # Create two variables + open_drawer + fill_variable('akey', 'akeyvalue') + click_add_variable + + wait_for_requests + + open_drawer + fill_variable('zkey', 'zkeyvalue') + click_add_variable + + wait_for_requests + + expect(page).to have_selector('.js-ci-variable-row', count: 3) + + # Remove the `akey` variable + page.within('[data-testid="ci-variable-table"]') do + page.within('.js-ci-variable-row:first-child') do + click_button('Edit') + end + end + + page.within('[data-testid="ci-variable-drawer"]') do + click_button('Delete variable') # opens confirmation modal + end + + page.within('[data-testid="ci-variable-drawer-confirm-delete-modal"]') do + click_button('Delete') + end + + wait_for_requests + + # Add another variable + open_drawer + fill_variable('ckey', 'ckeyvalue') + click_add_variable + + wait_for_requests + + # expect to find 3 rows of variables in alphabetical order + expect(page).to have_selector('.js-ci-variable-row', count: 3) + rows = all('.js-ci-variable-row') + expect(rows[0].find('td[data-label="Key"]')).to have_content('ckey') + expect(rows[1].find('td[data-label="Key"]')).to have_content('test_key') + expect(rows[2].find('td[data-label="Key"]')).to have_content('zkey') + end + + private + + def open_drawer + page.within('[data-testid="ci-variable-table"]') do + click_button('Add variable') + end + end + + def click_add_variable + page.within('[data-testid="ci-variable-drawer"]') do + click_button('Add variable') + end + end + + def fill_variable(key, value = '') + wait_for_requests + + page.within('[data-testid="ci-variable-drawer"]') do + find('[data-testid="ci-variable-key"] input').set(key) + find('[data-testid="ci-variable-value"]').set(value) if value.present? + end + end + + def toggle_protected + page.within('[data-testid="ci-variable-drawer"]') do + find('[data-testid="ci-variable-protected-checkbox"]').click + end + end + + def toggle_masked + page.within('[data-testid="ci-variable-drawer"]') do + find('[data-testid="ci-variable-masked-checkbox"]').click + end + end + + def toggle_expanded + page.within('[data-testid="ci-variable-drawer"]') do + find('[data-testid="ci-variable-expanded-checkbox"]').click + end end end |