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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-10-19 15:57:54 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-10-19 15:57:54 +0300
commit419c53ec62de6e97a517abd5fdd4cbde3a942a34 (patch)
tree1f43a548b46bca8a5fb8fe0c31cef1883d49c5b6 /spec/support/shared_examples/features/variable_list_drawer_shared_examples.rb
parent1da20d9135b3ad9e75e65b028bffc921aaf8deb7 (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.rb230
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