Commit 259b93dd authored by Furkan Ayhan's avatar Furkan Ayhan

Implement showing CI bridge error messages

When a bridge job fails to create downstream pipeline,
we only show if it is failed or not.

With this, we will start showing failure reasons.
parent 6c39d8d1
---
title: Implement showing CI bridge error messages
merge_request: 29123
author:
type: other
......@@ -5,6 +5,10 @@ module Gitlab
module Status
module Bridge
class Factory < Status::Factory
def self.extended_statuses
[Status::Bridge::Failed]
end
def self.common_helpers
Status::Bridge::Common
end
......
# frozen_string_literal: true
module Gitlab
module Ci
module Status
module Bridge
class Failed < Status::Build::Failed
end
end
end
end
end
......@@ -7,7 +7,7 @@ FactoryBot.define do
stage_idx { 0 }
ref { 'master' }
tag { false }
created_at { 'Di 29. Okt 09:50:00 CET 2013' }
created_at { '2013-10-29 09:50:00 CET' }
status { :created }
scheduling_type { 'stage' }
......@@ -39,5 +39,19 @@ FactoryBot.define do
)
end
end
trait :started do
started_at { '2013-10-29 09:51:28 CET' }
end
trait :finished do
started
finished_at { '2013-10-29 09:53:28 CET' }
end
trait :failed do
finished
status { 'failed' }
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe Gitlab::Ci::Status::Bridge::Factory do
let(:user) { create(:user) }
let(:project) { bridge.project }
let(:status) { factory.fabricate! }
let(:factory) { described_class.new(bridge, user) }
before do
stub_not_protect_default_branch
project.add_developer(user)
end
context 'when bridge is created' do
let(:bridge) { create(:ci_bridge) }
it 'matches correct core status' do
expect(factory.core_status).to be_a Gitlab::Ci::Status::Created
end
it 'fabricates status with correct details' do
expect(status.text).to eq s_('CiStatusText|created')
expect(status.icon).to eq 'status_created'
expect(status.favicon).to eq 'favicon_status_created'
expect(status.label).to be_nil
expect(status).not_to have_details
expect(status).not_to have_action
end
end
context 'when bridge is failed' do
let(:bridge) { create(:ci_bridge, :failed) }
it 'matches correct core status' do
expect(factory.core_status).to be_a Gitlab::Ci::Status::Failed
end
it 'matches correct extended statuses' do
expect(factory.extended_statuses)
.to eq [Gitlab::Ci::Status::Bridge::Failed]
end
it 'fabricates a failed bridge status' do
expect(status).to be_a Gitlab::Ci::Status::Bridge::Failed
end
it 'fabricates status with correct details' do
expect(status.text).to eq s_('CiStatusText|failed')
expect(status.icon).to eq 'status_failed'
expect(status.favicon).to eq 'favicon_status_failed'
expect(status.label).to be_nil
expect(status.status_tooltip).to eq "#{s_('CiStatusText|failed')} - (unknown failure)"
expect(status).not_to have_details
expect(status).not_to have_action
end
context 'failed with downstream_pipeline_creation_failed' do
before do
bridge.failure_reason = 'downstream_pipeline_creation_failed'
end
it 'fabricates correct status_tooltip' do
expect(status.status_tooltip).to eq(
"#{s_('CiStatusText|failed')} - (downstream pipeline can not be created)"
)
end
end
end
end
......@@ -475,5 +475,45 @@ describe Ci::CreateCrossProjectPipelineService, '#execute' do
expect(bridge.failure_reason).to eq 'insufficient_bridge_permissions'
end
end
context 'when there is no such branch in downstream project' do
let(:trigger) do
{
trigger: {
project: downstream_project.full_path,
branch: 'invalid_branch'
}
}
end
it 'does not create a pipeline and drops the bridge' do
service.execute(bridge)
expect(bridge.reload).to be_failed
expect(bridge.failure_reason).to eq('downstream_pipeline_creation_failed')
end
end
context 'when downstream pipeline has a branch rule and does not satisfy' do
before do
stub_ci_pipeline_yaml_file(config)
end
let(:config) do
<<-EOY
hello:
script: echo world
only:
- invalid_branch
EOY
end
it 'does not create a pipeline and drops the bridge' do
service.execute(bridge)
expect(bridge.reload).to be_failed
expect(bridge.failure_reason).to eq('downstream_pipeline_creation_failed')
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