Fix ref_text of merge request pipelines

Source branch can be removed after the merge and
we have to make sure to avoid rendering links if it's the case.
This commit is contained in:
Shinya Maeda 2019-04-29 14:29:54 +07:00
parent f109d24ddc
commit 96b28d8387
5 changed files with 104 additions and 16 deletions

View File

@ -63,19 +63,11 @@ module Ci
end
def link_to_merge_request_source_branch
return unless merge_request_presenter
link_to(merge_request_presenter.source_branch,
merge_request_presenter.source_branch_commits_path,
class: 'ref-name')
merge_request_presenter&.source_branch_link
end
def link_to_merge_request_target_branch
return unless merge_request_presenter
link_to(merge_request_presenter.target_branch,
merge_request_presenter.target_branch_commits_path,
class: 'ref-name')
merge_request_presenter&.target_branch_link
end
private

View File

@ -216,6 +216,22 @@ class MergeRequestPresenter < Gitlab::View::Presenter::Delegated
help_page_path('ci/merge_request_pipelines/index.md')
end
def source_branch_link
if source_branch_exists?
link_to(source_branch, source_branch_commits_path, class: 'ref-name')
else
content_tag(:span, source_branch, class: 'ref-name')
end
end
def target_branch_link
if target_branch_exists?
link_to(target_branch, target_branch_commits_path, class: 'ref-name')
else
content_tag(:span, target_branch, class: 'ref-name')
end
end
private
def cached_can_be_reverted?

View File

@ -0,0 +1,6 @@
---
title: Fix pipelines for merge requests does not show pipeline page when source branch
is removed
merge_request: 27803
author:
type: fixed

View File

@ -331,11 +331,9 @@ describe 'Pipeline', :js do
merge_request.all_pipelines.last
end
before do
visit_pipeline
end
it 'shows the pipeline information' do
visit_pipeline
within '.pipeline-info' do
expect(page).to have_content("#{pipeline.statuses.count} jobs " \
"for !#{merge_request.iid} " \
@ -347,6 +345,21 @@ describe 'Pipeline', :js do
end
end
context 'when source branch does not exist' do
before do
project.repository.rm_branch(user, merge_request.source_branch)
end
it 'does not link to the source branch commit path' do
visit_pipeline
within '.pipeline-info' do
expect(page).not_to have_link(merge_request.source_branch)
expect(page).to have_content(merge_request.source_branch)
end
end
end
context 'when source project is a forked project' do
let(:source_project) { fork_project(project, user, repository: true) }
@ -386,11 +399,11 @@ describe 'Pipeline', :js do
before do
pipeline.update(user: user)
visit_pipeline
end
it 'shows the pipeline information' do
visit_pipeline
within '.pipeline-info' do
expect(page).to have_content("#{pipeline.statuses.count} jobs " \
"for !#{merge_request.iid} " \
@ -405,6 +418,21 @@ describe 'Pipeline', :js do
end
end
context 'when target branch does not exist' do
before do
project.repository.rm_branch(user, merge_request.target_branch)
end
it 'does not link to the target branch commit path' do
visit_pipeline
within '.pipeline-info' do
expect(page).not_to have_link(merge_request.target_branch)
expect(page).to have_content(merge_request.target_branch)
end
end
end
context 'when source project is a forked project' do
let(:source_project) { fork_project(project, user, repository: true) }

View File

@ -439,6 +439,52 @@ describe MergeRequestPresenter do
end
end
describe '#source_branch_link' do
subject { presenter.source_branch_link }
let(:presenter) { described_class.new(resource, current_user: user) }
context 'when source branch exists' do
it 'returns link' do
allow(resource).to receive(:source_branch_exists?) { true }
is_expected
.to eq("<a class=\"ref-name\" href=\"#{presenter.source_branch_commits_path}\">#{presenter.source_branch}</a>")
end
end
context 'when source branch does not exist' do
it 'returns text' do
allow(resource).to receive(:source_branch_exists?) { false }
is_expected.to eq("<span class=\"ref-name\">#{presenter.source_branch}</span>")
end
end
end
describe '#target_branch_link' do
subject { presenter.target_branch_link }
let(:presenter) { described_class.new(resource, current_user: user) }
context 'when target branch exists' do
it 'returns link' do
allow(resource).to receive(:target_branch_exists?) { true }
is_expected
.to eq("<a class=\"ref-name\" href=\"#{presenter.target_branch_commits_path}\">#{presenter.target_branch}</a>")
end
end
context 'when target branch does not exist' do
it 'returns text' do
allow(resource).to receive(:target_branch_exists?) { false }
is_expected.to eq("<span class=\"ref-name\">#{presenter.target_branch}</span>")
end
end
end
describe '#source_branch_with_namespace_link' do
subject do
described_class.new(resource, current_user: user).source_branch_with_namespace_link