Skip to content
代码片段 群组 项目
未验证 提交 c0c62d50 编辑于 作者: Patrick Bajao's avatar Patrick Bajao 提交者: GitLab
浏览文件

Merge branch 'add_merge_train_when_pipeline_succeeds_feature' into 'master'

Add merge train when pipeline succeeds feature tests

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/149954



Merged-by: default avatarPatrick Bajao <ebajao@gitlab.com>
Approved-by: default avatarPatrick Bajao <ebajao@gitlab.com>
Approved-by: default avatarJay McCure <jmccure@gitlab.com>
Reviewed-by: default avatarPatrick Bajao <ebajao@gitlab.com>
Reviewed-by: default avatarJay McCure <jmccure@gitlab.com>
Co-authored-by: default avatarMarc Shaw <mshaw@gitlab.com>
No related branches found
No related tags found
无相关合并请求
......@@ -2,7 +2,7 @@
require 'spec_helper'
RSpec.describe 'User adds a merge request to a merge train', :js, feature_category: :merge_trains do
RSpec.describe 'User adds a merge request to a merge train', :sidekiq_inline, :js, feature_category: :merge_trains do
let_it_be_with_refind(:project) { create(:project, :repository) }
let(:user) { project.owner }
......@@ -20,99 +20,190 @@
allow(Gitlab::QueryLimiting::Transaction).to receive(:threshold).and_return(200)
stub_licensed_features(merge_pipelines: true, merge_trains: true)
project.update!(merge_pipelines_enabled: true, merge_trains_enabled: true)
merge_request.all_pipelines.first.succeed!
merge_request.update_head_pipeline
stub_ci_pipeline_yaml_file(YAML.dump(ci_yaml))
sign_in(user)
end
it "shows 'Start merge train' button" do
visit project_merge_request_path(project, merge_request)
expect(page).to have_button('Merge')
expect(page).to have_content('Add to merge train')
end
context 'when merge_trains EEP license is not available' do
context 'when no active pipeline' do
before do
stub_licensed_features(merge_trains: false)
merge_request.all_pipelines.first.succeed!
merge_request.update_head_pipeline
end
it 'does not show Start merge train helper text' do
it "shows 'Merge' button with 'Add to merge train' helper text" do
visit project_merge_request_path(project, merge_request)
expect(page).not_to have_content('Start merge train')
expect(page).to have_button('Merge')
expect(page).to have_content('Add to merge train')
end
end
context "when user clicks 'Start merge train' button" do
before do
visit project_merge_request_path(project, merge_request)
click_button 'Merge'
wait_for_requests
end
context 'when merge_trains EEP license is not available' do
before do
stub_licensed_features(merge_trains: false)
end
it 'does not show Add to merge train helper text' do
visit project_merge_request_path(project, merge_request)
it 'informs merge request that auto merge is enabled' do
page.within('.mr-state-widget') do
expect(page).to have_content("Added to the merge train by #{user.name}")
expect(page).to have_content('Source branch will not be deleted.')
expect(page).to have_button('Remove from merge train')
expect(page).not_to have_content('Add to merge train')
end
end
context 'when pipeline for merge train succeeds', :sidekiq_inline do
let(:project) { create(:project, :repository) }
context "when user clicks 'Merge' button to add to merge train" do
before do
visit project_merge_request_path(project, merge_request)
merge_request.merge_train_car.pipeline.builds.map(&:success!)
click_button 'Merge'
wait_for_requests
end
it 'shows merge request is added to merge train' do
page.within('.mr-state-widget') do
expect(page).to have_content("Added to the merge train by #{user.name}")
expect(page).to have_content('Source branch will not be deleted.')
expect(page).to have_button('Remove from merge train')
end
end
it 'displays pipeline control' do
expect(page).to have_selector('[data-testid="mini-pipeline-graph-dropdown"]')
context 'when pipeline for merge train succeeds' do
let(:project) { create(:project, :repository) }
before do
visit project_merge_request_path(project, merge_request)
merge_request.merge_train_car.pipeline.builds.map(&:success!)
end
it 'displays the expected content', :js do
expect(page).to have_selector('[data-testid="mini-pipeline-graph-dropdown"]')
find_by_testid('mini-pipeline-graph-dropdown-toggle').click
page.within '.ci-job-component' do
expect(page).to have_selector('[data-testid="ci-icon"]')
expect(page).not_to have_selector('.retry')
end
expect(page).to have_content("Merged")
end
end
it 'does not allow retry for merge train pipeline', :js do
find_by_testid('mini-pipeline-graph-dropdown-toggle').click
page.within '.ci-job-component' do
expect(page).to have_selector('[data-testid="ci-icon"]')
expect(page).not_to have_selector('.retry')
context "when user clicks 'Remove from merge train' button" do
before do
click_button 'Remove from merge train'
end
it 'cancels automatic merge' do
page.within('.mr-state-widget') do
expect(page).not_to have_content("Added to the merge train by #{user.name}")
expect(page).to have_button('Merge')
expect(page).to have_content('Add to merge train')
end
end
end
end
context "when user clicks 'Remove from merge train' button" do
let(:project) { create(:project, :repository) }
context 'when the merge request is not the first queue on the train' do
before do
click_button 'Remove from merge train'
create(:merge_request, :on_train,
source_project: project, source_branch: 'signed-commits',
target_project: project, target_branch: 'master')
end
it 'cancels automatic merge' do
page.within('.mr-state-widget') do
expect(page).not_to have_content("Added to the merge train by #{user.name}")
expect(page).to have_button('Merge')
expect(page).to have_content('Add to merge train')
end
it "shows 'Merge' button and 'Add to merge train' helper text" do
visit project_merge_request_path(project, merge_request)
expect(page).to have_button('Merge')
expect(page).to have_content('Add to merge train')
end
end
end
context 'when the merge request is not the first queue on the train' do
let(:project) { create(:project, :repository) }
context 'with an active pipeline' do
before do
create(:merge_request, :on_train,
source_project: project, source_branch: 'signed-commits',
target_project: project, target_branch: 'master')
merge_request.all_pipelines.first.run!
merge_request.update_head_pipeline
end
it "shows 'Merge' button and 'Add to merge train' helper text" do
it "shows 'Merge' button with 'Add to merge train when pipeline succeeds' helper text" do
visit project_merge_request_path(project, merge_request)
expect(page).to have_button('Merge')
expect(page).to have_content('Add to merge train')
expect(page).to have_content('Add to merge train when pipeline succeeds')
end
context 'when merge_trains EEP license is not available' do
before do
stub_licensed_features(merge_trains: false)
end
it "does not show 'Add to merge train when pipeline succeeds' helper text" do
visit project_merge_request_path(project, merge_request)
expect(page).not_to have_content('Add to merge train when pipeline succeeds')
end
end
context "when user clicks 'Add to merge train when pipeline succeeds' button" do
before do
visit project_merge_request_path(project, merge_request)
click_button 'Set to auto-merge'
wait_for_requests
end
it 'shows merge request will be added to merge train when pipeline succeeds' do
page.within('.mr-state-widget') do
expect(page).to have_content("Set by #{user.name} to start a merge train when the pipeline succeeds")
expect(page).to have_content('Source branch will not be deleted.')
expect(page).to have_button('Cancel auto-merge')
end
end
context 'when pipeline succeeds' do
before do
merge_request.head_pipeline.succeed!
visit project_merge_request_path(project, merge_request)
end
it 'adds the MR to the merge train but not yet merged' do
expect(page).to have_content("Added to the merge train by #{user.name}")
expect(page).to have_content('Source branch will not be deleted.')
expect(page).to have_button('Remove from merge train')
expect(page).not_to have_content("Merged")
end
context 'when the merge train pipeline passes' do
let(:project) { create(:project, :repository) }
it 'merges the MR' do
merge_request.merge_train_car.pipeline.builds.map(&:success!)
expect(page).to have_selector('[data-testid="mini-pipeline-graph-dropdown"]')
find_by_testid('mini-pipeline-graph-dropdown-toggle').click
page.within '.ci-job-component' do
expect(page).to have_selector('[data-testid="ci-icon"]')
expect(page).not_to have_selector('.retry')
end
expect(page).to have_content("Merged")
end
end
end
context "when user clicks 'Cancel auto-merge' button" do
before do
click_button 'Cancel auto-merge'
end
it 'cancels automatic merge' do
wait_for_requests
page.within('.mr-state-widget') do
expect(page).not_to have_content("Set by #{user.name} to start a merge train when the pipeline succeeds")
expect(page).to have_button('Set to auto-merge')
end
end
end
end
end
end
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册