Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/serializers/stage_entity.rb28
-rw-r--r--spec/serializers/stage_entity_spec.rb11
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