diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-18 10:34:06 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-18 10:34:06 +0000 |
commit | 859a6fb938bb9ee2a317c46dfa4fcc1af49608f0 (patch) | |
tree | d7f2700abe6b4ffcb2dcfc80631b2d87d0609239 /spec/features/projects/pipelines | |
parent | 446d496a6d000c73a304be52587cd9bbc7493136 (diff) | |
download | gitlab-ce-859a6fb938bb9ee2a317c46dfa4fcc1af49608f0.tar.gz |
Add latest changes from gitlab-org/gitlab@13-9-stable-eev13.9.0-rc42
Diffstat (limited to 'spec/features/projects/pipelines')
-rw-r--r-- | spec/features/projects/pipelines/pipeline_spec.rb | 221 | ||||
-rw-r--r-- | spec/features/projects/pipelines/pipelines_spec.rb | 113 |
2 files changed, 251 insertions, 83 deletions
diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb index ac3566fbbdd..94800717677 100644 --- a/spec/features/projects/pipelines/pipeline_spec.rb +++ b/spec/features/projects/pipelines/pipeline_spec.rb @@ -14,7 +14,6 @@ RSpec.describe 'Pipeline', :js do before do sign_in(user) project.add_role(user, role) - stub_feature_flags(graphql_pipeline_details: false) end shared_context 'pipeline builds' do @@ -57,7 +56,7 @@ RSpec.describe 'Pipeline', :js do end end - describe 'GET /:project/pipelines/:id' do + describe 'GET /:project/-/pipelines/:id' do include_context 'pipeline builds' let(:group) { create(:group) } @@ -69,7 +68,7 @@ RSpec.describe 'Pipeline', :js do it 'shows the pipeline graph' do visit_pipeline - expect(page).to have_selector('.pipeline-visualization') + expect(page).to have_selector('.js-pipeline-graph') expect(page).to have_content('Build') expect(page).to have_content('Test') expect(page).to have_content('Deploy') @@ -625,20 +624,6 @@ RSpec.describe 'Pipeline', :js do end end end - - context 'when FF dag_pipeline_tab is disabled' do - before do - stub_feature_flags(dag_pipeline_tab: false) - visit_pipeline - end - - it 'does not show DAG link' do - expect(page).to have_link('Pipeline') - expect(page).to have_link('Jobs') - expect(page).not_to have_link('DAG') - expect(page).to have_link('Failed Jobs') - end - end end context 'when user does not have access to read jobs' do @@ -646,7 +631,7 @@ RSpec.describe 'Pipeline', :js do project.update(public_builds: false) end - describe 'GET /:project/pipelines/:id' do + describe 'GET /:project/-/pipelines/:id' do include_context 'pipeline builds' let(:project) { create(:project, :repository) } @@ -657,7 +642,7 @@ RSpec.describe 'Pipeline', :js do end it 'shows the pipeline graph' do - expect(page).to have_selector('.pipeline-visualization') + expect(page).to have_selector('.js-pipeline-graph') expect(page).to have_content('Build') expect(page).to have_content('Test') expect(page).to have_content('Deploy') @@ -691,13 +676,13 @@ RSpec.describe 'Pipeline', :js do downstream: downstream) end - describe 'GET /:project/pipelines/:id' do + describe 'GET /:project/-/pipelines/:id' do before do visit project_pipeline_path(project, pipeline) end it 'shows the pipeline with a bridge job' do - expect(page).to have_selector('.pipeline-visualization') + expect(page).to have_selector('.js-pipeline-graph') expect(page).to have_content('cross-build') end @@ -740,7 +725,7 @@ RSpec.describe 'Pipeline', :js do end end - describe 'GET /:project/pipelines/:id/builds' do + describe 'GET /:project/-/pipelines/:id/builds' do before do visit builds_project_pipeline_path(project, pipeline) end @@ -767,9 +752,64 @@ RSpec.describe 'Pipeline', :js do stage_idx: 2, pipeline: pipeline, project: project, resource_group: resource_group) end - describe 'GET /:project/pipelines/:id' do + describe 'GET /:project/-/pipelines/:id' do subject { visit project_pipeline_path(project, pipeline) } + # remove when :graphql_pipeline_details flag is removed + # https://gitlab.com/gitlab-org/gitlab/-/issues/299112 + context 'when :graphql_pipeline_details flag is off' do + before do + stub_feature_flags(graphql_pipeline_details: false) + stub_feature_flags(graphql_pipeline_details_users: false) + end + + it 'shows deploy job as created' do + subject + + within('.pipeline-header-container') do + expect(page).to have_content('pending') + end + + within('.js-pipeline-graph') do + within '.stage-column:nth-child(1)' do + expect(page).to have_content('test') + expect(page).to have_css('.ci-status-icon-pending') + end + + within '.stage-column:nth-child(2)' do + expect(page).to have_content('deploy') + expect(page).to have_css('.ci-status-icon-created') + end + end + end + + context 'when test job succeeded' do + before do + test_job.success! + end + + it 'shows deploy job as pending' do + subject + + within('.pipeline-header-container') do + expect(page).to have_content('running') + end + + within('.pipeline-graph') do + within '.stage-column:nth-child(1)' do + expect(page).to have_content('test') + expect(page).to have_css('.ci-status-icon-success') + end + + within '.stage-column:nth-child(2)' do + expect(page).to have_content('deploy') + expect(page).to have_css('.ci-status-icon-pending') + end + end + end + end + end + it 'shows deploy job as created' do subject @@ -777,13 +817,13 @@ RSpec.describe 'Pipeline', :js do expect(page).to have_content('pending') end - within('.pipeline-graph') do - within '.stage-column:nth-child(1)' do + within('.js-pipeline-graph') do + within(all('[data-testid="stage-column"]')[0]) do expect(page).to have_content('test') expect(page).to have_css('.ci-status-icon-pending') end - within '.stage-column:nth-child(2)' do + within(all('[data-testid="stage-column"]')[1]) do expect(page).to have_content('deploy') expect(page).to have_css('.ci-status-icon-created') end @@ -802,13 +842,13 @@ RSpec.describe 'Pipeline', :js do expect(page).to have_content('running') end - within('.pipeline-graph') do - within '.stage-column:nth-child(1)' do + within('.js-pipeline-graph') do + within(all('[data-testid="stage-column"]')[0]) do expect(page).to have_content('test') expect(page).to have_css('.ci-status-icon-success') end - within '.stage-column:nth-child(2)' do + within(all('[data-testid="stage-column"]')[1]) do expect(page).to have_content('deploy') expect(page).to have_css('.ci-status-icon-pending') end @@ -831,14 +871,37 @@ RSpec.describe 'Pipeline', :js do expect(page).to have_content('waiting') end - within('.pipeline-graph') do - within '.stage-column:nth-child(2)' do + within('.js-pipeline-graph') do + within(all('[data-testid="stage-column"]')[1]) do expect(page).to have_content('deploy') expect(page).to have_css('.ci-status-icon-waiting-for-resource') end end end + # remove when :graphql_pipeline_details flag is removed + # https://gitlab.com/gitlab-org/gitlab/-/issues/299112 + context 'when :graphql_pipeline_details flag is off' do + before do + stub_feature_flags(graphql_pipeline_details: false) + stub_feature_flags(graphql_pipeline_details_users: false) + end + it 'shows deploy job as waiting for resource' do + subject + + within('.pipeline-header-container') do + expect(page).to have_content('waiting') + end + + within('.pipeline-graph') do + within '.stage-column:nth-child(2)' do + expect(page).to have_content('deploy') + expect(page).to have_css('.ci-status-icon-waiting-for-resource') + end + end + end + end + context 'when resource is released from another job' do before do another_job.success! @@ -851,19 +914,86 @@ RSpec.describe 'Pipeline', :js do expect(page).to have_content('running') end - within('.pipeline-graph') do - within '.stage-column:nth-child(2)' do + within('.js-pipeline-graph') do + within(all('[data-testid="stage-column"]')[1]) do expect(page).to have_content('deploy') expect(page).to have_css('.ci-status-icon-pending') end end end + + # remove when :graphql_pipeline_details flag is removed + # https://gitlab.com/gitlab-org/gitlab/-/issues/299112 + context 'when :graphql_pipeline_details flag is off' do + before do + stub_feature_flags(graphql_pipeline_details: false) + stub_feature_flags(graphql_pipeline_details_users: false) + end + it 'shows deploy job as pending' do + subject + + within('.pipeline-header-container') do + expect(page).to have_content('running') + end + + within('.pipeline-graph') do + within '.stage-column:nth-child(2)' do + expect(page).to have_content('deploy') + expect(page).to have_css('.ci-status-icon-pending') + end + end + end + end + end + + context 'when deploy job is a bridge to trigger a downstream pipeline' do + let!(:deploy_job) do + create(:ci_bridge, :created, stage: 'deploy', name: 'deploy', + stage_idx: 2, pipeline: pipeline, project: project, resource_group: resource_group) + end + + it 'shows deploy job as waiting for resource' do + subject + + within('.pipeline-header-container') do + expect(page).to have_content('waiting') + end + + within('.js-pipeline-graph') do + within(all('[data-testid="stage-column"]')[1]) do + expect(page).to have_content('deploy') + expect(page).to have_css('.ci-status-icon-waiting-for-resource') + end + end + end + end + + context 'when deploy job is a bridge to trigger a downstream pipeline' do + let!(:deploy_job) do + create(:ci_bridge, :created, stage: 'deploy', name: 'deploy', + stage_idx: 2, pipeline: pipeline, project: project, resource_group: resource_group) + end + + it 'shows deploy job as waiting for resource' do + subject + + within('.pipeline-header-container') do + expect(page).to have_content('waiting') + end + + within('.js-pipeline-graph') do + within(all('[data-testid="stage-column"]')[1]) do + expect(page).to have_content('deploy') + expect(page).to have_css('.ci-status-icon-waiting-for-resource') + end + end + end end end end end - describe 'GET /:project/pipelines/:id/builds' do + describe 'GET /:project/-/pipelines/:id/builds' do include_context 'pipeline builds' let(:project) { create(:project, :repository) } @@ -965,7 +1095,7 @@ RSpec.describe 'Pipeline', :js do end end - describe 'GET /:project/pipelines/:id/failures' do + describe 'GET /:project/-/pipelines/:id/failures' do let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master', sha: '1234') } let(:pipeline_failures_page) { failures_project_pipeline_path(project, pipeline) } let!(:failed_build) { create(:ci_build, :failed, pipeline: pipeline) } @@ -1078,12 +1208,29 @@ RSpec.describe 'Pipeline', :js do expect(current_path).to eq(pipeline_path(pipeline)) expect(page).not_to have_content('Failed Jobs') - expect(page).to have_selector('.pipeline-visualization') + expect(page).to have_selector('.js-pipeline-graph') + end + + # remove when :graphql_pipeline_details flag is removed + # https://gitlab.com/gitlab-org/gitlab/-/issues/299112 + context 'when :graphql_pipeline_details flag is off' do + before do + stub_feature_flags(graphql_pipeline_details: false) + stub_feature_flags(graphql_pipeline_details_users: false) + end + + it 'displays the pipeline graph' do + subject + + expect(current_path).to eq(pipeline_path(pipeline)) + expect(page).not_to have_content('Failed Jobs') + expect(page).to have_selector('.pipeline-visualization') + end end end end - describe 'GET /:project/pipelines/:id/dag' do + describe 'GET /:project/-/pipelines/:id/dag' do include_context 'pipeline builds' let(:project) { create(:project, :repository) } diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb index 450524b8d70..6421d3db2cd 100644 --- a/spec/features/projects/pipelines/pipelines_spec.rb +++ b/spec/features/projects/pipelines/pipelines_spec.rb @@ -13,11 +13,13 @@ RSpec.describe 'Pipelines', :js do before do sign_in(user) stub_feature_flags(graphql_pipeline_details: false) + stub_feature_flags(graphql_pipeline_details_users: false) + project.add_developer(user) project.update!(auto_devops_attributes: { enabled: false }) end - describe 'GET /:project/pipelines' do + describe 'GET /:project/-/pipelines' do let(:project) { create(:project, :repository) } let!(:pipeline) do @@ -287,23 +289,23 @@ RSpec.describe 'Pipelines', :js do end it 'has a dropdown with play button' do - expect(page).to have_selector('.dropdown-new.btn.btn-default .icon-play') + expect(page).to have_selector('[data-testid="pipelines-manual-actions-dropdown"] [data-testid="play-icon"]') end it 'has link to the manual action' do - find('.js-pipeline-dropdown-manual-actions').click + find('[data-testid="pipelines-manual-actions-dropdown"]').click expect(page).to have_button('manual build') end context 'when manual action was played' do before do - find('.js-pipeline-dropdown-manual-actions').click + find('[data-testid="pipelines-manual-actions-dropdown"]').click click_button('manual build') end it 'enqueues manual action job' do - expect(page).to have_selector('.js-pipeline-dropdown-manual-actions:disabled') + expect(page).to have_selector('[data-testid="pipelines-manual-actions-dropdown"] .gl-dropdown-toggle:disabled') end end end @@ -321,11 +323,11 @@ RSpec.describe 'Pipelines', :js do end it 'has a dropdown for actionable jobs' do - expect(page).to have_selector('.dropdown-new.btn.btn-default .icon-play') + expect(page).to have_selector('[data-testid="pipelines-manual-actions-dropdown"] [data-testid="play-icon"]') end it "has link to the delayed job's action" do - find('.js-pipeline-dropdown-manual-actions').click + find('[data-testid="pipelines-manual-actions-dropdown"]').click time_diff = [0, delayed_job.scheduled_at - Time.now].max expect(page).to have_button('delayed job 1') @@ -341,7 +343,7 @@ RSpec.describe 'Pipelines', :js do end it "shows 00:00:00 as the remaining time" do - find('.js-pipeline-dropdown-manual-actions').click + find('[data-testid="pipelines-manual-actions-dropdown"]').click expect(page).to have_content("00:00:00") end @@ -349,7 +351,7 @@ RSpec.describe 'Pipelines', :js do context 'when user played a delayed job immediately' do before do - find('.js-pipeline-dropdown-manual-actions').click + find('[data-testid="pipelines-manual-actions-dropdown"]').click page.accept_confirm { click_button('delayed job 1') } wait_for_requests end @@ -517,56 +519,75 @@ RSpec.describe 'Pipelines', :js do end end - context 'mini pipeline graph' do - let!(:build) do - create(:ci_build, :pending, pipeline: pipeline, - stage: 'build', - name: 'build') - end - - before do - visit_project_pipelines - end + shared_examples 'mini pipeline renders' do |ci_mini_pipeline_gl_dropdown_enabled| + context 'mini pipeline graph' do + let!(:build) do + create(:ci_build, :pending, pipeline: pipeline, + stage: 'build', + name: 'build') + end - it 'renders a mini pipeline graph' do - expect(page).to have_selector('[data-testid="widget-mini-pipeline-graph"]') - expect(page).to have_selector('.js-builds-dropdown-button') - end + before do + stub_feature_flags(ci_mini_pipeline_gl_dropdown: ci_mini_pipeline_gl_dropdown_enabled) + visit_project_pipelines + end - context 'when clicking a stage badge' do - it 'opens a dropdown' do - find('.js-builds-dropdown-button').click + let_it_be(:dropdown_toggle_selector) do + if ci_mini_pipeline_gl_dropdown_enabled + '[data-testid="mini-pipeline-graph-dropdown"] .dropdown-toggle' + else + '[data-testid="mini-pipeline-graph-dropdown-toggle"]' + end + end - expect(page).to have_link build.name + it 'renders a mini pipeline graph' do + expect(page).to have_selector('[data-testid="widget-mini-pipeline-graph"]') + expect(page).to have_selector(dropdown_toggle_selector) end - it 'is possible to cancel pending build' do - find('.js-builds-dropdown-button').click - find('.js-ci-action').click - wait_for_requests + context 'when clicking a stage badge' do + it 'opens a dropdown' do + find(dropdown_toggle_selector).click - expect(build.reload).to be_canceled - end - end + expect(page).to have_link build.name + end - context 'for a failed pipeline' do - let!(:build) do - create(:ci_build, :failed, pipeline: pipeline, - stage: 'build', - name: 'build') + it 'is possible to cancel pending build' do + find(dropdown_toggle_selector).click + find('.js-ci-action').click + wait_for_requests + + expect(build.reload).to be_canceled + end end - it 'displays the failure reason' do - find('.js-builds-dropdown-button').click + context 'for a failed pipeline' do + let!(:build) do + create(:ci_build, :failed, pipeline: pipeline, + stage: 'build', + name: 'build') + end + + it 'displays the failure reason' do + find(dropdown_toggle_selector).click - within('.js-builds-dropdown-list') do - build_element = page.find('.mini-pipeline-graph-dropdown-item') - expect(build_element['title']).to eq('build - failed - (unknown failure)') + within('.js-builds-dropdown-list') do + build_element = page.find('.mini-pipeline-graph-dropdown-item') + expect(build_element['title']).to eq('build - failed - (unknown failure)') + end end end end end + context 'with ci_mini_pipeline_gl_dropdown disabled' do + it_behaves_like "mini pipeline renders", false + end + + context 'with ci_mini_pipeline_gl_dropdown enabled' do + it_behaves_like "mini pipeline renders", true + end + context 'with pagination' do before do allow(Ci::Pipeline).to receive(:default_per_page).and_return(1) @@ -597,7 +618,7 @@ RSpec.describe 'Pipelines', :js do end end - describe 'GET /:project/pipelines/show' do + describe 'GET /:project/-/pipelines/show' do let(:project) { create(:project, :repository) } let(:pipeline) do @@ -649,7 +670,7 @@ RSpec.describe 'Pipelines', :js do end end - describe 'POST /:project/pipelines' do + describe 'POST /:project/-/pipelines' do let(:project) { create(:project, :repository) } before do |