Commit a62a2e24 authored by Kamil Trzciński's avatar Kamil Trzciński

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
parents ba820e87 eaa935d7
...@@ -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,17 +9,31 @@ describe BuildDetailsEntity do ...@@ -9,17 +9,31 @@ 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
let(:merge_request) do
create(:merge_request, source_project: project, source_branch: build.ref) create(:merge_request, source_project: project, source_branch: build.ref)
end end
...@@ -28,28 +42,63 @@ describe BuildDetailsEntity do ...@@ -28,28 +42,63 @@ describe BuildDetailsEntity do
end end
it 'contains the needed key value pairs' do it 'contains the needed key value pairs' do
expect(subject).to include(:coverage, :erased_at, :duration) expect(subject).to include(:merge_request)
expect(subject).to include(:runner, :pipeline) expect(subject).to include(:new_issue_path)
expect(subject).to include(:raw_path, :merge_request) end
it 'exposes correct details of the merge request' do
expect(subject[:merge_request][:iid]).to eq merge_request.iid
end
it 'has a correct merge request path' do
expect(subject[:merge_request][:path]).to include project.full_path
end
end
context 'when merge request is from a fork' do
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) expect(subject).to include(:new_issue_path)
end end
it 'exposes details of the merge request' do it 'exposes details of the merge request' do
expect(subject[:merge_request]).to include(:iid, :path) expect(subject[:merge_request][:iid]).to eq merge_request.iid
end end
context 'when the build has been erased' do it 'has a merge request path to a target project' do
let!(:build) { create(:ci_build, :erasable, project: project) } expect(subject[:merge_request][:path])
.to include project.full_path
end
end
context 'when the build has not been erased' do
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