diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-03-02 09:10:53 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-03-02 09:10:53 +0300 |
commit | e0a63a4b4d818171c17b75ef1e6d348cb287af9f (patch) | |
tree | f6f31af898634ea51ade70e279cc33d463493039 /qa | |
parent | 8f57ac0a38b7045f241dc5ad29fcde3f6eae3a40 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'qa')
4 files changed, 107 insertions, 1 deletions
diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index 1a25c9349da..1aacbb7ffed 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -26,6 +26,10 @@ module QA element :merge_immediately_option end + view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue' do + element :merge_request_status_content + end + view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue' do element :merged_status_content end @@ -235,6 +239,12 @@ module QA click_element(:merge_immediately_option) end + def merge_when_pipeline_succeeds! + wait_until_ready_to_merge + + click_element(:merge_button, text: 'Merge when pipeline succeeds') + end + def merged? # Revisit after merge page re-architect is done https://gitlab.com/gitlab-org/gitlab/-/issues/300042 # To remove page refresh logic if possible @@ -252,6 +262,10 @@ module QA has_element?(:merge_button, disabled: false) end + def merge_request_status + find_element(:merge_request_status_content).text + end + # Waits up 60 seconds and raises an error if unable to merge def wait_until_ready_to_merge has_element?(:merge_button) diff --git a/qa/qa/resource/merge_request.rb b/qa/qa/resource/merge_request.rb index 869be06c542..fb450a61c9a 100644 --- a/qa/qa/resource/merge_request.rb +++ b/qa/qa/resource/merge_request.rb @@ -140,6 +140,14 @@ module QA end end + def reload! + # Refabricate so that we can return a new object with updated attributes + self.class.fabricate_via_api! do |resource| + resource.project = project + resource.id = api_resource[:iid] + end + end + private def transform_api_resource(api_resource) diff --git a/qa/qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb b/qa/qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb index a240f72944f..c90f8546f91 100644 --- a/qa/qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb +++ b/qa/qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb @@ -3,7 +3,7 @@ module QA RSpec.describe 'Create' do context 'Gitaly' do - describe 'Backend node recovery', :orchestrated, :gitaly_cluster, :skip_live_env do + describe 'Backend node recovery', :orchestrated, :gitaly_cluster, :skip_live_env, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/322647', type: :flaky } do let(:praefect_manager) { Service::PraefectManager.new } let(:project) do Resource::Project.fabricate! do |project| 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 new file mode 100644 index 00000000000..2ddc59acd5c --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Create', :runner do + describe 'Merge requests' do + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'merge-when-pipeline-succeeds' + project.initialize_with_readme = true + end + end + + let!(:runner) do + Resource::Runner.fabricate! do |runner| + runner.project = project + runner.name = "runner-for-#{project.name}" + runner.tags = ["runner-for-#{project.name}"] + end + end + + before do + Resource::Repository::Commit.fabricate_via_api! do |commit| + commit.project = project + commit.commit_message = 'Add .gitlab-ci.yml' + commit.add_files( + [ + { + file_path: '.gitlab-ci.yml', + content: <<~EOF + test: + tags: ["runner-for-#{project.name}"] + script: sleep 5 + only: + - merge_requests + EOF + } + ] + ) + end + + Flow::Login.sign_in + end + + after do + runner&.remove_via_api! + project&.remove_via_api! + end + + it 'merges when pipeline succeeds', :smoke, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1684' do + branch_name = "merge-request-test-#{SecureRandom.hex(8)}" + + # Create a branch that will be merged into the default branch + Resource::Repository::ProjectPush.fabricate! do |project_push| + project_push.project = project + project_push.new_branch = true + project_push.branch_name = branch_name + project_push.file_name = "file-#{SecureRandom.hex(8)}.txt" + end + + # Create a merge request to merge the branch we just created + merge_request = Resource::MergeRequest.fabricate_via_api! do |merge_request| + merge_request.project = project + merge_request.source_branch = branch_name + merge_request.no_preparation = true + end + + merge_request.visit! + + Page::MergeRequest::Show.perform do |mr| + mr.merge_when_pipeline_succeeds! + + expect(mr.merge_request_status).to match(/to be merged automatically when the pipeline succeeds/) + + Support::Waiter.wait_until(sleep_interval: 5) do + merge_request = merge_request.reload! + merge_request.state == 'merged' + end + + expect(mr.merged?).to be_truthy, "Expected content 'The changes were merged' but it did not appear." + end + end + end + end +end |