diff --git a/app/assets/javascripts/security_configuration/components/feature_card.vue b/app/assets/javascripts/security_configuration/components/feature_card.vue index 7f0a049a6adcd3dd85560571896846faa149542b..395bdad5dcc5599d3cb1876daee3d8cf4d0932c9 100644 --- a/app/assets/javascripts/security_configuration/components/feature_card.vue +++ b/app/assets/javascripts/security_configuration/components/feature_card.vue @@ -95,6 +95,9 @@ export default { showSecondaryConfigurationHelpPath() { return Boolean(this.available && this.feature.secondary?.configurationHelpPath); }, + hyphenatedFeature() { + return this.feature.type.replace(/_/g, '-'); + }, }, methods: { onError(message) { @@ -167,7 +170,7 @@ export default { :href="feature.configurationPath" variant="confirm" :category="configurationButton.category" - :data-testid="`${feature.type}_enable_button`" + :data-testid="`${hyphenatedFeature}-enable-button`" class="gl-mt-5" > {{ configurationButton.text }} @@ -179,7 +182,7 @@ export default { variant="confirm" :category="manageViaMrButtonCategory" class="gl-mt-5" - :data-testid="`${feature.type}_mr_button`" + :data-testid="`${hyphenatedFeature}-mr-button`" @error="onError" /> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue index 0ce8389579de67fbc77ddb3e99baf3964ca00168..ac434c5be4ed3482a36940b22072ef6b50fbdae6 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue @@ -634,7 +634,6 @@ export default { variant="confirm" :disabled="isMergeButtonDisabled" :loading="isMakingRequest" - data-qa-selector="merge_button" @click="handleMergeButtonClick(isAutoMergeAvailable)" >{{ mergeButtonText }}</gl-button > @@ -644,7 +643,6 @@ export default { :disabled="isMergeButtonDisabled" variant="confirm" data-testid="merge-immediately-dropdown" - data-qa-selector="merge_moment_dropdown" toggle-class="btn-icon js-merge-moment" > <template #button-content> @@ -655,7 +653,6 @@ export default { icon-name="warning" button-class="accept-merge-request" data-testid="merge-immediately-button" - data-qa-selector="merge_immediately_menu_item" @click="handleMergeImmediatelyButtonClick" > {{ __('Merge immediately') }} @@ -692,7 +689,7 @@ export default { <div v-else class="gl-w-full gl-order-n1 mr-widget-merge-details" - data-qa-selector="merged_status_content" + data-testid="merged-status-content" > <p v-if="showMergeDetailsHeader" class="gl-mb-2 gl-text-gray-900"> {{ __('Merge details') }} diff --git a/ee/app/assets/javascripts/vue_merge_request_widget/components/merge_immediately_confirmation_dialog.vue b/ee/app/assets/javascripts/vue_merge_request_widget/components/merge_immediately_confirmation_dialog.vue index 4a30466612d9e14b9b2e9b5dd08f09a217354fa1..2c514741d276cae6a8796cbc9fe9377738422955 100644 --- a/ee/app/assets/javascripts/vue_merge_request_widget/components/merge_immediately_confirmation_dialog.vue +++ b/ee/app/assets/javascripts/vue_merge_request_widget/components/merge_immediately_confirmation_dialog.vue @@ -62,7 +62,7 @@ export default { <gl-button ref="cancelButton" @click="cancel">{{ __('Cancel') }}</gl-button> <gl-button variant="danger" - data-qa-selector="merge_immediately_button" + data-testid="merge-immediately-confirmation-button" @click="mergeImmediately" >{{ __('Merge immediately') }}</gl-button > diff --git a/qa/qa/ee/page/merge_request/show.rb b/qa/qa/ee/page/merge_request/show.rb index 03f235ec166e9f6f6ccd972759aa4a94d8a23bfc..5546a258ec0d52e3cd7a67585d86cd3c9262650c 100644 --- a/qa/qa/ee/page/merge_request/show.rb +++ b/qa/qa/ee/page/merge_request/show.rb @@ -44,7 +44,7 @@ def self.prepended(base) end view 'ee/app/assets/javascripts/vue_merge_request_widget/components/merge_immediately_confirmation_dialog.vue' do - element :merge_immediately_button + element 'merge-immediately-confirmation-button' end view 'ee/app/assets/javascripts/security_dashboard/components/pipeline/vulnerability_finding_modal.vue' do @@ -234,13 +234,13 @@ def num_approvals_required end def skip_merge_train_and_merge_immediately - click_element :merge_moment_dropdown - click_element :merge_immediately_menu_item + click_element 'merge-immediately-dropdown' + click_element 'merge-immediately-button' # Wait for the warning modal dialog to appear - wait_for_animated_element :merge_immediately_button + wait_for_animated_element 'merge-immediately-confirmation-button' - click_element :merge_immediately_button + click_element 'merge-immediately-confirmation-button' finished_loading? end diff --git a/qa/qa/ee/page/project/pipeline/show.rb b/qa/qa/ee/page/project/pipeline/show.rb index ab16f07d4b24948b1897ba2c3361934881fba406..15c04f4e271e02d35303e8c95fe17a391fdc64da 100644 --- a/qa/qa/ee/page/project/pipeline/show.rb +++ b/qa/qa/ee/page/project/pipeline/show.rb @@ -36,18 +36,6 @@ def has_license?(name) has_element?('report-item-row', text: name) end - def has_approved_license?(name) - within_element('report-item-row', text: name) do - has_element?(:status_success_icon, wait: 1) - end - end - - def has_denied_license?(name) - within_element('report-item-row', text: name) do - has_element?(:status_failed_icon, wait: 1) - end - end - def wait_for_pipeline_job_replication(name) QA::Runtime::Logger.debug(%(#{self.class.name} - wait_for_pipeline_job_replication)) wait_until(max_duration: Runtime::Geo.max_file_replication_time) do diff --git a/qa/qa/page/blame/show.rb b/qa/qa/page/blame/show.rb index 42fb217d2df528b3dc4faa5817dcdba7def089e8..39117efb2a553a23256dac348219b83e50158bf8 100644 --- a/qa/qa/page/blame/show.rb +++ b/qa/qa/page/blame/show.rb @@ -9,7 +9,7 @@ class Show < Page::Base end view 'app/views/projects/blame/show.html.haml' do - element :blame_file_content + element 'blob-content-holder' end def has_file?(file_name) @@ -23,11 +23,11 @@ def has_no_file?(file_name) end def has_file_content?(file_content) - within_element(:blame_file_content) { has_text?(file_content) } + within_element('blob-content-holder') { has_text?(file_content) } end def has_no_file_content?(file_content) - within_element(:blame_file_content) do + within_element('blob-content-holder') do has_no_text?(file_content) end end diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index 66a709c4d2322f8d2813d50d798c4ffbb3d815a1..ddde9ac590f5312783147a72d4ae59187918a1ef 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -81,10 +81,10 @@ class Show < Page::Base end view 'app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue' do - element :merge_button - element :merge_moment_dropdown - element :merge_immediately_menu_item - element :merged_status_content + element 'merge-button' + element 'merge-immediately-dropdown' + element 'merge-immediately-button' + element 'merged-status-content' end view 'app/assets/javascripts/vue_merge_request_widget/components/states/sha_mismatch.vue' do @@ -253,13 +253,13 @@ def open_file_tree def has_merge_button? refresh - has_element?(:merge_button) + has_element?('merge-button') end def has_no_merge_button? refresh - has_no_element?(:merge_button) + has_no_element?('merge-button') end RSpec::Matchers.define :have_merge_button do @@ -306,7 +306,7 @@ def merge! def merge_when_pipeline_succeeds! wait_until_ready_to_merge - click_element(:merge_button, text: 'Merge when pipeline succeeds') + click_element('merge-button', text: 'Merge when pipeline succeeds') end def merged? @@ -317,17 +317,17 @@ def merged? # To remove page refresh logic if possible # We don't raise on failure because this method is used as a predicate matcher retry_until(max_attempts: 3, reload: true, raise_on_failure: false) do - has_element?(:merged_status_content, text: /The changes were merged into|Changes merged into/, wait: 20) + has_element?('merged-status-content', text: /The changes were merged into|Changes merged into/, wait: 20) end end RSpec::Matchers.define :be_mergeable do match do |page| - page.has_element?(:merge_button, disabled: false) + page.has_element?('merge-button', disabled: false) end match_when_negated do |page| - page.has_no_element?(:merge_button, disabled: false) + page.has_no_element?('merge-button', disabled: false) end end @@ -347,9 +347,9 @@ def wait_until_ready_to_merge(transient_test: false) wait_until(message: "Waiting for ready to merge", sleep_interval: 1) do # changes in mr are rendered async, because of that mr can sometimes show no changes and there will be no # merge button, in such case we must retry loop otherwise find_element will raise ElementNotFound error - next false unless has_element?(:merge_button, wait: 1) + next false unless has_element?('merge-button', wait: 1) - break true unless find_element(:merge_button).disabled? + break true unless find_element('merge-button').disabled? # If the widget shows "Merge blocked: new changes were just added" we can refresh the page and check again next false if has_element?(:head_mismatch_content, wait: 1) @@ -380,11 +380,11 @@ def rebase! def merge_immediately! retry_until(reload: true, sleep_interval: 1, max_attempts: 12) do - if has_element?(:merge_moment_dropdown) - click_element(:merge_moment_dropdown, skip_finished_loading_check: true) - click_element(:merge_immediately_menu_item, skip_finished_loading_check: true) + if has_element?('merge-immediately-dropdown') + click_element('merge-immediately-dropdown', skip_finished_loading_check: true) + click_element('merge-immediately-button', skip_finished_loading_check: true) else - click_element(:merge_button, skip_finished_loading_check: true) + click_element('merge-button', skip_finished_loading_check: true) end merged? @@ -395,9 +395,9 @@ def try_to_merge! # Revisit after merge page re-architect is done https://gitlab.com/gitlab-org/gitlab/-/issues/300042 # To remove page refresh logic if possible wait_until_ready_to_merge - wait_until { !find_element(:merge_button).text.include?('when pipeline succeeds') } # rubocop:disable Rails/NegateInclude + wait_until { !find_element('merge-button').text.include?('when pipeline succeeds') } # rubocop:disable Rails/NegateInclude - click_element(:merge_button) + click_element('merge-button') end def view_email_patches diff --git a/qa/qa/page/project/secure/configuration_form.rb b/qa/qa/page/project/secure/configuration_form.rb index 32609943f3e23a46c92630f69899c6507063b8d8..28d96d54caf9c8214bed42a75307c52347245f72 100644 --- a/qa/qa/page/project/secure/configuration_form.rb +++ b/qa/qa/page/project/secure/configuration_form.rb @@ -14,8 +14,8 @@ class ConfigurationForm < QA::Page::Base view 'app/assets/javascripts/security_configuration/components/feature_card.vue' do element 'feature-status' - element :sast_enable_button, "`${feature.type}_enable_button`" # rubocop:disable QA/ElementWithPattern - element :dependency_scanning_mr_button, "`${feature.type}_mr_button`" # rubocop:disable QA/ElementWithPattern + element 'sast-enable-button', "`${hyphenatedFeature}-enable-button`" # rubocop:disable QA/ElementWithPattern + element 'dependency-scanning-mr-button', "`${hyphenatedFeature}-mr-button`" # rubocop:disable QA/ElementWithPattern end view 'app/assets/javascripts/security_configuration/components/auto_dev_ops_alert.vue' do @@ -35,11 +35,11 @@ def click_security_configuration_history_link end def click_sast_enable_button - click_element(:sast_enable_button) + click_element('sast-enable-button') end def click_dependency_scanning_mr_button - click_element(:dependency_scanning_mr_button) + click_element('dependency-scanning-mr-button') end def has_true_sast_status? diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb index cad50fc032b36c52a6043451aadd985e7c9a3748..5ef265e67dc39d806659c3667901347d8d69d530 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb @@ -75,7 +75,7 @@ module QA mr.retry_until(reload: true, message: 'Wait until ready to click MWPS') do # Click the MWPS button if we can - break mr.merge_when_pipeline_succeeds! if mr.has_element?(:merge_button, text: 'Merge when pipeline succeeds') + break mr.merge_when_pipeline_succeeds! if mr.has_element?('merge-button', text: 'Merge when pipeline succeeds') # But fail if the button is missing because the pipeline is complete raise "The pipeline already finished before we could click MWPS" if mr.wait_until { project.pipelines.first }[:status] == 'success'