Expose stage dropdown path and title in stage entity

This commit is contained in:
Grzegorz Bizon 2016-12-27 12:48:01 +01:00
parent f9331db136
commit 1b14182f21
2 changed files with 34 additions and 5 deletions

View file

@ -3,17 +3,35 @@ class StageEntity < Grape::Entity
expose :name
expose :status do |stage, options|
StatusEntity.represent(
stage.detailed_status(request.user),
options)
expose :title do |stage|
"#{stage.name}: #{detailed_status.label}"
end
expose :detailed_status, as: :status,
with: StatusEntity
expose :path do |stage|
namespace_project_pipeline_path(
stage.pipeline.project.namespace,
stage.pipeline.project,
stage.pipeline.id,
stage.pipeline,
anchor: stage.name)
end
expose :dropdown_path do |stage|
stage_namespace_project_pipeline_path(
stage.pipeline.project.namespace,
stage.pipeline.project,
stage.pipeline,
stage: stage.name,
format: :json)
end
private
alias_method :stage, :object
def detailed_status
stage.detailed_status(request.user)
end
end

View file

@ -15,6 +15,7 @@ describe StageEntity do
before do
allow(request).to receive(:user).and_return(user)
create(:ci_build, :success, pipeline: pipeline)
end
describe '#as_json' do
@ -26,6 +27,7 @@ describe StageEntity do
it 'contains detailed status' do
expect(subject[:status]).to include :text, :label, :group, :icon
expect(subject[:status][:label]).to eq 'passed'
end
it 'contains valid name' do
@ -36,5 +38,14 @@ describe StageEntity do
expect(subject[:path])
.to include "pipelines/#{pipeline.id}##{stage.name}"
end
it 'contains path to the stage dropdown' do
expect(subject[:dropdown_path])
.to include "pipelines/#{pipeline.id}/stage.json?stage=test"
end
it 'contains stage title' do
expect(subject[:title]).to eq 'test: passed'
end
end
end