diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-12-27 14:48:01 +0300 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-12-27 14:48:01 +0300 |
commit | 1b14182f21a60384234e79b3a0f02c81d016192d (patch) | |
tree | c244009f20c46b39ed65432b7c39105c3dd9fcde | |
parent | f9331db136f19dfdc6b2affa0922bdcda7c681fc (diff) |
Expose stage dropdown path and title in stage entity
-rw-r--r-- | app/serializers/stage_entity.rb | 28 | ||||
-rw-r--r-- | 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 |