From 1b14182f21a60384234e79b3a0f02c81d016192d Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Tue, 27 Dec 2016 12:48:01 +0100 Subject: [PATCH] Expose stage dropdown path and title in stage entity --- app/serializers/stage_entity.rb | 28 ++++++++++++++++++++++----- spec/serializers/stage_entity_spec.rb | 11 +++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/app/serializers/stage_entity.rb b/app/serializers/stage_entity.rb index b57202a6267..1aebba3a2d1 100644 --- a/app/serializers/stage_entity.rb +++ b/app/serializers/stage_entity.rb @@ -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 diff --git a/spec/serializers/stage_entity_spec.rb b/spec/serializers/stage_entity_spec.rb index 807e09f860a..4ab40d08432 100644 --- a/spec/serializers/stage_entity_spec.rb +++ b/spec/serializers/stage_entity_spec.rb @@ -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