From 85dc423f7090da0a52c73eb66faf22ddb20efff9 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Sat, 19 Sep 2020 01:45:44 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-4-stable-ee --- spec/models/merge_request_spec.rb | 382 ++++++++++++++++++++++++++++++-------- 1 file changed, 301 insertions(+), 81 deletions(-) (limited to 'spec/models/merge_request_spec.rb') diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 6edef54b153..98f709a0610 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -2,13 +2,16 @@ require 'spec_helper' -RSpec.describe MergeRequest do +RSpec.describe MergeRequest, factory_default: :keep do include RepoHelpers include ProjectForksHelper include ReactiveCachingHelpers using RSpec::Parameterized::TableSyntax + let_it_be(:namespace) { create_default(:namespace) } + let_it_be(:project, refind: true) { create_default(:project, :repository) } + subject { create(:merge_request) } describe 'associations' do @@ -18,6 +21,7 @@ RSpec.describe MergeRequest do it { is_expected.to belong_to(:source_project).class_name('Project') } it { is_expected.to belong_to(:merge_user).class_name("User") } it { is_expected.to have_many(:assignees).through(:merge_request_assignees) } + it { is_expected.to have_many(:reviewers).through(:merge_request_reviewers) } it { is_expected.to have_many(:merge_request_diffs) } it { is_expected.to have_many(:user_mentions).class_name("MergeRequestUserMention") } it { is_expected.to belong_to(:milestone) } @@ -57,6 +61,24 @@ RSpec.describe MergeRequest do end end + describe '.order_merged_at_asc' do + let_it_be(:older_mr) { create(:merge_request, :with_merged_metrics) } + let_it_be(:newer_mr) { create(:merge_request, :with_merged_metrics) } + + it 'returns MRs ordered by merged_at ascending' do + expect(described_class.order_merged_at_asc).to eq([older_mr, newer_mr]) + end + end + + describe '.order_merged_at_desc' do + let_it_be(:older_mr) { create(:merge_request, :with_merged_metrics) } + let_it_be(:newer_mr) { create(:merge_request, :with_merged_metrics) } + + it 'returns MRs ordered by merged_at descending' do + expect(described_class.order_merged_at_desc).to eq([newer_mr, older_mr]) + end + end + describe '#squash_in_progress?' do let(:repo_path) do Gitlab::GitalyClient::StorageSettings.allow_disk_access do @@ -282,18 +304,6 @@ RSpec.describe MergeRequest do expect(merge_request.target_project_id).to eq(project.id) expect(merge_request.target_project_id).to eq(merge_request.metrics.target_project_id) end - - context 'when metrics record already exists with NULL target_project_id' do - before do - merge_request.metrics.update_column(:target_project_id, nil) - end - - it 'returns the metrics record' do - metrics_record = merge_request.ensure_metrics - - expect(metrics_record).to be_persisted - end - end end end @@ -359,7 +369,7 @@ RSpec.describe MergeRequest do it 'returns merge requests that match the given merge commit' do note = create(:track_mr_picking_note, commit_id: '456abc') - create(:track_mr_picking_note, commit_id: '456def') + create(:track_mr_picking_note, project: create(:project), commit_id: '456def') expect(described_class.by_cherry_pick_sha('456abc')).to eq([note.noteable]) end @@ -427,6 +437,23 @@ RSpec.describe MergeRequest do end end + describe '.sort_by_attribute' do + context 'merged_at' do + let_it_be(:older_mr) { create(:merge_request, :with_merged_metrics) } + let_it_be(:newer_mr) { create(:merge_request, :with_merged_metrics) } + + it 'sorts asc' do + merge_requests = described_class.sort_by_attribute(:merged_at_asc) + expect(merge_requests).to eq([older_mr, newer_mr]) + end + + it 'sorts desc' do + merge_requests = described_class.sort_by_attribute(:merged_at_desc) + expect(merge_requests).to eq([newer_mr, older_mr]) + end + end + end + describe '#target_branch_sha' do let(:project) { create(:project, :repository) } @@ -831,7 +858,7 @@ RSpec.describe MergeRequest do end context 'with commit diff note' do - let(:other_merge_request) { create(:merge_request) } + let(:other_merge_request) { create(:merge_request, source_project: create(:project, :repository)) } let!(:diff_note) do create(:diff_note_on_commit, project: merge_request.project) @@ -854,8 +881,10 @@ RSpec.describe MergeRequest do end describe '#diff_size' do + let_it_be(:project) { create(:project, :repository) } + let(:merge_request) do - build(:merge_request, source_branch: 'expand-collapse-files', target_branch: 'master') + build(:merge_request, source_project: project, source_branch: 'expand-collapse-files', target_branch: 'master') end context 'when there are MR diffs' do @@ -1030,6 +1059,8 @@ RSpec.describe MergeRequest do end describe '#closes_issues' do + let(:project) { create(:project) } + let(:issue0) { create :issue, project: subject.project } let(:issue1) { create :issue, project: subject.project } @@ -1037,6 +1068,8 @@ RSpec.describe MergeRequest do let(:commit1) { double('commit1', safe_message: "Fixes #{issue0.to_reference}") } let(:commit2) { double('commit2', safe_message: "Fixes #{issue1.to_reference}") } + subject { create(:merge_request, source_project: project) } + before do subject.project.add_developer(subject.author) allow(subject).to receive(:commits).and_return([commit0, commit1, commit2]) @@ -1087,6 +1120,8 @@ RSpec.describe MergeRequest do end context 'when the project has an external issue tracker' do + subject { create(:merge_request, source_project: create(:project, :repository)) } + before do subject.project.add_developer(subject.author) commit = double(:commit, safe_message: 'Fixes TEST-3') @@ -1253,14 +1288,13 @@ RSpec.describe MergeRequest do end describe "#source_branch_exists?" do - let(:merge_request) { subject } + let(:project) { create(:project, :repository) } + let(:merge_request) { create(:merge_request, source_project: project) } let(:repository) { merge_request.source_project.repository } context 'when the source project is set' do - it 'memoizes the value and returns the result' do - expect(repository).to receive(:branch_exists?).once.with(merge_request.source_branch).and_return(true) - - 2.times { expect(merge_request.source_branch_exists?).to eq(true) } + it 'returns true when the branch exists' do + expect(merge_request.source_branch_exists?).to eq(true) end end @@ -1480,7 +1514,9 @@ RSpec.describe MergeRequest do end context 'new merge request' do - subject { build(:merge_request) } + let_it_be(:project) { create(:project, :repository) } + + subject { build(:merge_request, source_project: project) } context 'compare commits' do before do @@ -1575,11 +1611,36 @@ RSpec.describe MergeRequest do before do subject.mark_as_merged! - subject.update_attribute(:merge_commit_sha, pipeline.sha) end - it 'returns the post-merge pipeline' do - expect(subject.merge_pipeline).to eq(pipeline) + context 'and there is a merge commit' do + before do + subject.update_attribute(:merge_commit_sha, pipeline.sha) + end + + it 'returns the pipeline associated with that merge request' do + expect(subject.merge_pipeline).to eq(pipeline) + end + end + + context 'and there is no merge commit, but there is a diff head' do + before do + allow(subject).to receive(:diff_head_sha).and_return(pipeline.sha) + end + + it 'returns the pipeline associated with that merge request' do + expect(subject.merge_pipeline).to eq(pipeline) + end + end + + context 'and there is no merge commit, but there is a squash commit' do + before do + subject.update_attribute(:squash_commit_sha, pipeline.sha) + end + + it 'returns the pipeline associated with that merge request' do + expect(subject.merge_pipeline).to eq(pipeline) + end end end end @@ -1706,16 +1767,14 @@ RSpec.describe MergeRequest do describe '#has_test_reports?' do subject { merge_request.has_test_reports? } - let(:project) { create(:project, :repository) } - context 'when head pipeline has test reports' do - let(:merge_request) { create(:merge_request, :with_test_reports, source_project: project) } + let(:merge_request) { create(:merge_request, :with_test_reports) } it { is_expected.to be_truthy } end context 'when head pipeline does not have test reports' do - let(:merge_request) { create(:merge_request, source_project: project) } + let(:merge_request) { create(:merge_request) } it { is_expected.to be_falsey } end @@ -1724,16 +1783,14 @@ RSpec.describe MergeRequest do describe '#has_accessibility_reports?' do subject { merge_request.has_accessibility_reports? } - let(:project) { create(:project, :repository) } - context 'when head pipeline has an accessibility reports' do - let(:merge_request) { create(:merge_request, :with_accessibility_reports, source_project: project) } + let(:merge_request) { create(:merge_request, :with_accessibility_reports) } it { is_expected.to be_truthy } end context 'when head pipeline does not have accessibility reports' do - let(:merge_request) { create(:merge_request, source_project: project) } + let(:merge_request) { create(:merge_request) } it { is_expected.to be_falsey } end @@ -1742,27 +1799,23 @@ RSpec.describe MergeRequest do describe '#has_coverage_reports?' do subject { merge_request.has_coverage_reports? } - let(:project) { create(:project, :repository) } - context 'when head pipeline has coverage reports' do - let(:merge_request) { create(:merge_request, :with_coverage_reports, source_project: project) } + let(:merge_request) { create(:merge_request, :with_coverage_reports) } it { is_expected.to be_truthy } end context 'when head pipeline does not have coverage reports' do - let(:merge_request) { create(:merge_request, source_project: project) } + let(:merge_request) { create(:merge_request) } it { is_expected.to be_falsey } end end describe '#has_terraform_reports?' do - let_it_be(:project) { create(:project, :repository) } - context 'when head pipeline has terraform reports' do it 'returns true' do - merge_request = create(:merge_request, :with_terraform_reports, source_project: project) + merge_request = create(:merge_request, :with_terraform_reports) expect(merge_request.has_terraform_reports?).to be_truthy end @@ -1770,7 +1823,7 @@ RSpec.describe MergeRequest do context 'when head pipeline does not have terraform reports' do it 'returns false' do - merge_request = create(:merge_request, source_project: project) + merge_request = create(:merge_request) expect(merge_request.has_terraform_reports?).to be_falsey end @@ -1778,8 +1831,7 @@ RSpec.describe MergeRequest do end describe '#calculate_reactive_cache' do - let(:project) { create(:project, :repository) } - let(:merge_request) { create(:merge_request, source_project: project) } + let(:merge_request) { create(:merge_request) } subject { merge_request.calculate_reactive_cache(service_class_name) } @@ -1867,12 +1919,6 @@ RSpec.describe MergeRequest do subject { merge_request.find_coverage_reports } context 'when head pipeline has coverage reports' do - let!(:job) do - create(:ci_build, options: { artifacts: { reports: { cobertura: ['cobertura-coverage.xml'] } } }, pipeline: pipeline) - end - - let!(:artifacts_metadata) { create(:ci_job_artifact, :metadata, job: job) } - context 'when reactive cache worker is parsing results asynchronously' do it 'returns status' do expect(subject[:status]).to eq(:parsing) @@ -2074,11 +2120,13 @@ RSpec.describe MergeRequest do end context 'when merge request is not persisted' do + let_it_be(:project) { create(:project, :repository) } + context 'when compare commits are set in the service' do let(:commit) { spy('commit') } subject do - build(:merge_request, compare_commits: [commit, commit]) + build(:merge_request, source_project: project, compare_commits: [commit, commit]) end it 'returns commits from compare commits temporary data' do @@ -2087,7 +2135,7 @@ RSpec.describe MergeRequest do end context 'when compare commits are not set in the service' do - subject { build(:merge_request) } + subject { build(:merge_request, source_project: project) } it 'returns array with diff head sha element only' do expect(subject.all_commit_shas).to eq [subject.diff_head_sha] @@ -2112,7 +2160,63 @@ RSpec.describe MergeRequest do end end + describe '#merged_commit_sha' do + it 'returns nil when not merged' do + expect(subject.merged_commit_sha).to be_nil + end + + context 'when the MR is merged' do + let(:sha) { 'f7ce827c314c9340b075657fd61c789fb01cf74d' } + + before do + subject.mark_as_merged! + end + + it 'returns merge_commit_sha when there is a merge_commit_sha' do + subject.update_attribute(:merge_commit_sha, sha) + + expect(subject.merged_commit_sha).to eq(sha) + end + + it 'returns squash_commit_sha when there is a squash_commit_sha' do + subject.update_attribute(:squash_commit_sha, sha) + + expect(subject.merged_commit_sha).to eq(sha) + end + + it 'returns diff_head_sha when there are no merge_commit_sha and squash_commit_sha' do + allow(subject).to receive(:diff_head_sha).and_return(sha) + + expect(subject.merged_commit_sha).to eq(sha) + end + end + end + + describe '#short_merged_commit_sha' do + context 'when merged_commit_sha is nil' do + before do + allow(subject).to receive(:merged_commit_sha).and_return(nil) + end + + it 'returns nil' do + expect(subject.short_merged_commit_sha).to be_nil + end + end + + context 'when merged_commit_sha is present' do + before do + allow(subject).to receive(:merged_commit_sha).and_return('f7ce827c314c9340b075657fd61c789fb01cf74d') + end + + it 'returns shortened merged_commit_sha' do + expect(subject.short_merged_commit_sha).to eq('f7ce827c') + end + end + end + describe '#can_be_reverted?' do + subject { create(:merge_request, source_project: create(:project, :repository)) } + context 'when there is no merge_commit for the MR' do before do subject.metrics.update!(merged_at: Time.current.utc) @@ -2301,8 +2405,6 @@ RSpec.describe MergeRequest do end describe '#participants' do - let(:project) { create(:project, :public) } - let(:mr) do create(:merge_request, source_project: project, target_project: project) end @@ -2410,9 +2512,7 @@ RSpec.describe MergeRequest do end describe '#mergeable?' do - let(:project) { create(:project) } - - subject { create(:merge_request, source_project: project) } + subject { build_stubbed(:merge_request) } it 'returns false if #mergeable_state? is false' do expect(subject).to receive(:mergeable_state?) { false } @@ -2427,6 +2527,57 @@ RSpec.describe MergeRequest do expect(subject.mergeable?).to be_truthy end + + context 'with skip_ci_check option' do + using RSpec::Parameterized::TableSyntax + + before do + allow(subject).to receive_messages(check_mergeability: nil, + can_be_merged?: true, + broken?: false) + end + + where(:mergeable_ci_state, :skip_ci_check, :expected_mergeable) do + false | false | false + false | true | true + true | false | true + true | true | true + end + + with_them do + it 'overrides mergeable_ci_state?' do + allow(subject).to receive(:mergeable_ci_state?) { mergeable_ci_state } + + expect(subject.mergeable?(skip_ci_check: skip_ci_check)).to eq(expected_mergeable) + end + end + end + + context 'with skip_discussions_check option' do + using RSpec::Parameterized::TableSyntax + + before do + allow(subject).to receive_messages(mergeable_ci_state?: true, + check_mergeability: nil, + can_be_merged?: true, + broken?: false) + end + + where(:mergeable_discussions_state, :skip_discussions_check, :expected_mergeable) do + false | false | false + false | true | true + true | false | true + true | true | true + end + + with_them do + it 'overrides mergeable_discussions_state?' do + allow(subject).to receive(:mergeable_discussions_state?) { mergeable_discussions_state } + + expect(subject.mergeable?(skip_discussions_check: skip_discussions_check)).to eq(expected_mergeable) + end + end + end end describe '#check_mergeability' do @@ -2482,9 +2633,7 @@ RSpec.describe MergeRequest do end describe '#mergeable_state?' do - let(:project) { create(:project, :repository) } - - subject { create(:merge_request, source_project: project) } + subject { create(:merge_request) } it 'checks if merge request can be merged' do allow(subject).to receive(:mergeable_ci_state?) { true } @@ -2532,6 +2681,10 @@ RSpec.describe MergeRequest do it 'returns false' do expect(subject.mergeable_state?).to be_falsey end + + it 'returns true when skipping ci check' do + expect(subject.mergeable_state?(skip_ci_check: true)).to be(true) + end end context 'when #mergeable_discussions_state? is false' do @@ -2599,9 +2752,9 @@ RSpec.describe MergeRequest do let(:pipeline) { create(:ci_empty_pipeline) } context 'when it is only allowed to merge when build is green' do - let(:project) { create(:project, only_allow_merge_if_pipeline_succeeds: true) } + let_it_be(:project) { create(:project, :repository, only_allow_merge_if_pipeline_succeeds: true) } - subject { build(:merge_request, target_project: project) } + subject { build(:merge_request, source_project: project) } context 'and a failed pipeline is associated' do before do @@ -2640,9 +2793,9 @@ RSpec.describe MergeRequest do end context 'when it is only allowed to merge when build is green or skipped' do - let(:project) { create(:project, only_allow_merge_if_pipeline_succeeds: true, allow_merge_on_skipped_pipeline: true) } + let_it_be(:project) { create(:project, :repository, only_allow_merge_if_pipeline_succeeds: true, allow_merge_on_skipped_pipeline: true) } - subject { build(:merge_request, target_project: project) } + subject { build(:merge_request, source_project: project) } context 'and a failed pipeline is associated' do before do @@ -2681,9 +2834,9 @@ RSpec.describe MergeRequest do end context 'when merges are not restricted to green builds' do - let(:project) { create(:project, only_allow_merge_if_pipeline_succeeds: false) } + let_it_be(:project) { create(:project, :repository, only_allow_merge_if_pipeline_succeeds: false) } - subject { build(:merge_request, target_project: project) } + subject { build(:merge_request, source_project: project) } context 'and a failed pipeline is associated' do before do @@ -2725,7 +2878,7 @@ RSpec.describe MergeRequest do let(:merge_request) { create(:merge_request_with_diff_notes, source_project: project) } context 'when project.only_allow_merge_if_all_discussions_are_resolved == true' do - let(:project) { create(:project, :repository, only_allow_merge_if_all_discussions_are_resolved: true) } + let_it_be(:project) { create(:project, :repository, only_allow_merge_if_all_discussions_are_resolved: true) } context 'with all discussions resolved' do before do @@ -2974,6 +3127,10 @@ RSpec.describe MergeRequest do end describe '#branch_merge_base_commit' do + let(:project) { create(:project, :repository) } + + subject { create(:merge_request, :with_diffs, source_project: project) } + context 'source and target branch exist' do it { expect(subject.branch_merge_base_commit.sha).to eq('ae73cb07c9eeaf35924a10f713b364d32b2dd34f') } it { expect(subject.branch_merge_base_commit).to be_a(Commit) } @@ -2993,7 +3150,9 @@ RSpec.describe MergeRequest do describe "#diff_refs" do context "with diffs" do - subject { create(:merge_request, :with_diffs) } + let(:project) { create(:project, :repository) } + + subject { create(:merge_request, :with_diffs, source_project: project) } let(:expected_diff_refs) do Gitlab::Diff::DiffRefs.new( @@ -3195,7 +3354,8 @@ RSpec.describe MergeRequest do pipeline end - let(:project) { create(:project, :public, :repository, only_allow_merge_if_pipeline_succeeds: true) } + let_it_be(:project) { create(:project, :public, :repository, only_allow_merge_if_pipeline_succeeds: true) } + let(:developer) { create(:user) } let(:user) { create(:user) } let(:merge_request) { create(:merge_request, source_project: project) } @@ -3289,8 +3449,7 @@ RSpec.describe MergeRequest do end describe '#pipeline_coverage_delta' do - let!(:project) { create(:project, :repository) } - let!(:merge_request) { create(:merge_request, source_project: project) } + let!(:merge_request) { create(:merge_request) } let!(:source_pipeline) do create(:ci_pipeline, @@ -3396,7 +3555,9 @@ RSpec.describe MergeRequest do end describe '#merge_request_diff_for' do - subject { create(:merge_request, importing: true) } + let(:project) { create(:project, :repository) } + + subject { create(:merge_request, importing: true, source_project: project) } let!(:merge_request_diff1) { subject.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') } let!(:merge_request_diff2) { subject.merge_request_diffs.create(head_commit_sha: nil) } @@ -3427,9 +3588,10 @@ RSpec.describe MergeRequest do end describe '#version_params_for' do - subject { create(:merge_request, importing: true) } + let(:project) { create(:project, :repository) } + + subject { create(:merge_request, importing: true, source_project: project) } - let(:project) { subject.project } let!(:merge_request_diff1) { subject.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') } let!(:merge_request_diff2) { subject.merge_request_diffs.create(head_commit_sha: nil) } let!(:merge_request_diff3) { subject.merge_request_diffs.create(head_commit_sha: '5937ac0a7beb003549fc5fd26fc247adbce4a52e') } @@ -3460,6 +3622,10 @@ RSpec.describe MergeRequest do end describe '#fetch_ref!' do + let(:project) { create(:project, :repository) } + + subject { create(:merge_request, :with_diffs, source_project: project) } + it 'fetches the ref correctly' do expect { subject.target_project.repository.delete_refs(subject.ref_path) }.not_to raise_error @@ -3482,8 +3648,10 @@ RSpec.describe MergeRequest do end context 'state machine transitions' do + let(:project) { create(:project, :repository) } + describe '#unlock_mr' do - subject { create(:merge_request, state: 'locked', merge_jid: 123) } + subject { create(:merge_request, state: 'locked', source_project: project, merge_jid: 123) } it 'updates merge request head pipeline and sets merge_jid to nil', :sidekiq_might_not_need_inline do pipeline = create(:ci_empty_pipeline, project: subject.project, ref: subject.source_branch, sha: subject.source_branch_sha) @@ -3500,7 +3668,7 @@ RSpec.describe MergeRequest do let(:notification_service) { double(:notification_service) } let(:todo_service) { double(:todo_service) } - subject { create(:merge_request, state, merge_status: :unchecked) } + subject { create(:merge_request, state, source_project: project, merge_status: :unchecked) } before do allow(NotificationService).to receive(:new).and_return(notification_service) @@ -3589,7 +3757,7 @@ RSpec.describe MergeRequest do end context 'source branch is missing' do - subject { create(:merge_request, :invalid, :opened, merge_status: :unchecked, target_branch: 'master') } + subject { create(:merge_request, :invalid, :opened, source_project: project, merge_status: :unchecked, target_branch: 'master') } before do allow(subject.project.repository).to receive(:can_be_merged?).and_call_original @@ -3622,10 +3790,8 @@ RSpec.describe MergeRequest do end describe '#should_be_rebased?' do - let(:project) { create(:project, :repository) } - it 'returns false for the same source and target branches' do - merge_request = create(:merge_request, source_project: project, target_project: project) + merge_request = build_stubbed(:merge_request, source_project: project, target_project: project) expect(merge_request.should_be_rebased?).to be_falsey end @@ -3640,7 +3806,7 @@ RSpec.describe MergeRequest do end with_them do - let(:merge_request) { create(:merge_request) } + let(:merge_request) { build_stubbed(:merge_request) } subject { merge_request.rebase_in_progress? } @@ -3863,7 +4029,7 @@ RSpec.describe MergeRequest do describe '#cleanup_refs' do subject { merge_request.cleanup_refs(only: only) } - let(:merge_request) { build(:merge_request) } + let(:merge_request) { build(:merge_request, source_project: create(:project, :repository)) } context 'when removing all refs' do let(:only) { :all } @@ -4084,4 +4250,58 @@ RSpec.describe MergeRequest do expect(context[:label_url_method]).to eq(:project_merge_requests_url) end end + + describe '#head_pipeline_builds_with_coverage' do + it 'delegates to head_pipeline' do + expect(subject) + .to delegate_method(:builds_with_coverage) + .to(:head_pipeline) + .with_prefix + .with_arguments(allow_nil: true) + end + end + + describe '#allows_reviewers?' do + it 'returns false without merge_request_reviewers feature' do + stub_feature_flags(merge_request_reviewers: false) + + merge_request = build_stubbed(:merge_request) + + expect(merge_request.allows_reviewers?).to be(false) + end + + it 'returns true with merge_request_reviewers feature' do + stub_feature_flags(merge_request_reviewers: true) + + merge_request = build_stubbed(:merge_request) + + expect(merge_request.allows_reviewers?).to be(true) + end + end + + describe '#merge_ref_head' do + let(:merge_request) { create(:merge_request) } + + context 'when merge_ref_sha is not present' do + let!(:result) do + MergeRequests::MergeToRefService + .new(merge_request.project, merge_request.author) + .execute(merge_request) + end + + it 'returns the commit based on merge ref path' do + expect(merge_request.merge_ref_head.id).to eq(result[:commit_id]) + end + end + + context 'when merge_ref_sha is present' do + before do + merge_request.update!(merge_ref_sha: merge_request.project.repository.commit.id) + end + + it 'returns the commit based on cached merge_ref_sha' do + expect(merge_request.merge_ref_head.id).to eq(merge_request.merge_ref_sha) + end + end + end end -- cgit v1.2.1