1# frozen_string_literal: true 2 3module QA 4 RSpec.describe 'Create', :requires_admin, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/261793', type: :investigating } do 5 describe 'View merge request merge-ref diff' do 6 let(:project) do 7 Resource::Project.fabricate_via_api! do |project| 8 project.name = 'merge-ref-diff' 9 end 10 end 11 12 let(:merge_request) do 13 Resource::MergeRequest.fabricate_via_api! do |merge_request| 14 merge_request.project = project 15 merge_request.title = 'This is a merge request' 16 merge_request.description = '... for viewing merge-ref and merge-base diffs' 17 merge_request.file_content = 'This exists on the source branch only' 18 end 19 end 20 21 let(:new_file_name) { "added_file-#{SecureRandom.hex(8)}.txt" } 22 23 context 'when the feature flag default_merge_ref_for_diffs is enabled' do 24 before do 25 Runtime::Feature.enable('default_merge_ref_for_diffs', project: project) 26 27 commit_to_branch(merge_request.target_branch, new_file_name) 28 commit_to_branch(merge_request.source_branch, new_file_name) 29 30 Flow::Login.sign_in 31 32 merge_request.visit! 33 end 34 35 it 'views the merge-ref diff by default', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347651' do 36 Page::MergeRequest::Show.perform do |mr_page| 37 mr_page.click_diffs_tab 38 mr_page.click_target_version_dropdown 39 40 expect(mr_page.version_dropdown_content).to include("#{project.default_branch} (HEAD)") 41 expect(mr_page.version_dropdown_content).not_to include("#{project.default_branch} (base)") 42 expect(mr_page).to have_file(merge_request.file_name) 43 expect(mr_page).not_to have_file(new_file_name) 44 end 45 end 46 end 47 48 context 'when the feature flag default_merge_ref_for_diffs is disabled' do 49 before do 50 Runtime::Feature.disable('default_merge_ref_for_diffs', project: project) 51 52 commit_to_branch(merge_request.target_branch, new_file_name) 53 commit_to_branch(merge_request.source_branch, new_file_name) 54 55 Flow::Login.sign_in 56 57 merge_request.visit! 58 end 59 60 it 'views the merge-base diff by default', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347650' do 61 Page::MergeRequest::Show.perform do |mr_page| 62 mr_page.click_diffs_tab 63 mr_page.click_target_version_dropdown 64 65 expect(mr_page.version_dropdown_content).to include("#{project.default_branch} (HEAD)") 66 expect(mr_page.version_dropdown_content).to include("#{project.default_branch} (base)") 67 expect(mr_page).to have_file(merge_request.file_name) 68 expect(mr_page).to have_file(new_file_name) 69 end 70 end 71 end 72 73 def commit_to_branch(branch, file) 74 Resource::Repository::Commit.fabricate_via_api! do |commit| 75 commit.project = merge_request.project 76 commit.branch = branch 77 commit.commit_message = "Add new file on #{branch}" 78 commit.add_files( 79 [ 80 { 81 file_path: file, 82 content: "This exists on source and target branches" 83 } 84 ] 85 ) 86 end 87 end 88 end 89 end 90end 91