BigW Consortium Gitlab

Commit 58a476c8 by Kamil Trzciński Committed by Simon Knox

Merge branch 'fix/gb/fix-build-merge-request-link-to-fork-project' into 'master'

Fix job merge request link to a forked source project Closes #35109 See merge request !12965
parent d22d058f
...@@ -16,7 +16,8 @@ class BuildDetailsEntity < JobEntity ...@@ -16,7 +16,8 @@ class BuildDetailsEntity < JobEntity
end end
expose :path do |build| expose :path do |build|
project_merge_request_path(project, build.merge_request) project_merge_request_path(build.merge_request.project,
build.merge_request)
end end
end end
......
---
title: Fix job merge request link to a forked source project
merge_request: 12965
author:
...@@ -9,47 +9,96 @@ describe BuildDetailsEntity do ...@@ -9,47 +9,96 @@ describe BuildDetailsEntity do
describe '#as_json' do describe '#as_json' do
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let!(:build) { create(:ci_build, :failed, project: project) } let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, :failed, pipeline: pipeline) }
let(:request) { double('request') } let(:request) { double('request') }
let(:entity) { described_class.new(build, request: request, current_user: user, project: project) }
let(:entity) do
described_class.new(build, request: request,
current_user: user,
project: project)
end
subject { entity.as_json } subject { entity.as_json }
before do before do
allow(request).to receive(:current_user).and_return(user) allow(request).to receive(:current_user).and_return(user)
end end
it 'contains the needed key value pairs' do
expect(subject).to include(:coverage, :erased_at, :duration)
expect(subject).to include(:runner, :pipeline)
expect(subject).to include(:raw_path, :new_issue_path)
end
context 'when the user has access to issues and merge requests' do context 'when the user has access to issues and merge requests' do
let!(:merge_request) do context 'when merge request orginates from the same project' do
create(:merge_request, source_project: project, source_branch: build.ref) let(:merge_request) do
end create(:merge_request, source_project: project, source_branch: build.ref)
end
before do before do
allow(build).to receive(:merge_request).and_return(merge_request) allow(build).to receive(:merge_request).and_return(merge_request)
end end
it 'contains the needed key value pairs' do
expect(subject).to include(:merge_request)
expect(subject).to include(:new_issue_path)
end
it 'contains the needed key value pairs' do it 'exposes correct details of the merge request' do
expect(subject).to include(:coverage, :erased_at, :duration) expect(subject[:merge_request][:iid]).to eq merge_request.iid
expect(subject).to include(:runner, :pipeline) end
expect(subject).to include(:raw_path, :merge_request)
expect(subject).to include(:new_issue_path) it 'has a correct merge request path' do
expect(subject[:merge_request][:path]).to include project.full_path
end
end end
it 'exposes details of the merge request' do context 'when merge request is from a fork' do
expect(subject[:merge_request]).to include(:iid, :path) let(:fork_project) do
create(:empty_project, forked_from_project: project)
end
let(:pipeline) { create(:ci_pipeline, project: fork_project) }
before do
allow(build).to receive(:merge_request).and_return(merge_request)
end
let(:merge_request) do
create(:merge_request, source_project: fork_project,
target_project: project,
source_branch: build.ref)
end
it 'contains the needed key value pairs' do
expect(subject).to include(:merge_request)
expect(subject).to include(:new_issue_path)
end
it 'exposes details of the merge request' do
expect(subject[:merge_request][:iid]).to eq merge_request.iid
end
it 'has a merge request path to a target project' do
expect(subject[:merge_request][:path])
.to include project.full_path
end
end end
context 'when the build has been erased' do context 'when the build has not been erased' do
let!(:build) { create(:ci_build, :erasable, project: project) } let(:build) { create(:ci_build, :erasable, project: project) }
it 'exposes the user whom erased the build' do it 'exposes a build erase path' do
expect(subject).to include(:erase_path) expect(subject).to include(:erase_path)
end end
end end
context 'when the build has been erased' do context 'when the build has been erased' do
let!(:build) { create(:ci_build, erased_at: Time.now, project: project, erased_by: user) } let(:build) { create(:ci_build, :erased, project: project) }
it 'exposes the user whom erased the build' do it 'exposes the user who erased the build' do
expect(subject).to include(:erased_by) expect(subject).to include(:erased_by)
end end
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment