diff --git a/app/assets/javascripts/jobs/components/stages_dropdown.vue b/app/assets/javascripts/jobs/components/stages_dropdown.vue index 91332c21b52d89f3e7f3a6c3c650226b7e75056a..c5076d65ff9cff7be7ca99af221e544ea87ccfc0 100644 --- a/app/assets/javascripts/jobs/components/stages_dropdown.vue +++ b/app/assets/javascripts/jobs/components/stages_dropdown.vue @@ -39,7 +39,9 @@ export default { <ci-icon :status="pipeline.details.status" class="vertical-align-middle" /> <span class="font-weight-bold">{{ __('Pipeline') }}</span> - <a :href="pipeline.path" class="js-pipeline-path link-commit">#{{ pipeline.id }}</a> + <a :href="pipeline.path" class="js-pipeline-path link-commit qa-pipeline-path" + >#{{ pipeline.id }}</a + > <template v-if="hasRef"> {{ __('from') }} <a :href="pipeline.ref.path" class="link-commit ref-name">{{ pipeline.ref.name }}</a> diff --git a/app/assets/javascripts/pipelines/components/graph/job_item.vue b/app/assets/javascripts/pipelines/components/graph/job_item.vue index cf9db89e32b7395560d9c391f24bccd823b05fa9..2b32a6e4a98b8bb8c2ab8b630853076e150098b3 100644 --- a/app/assets/javascripts/pipelines/components/graph/job_item.vue +++ b/app/assets/javascripts/pipelines/components/graph/job_item.vue @@ -108,7 +108,7 @@ export default { :href="status.details_path" :title="tooltipText" :class="cssClassJobName" - class="js-pipeline-graph-job-link" + class="js-pipeline-graph-job-link qa-job-link" > <job-name-component :name="job.name" :status="job.status" /> </gl-link> diff --git a/qa/qa/page/project/job/show.rb b/qa/qa/page/project/job/show.rb index d688f15914c3160e4522049dd371008f4d6b0340..49c676c01f254765e959a6583443829a435bcbc8 100644 --- a/qa/qa/page/project/job/show.rb +++ b/qa/qa/page/project/job/show.rb @@ -16,11 +16,19 @@ module QA::Page element :status_badge end + view 'app/assets/javascripts/jobs/components/stages_dropdown.vue' do + element :pipeline_path + end + def completed? COMPLETED_STATUSES.include?(status_badge) end - def passed? + def successful?(timeout: 60) + wait(reload: false, max: timeout) do + completed? && !trace_loading? + end + status_badge == PASSED_STATUS end diff --git a/qa/qa/page/project/pipeline/show.rb b/qa/qa/page/project/pipeline/show.rb index b22396fd67acf3912e162a5770e0b3c460a0d1c2..f192f1fc64b3edb5d34b3368e0f780db018658ed 100644 --- a/qa/qa/page/project/pipeline/show.rb +++ b/qa/qa/page/project/pipeline/show.rb @@ -11,7 +11,7 @@ module QA::Page view 'app/assets/javascripts/pipelines/components/graph/job_item.vue' do element :job_component, /class.*ci-job-component.*/ # rubocop:disable QA/ElementWithPattern - element :job_link, /class.*js-pipeline-graph-job-link.*/ # rubocop:disable QA/ElementWithPattern + element :job_link end view 'app/assets/javascripts/vue_shared/components/ci_icon.vue' do @@ -32,6 +32,10 @@ module QA::Page end end + def go_to_job(job_name) + find_element(:job_link, job_name).click + end + def go_to_first_job css = '.js-pipeline-graph-job-link' diff --git a/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb b/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb index e2320c9234331b2ca0a8e9bb2d69c7d75e138ece..11a9653db817d27e5643ec4135c286923196126d 100644 --- a/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb +++ b/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb @@ -95,11 +95,7 @@ module QA Page::Project::Pipeline::Show.act { go_to_first_job } Page::Project::Job::Show.perform do |job| - job.wait(reload: false) do - job.completed? && !job.trace_loading? - end - - expect(job.passed?).to be_truthy, "Job status did not become \"passed\"." + expect(job).to be_successful, "Job status did not become \"passed\"." expect(job.output).to include(sha1sum) end end diff --git a/qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb b/qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb index 553550eef8b2934c0184413cb12755bcc46777db..b0ff83db86bfad748faf1088457ac015aa229d7e 100644 --- a/qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb +++ b/qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb @@ -75,9 +75,30 @@ module QA Page::Project::Pipeline::Index.act { go_to_latest_pipeline } Page::Project::Pipeline::Show.perform do |pipeline| - expect(pipeline).to have_build('build', status: :success, wait: 600) - expect(pipeline).to have_build('test', status: :success, wait: 600) - expect(pipeline).to have_build('production', status: :success, wait: 1200) + pipeline.go_to_job('build') + end + Page::Project::Job::Show.perform do |job| + expect(job).to be_sucessful(timeout: 600), "Job did not pass" + + job.click_element(:pipeline_path) + end + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.go_to_job('test') + end + Page::Project::Job::Show.perform do |job| + expect(job).to be_sucessful(timeout: 600), "Job did not pass" + + job.click_element(:pipeline_path) + end + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.go_to_job('production') + end + Page::Project::Job::Show.perform do |job| + expect(job).to be_sucessful(timeout: 1200), "Job did not pass" + + job.click_element(:pipeline_path) end Page::Project::Menu.act { click_operations_environments } @@ -115,9 +136,30 @@ module QA Page::Project::Pipeline::Index.act { go_to_latest_pipeline } Page::Project::Pipeline::Show.perform do |pipeline| - expect(pipeline).to have_build('build', status: :success, wait: 600) - expect(pipeline).to have_build('test', status: :success, wait: 600) - expect(pipeline).to have_build('production', status: :success, wait: 1200) + pipeline.go_to_job('build') + end + Page::Project::Job::Show.perform do |job| + expect(job).to be_sucessful(timeout: 600), "Job did not pass" + + job.click_element(:pipeline_path) + end + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.go_to_job('test') + end + Page::Project::Job::Show.perform do |job| + expect(job).to be_sucessful(timeout: 600), "Job did not pass" + + job.click_element(:pipeline_path) + end + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.go_to_job('production') + end + Page::Project::Job::Show.perform do |job| + expect(job).to be_sucessful(timeout: 1200), "Job did not pass" + + job.click_element(:pipeline_path) end Page::Project::Menu.act { click_operations_environments }