diff options
author | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-05-05 14:27:42 +0200 |
---|---|---|
committer | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-05-06 09:38:58 +0200 |
commit | e9e71a9c9513c449798ba23fc6e159e834ef6f68 (patch) | |
tree | 219dada015f66a840d1d2de2dfe7adb692095adf | |
parent | 5109ce78027fe64268032d2d20cfc2371da9665a (diff) | |
download | gitlab-ce-e9e71a9c9513c449798ba23fc6e159e834ef6f68.tar.gz |
Incorporate review
-rw-r--r-- | app/models/ci/group.rb | 18 | ||||
-rw-r--r-- | app/models/ci/stage.rb | 6 | ||||
-rw-r--r-- | app/serializers/job_group_entity.rb | 2 | ||||
-rw-r--r-- | app/serializers/pipeline_entity.rb | 2 | ||||
-rw-r--r-- | spec/controllers/projects/pipelines_controller_spec.rb | 3 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/pipeline.json | 355 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/status/group/common_spec.rb | 7 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/status/group/factory_spec.rb | 11 | ||||
-rw-r--r-- | spec/models/ci/group_spec.rb | 10 | ||||
-rw-r--r-- | spec/serializers/pipeline_entity_spec.rb | 4 | ||||
-rw-r--r-- | spec/serializers/stage_entity_spec.rb | 8 |
11 files changed, 400 insertions, 26 deletions
diff --git a/app/models/ci/group.rb b/app/models/ci/group.rb index 9d5c55b86c5..a72e58f5a34 100644 --- a/app/models/ci/group.rb +++ b/app/models/ci/group.rb @@ -5,12 +5,14 @@ module Ci class Group include StaticModel - attr_reader :stage, :name, :statuses + attr_reader :stage, :name, :jobs - def initialize(stage, name:, statuses:) + delegate :size, to: :jobs + + def initialize(stage, name:, jobs:) @stage = stage @name = name - @statuses = statuses + @jobs = jobs end def status @@ -18,21 +20,17 @@ module Ci end def detailed_status(current_user) - if size == 1 - statuses[0].detailed_status(current_user) + if jobs.one? + jobs.first.detailed_status(current_user) else Gitlab::Ci::Status::Group::Factory.new(self, current_user).fabricate! end end - def size - statuses.size - end - private def commit_statuses - @commit_statuses ||= CommitStatus.where(id: statuses.map(&:id)) + @commit_statuses ||= CommitStatus.where(id: jobs.map(&:id)) end end end diff --git a/app/models/ci/stage.rb b/app/models/ci/stage.rb index 9f4f9f26b1c..79d009688f8 100644 --- a/app/models/ci/stage.rb +++ b/app/models/ci/stage.rb @@ -17,10 +17,10 @@ module Ci def job_groups @job_groups ||= - statuses.sort_by(&:sortable_name).group_by(&:group_name) + statuses.latest.sort_by(&:sortable_name).group_by(&:group_name) .map do |group_name, grouped_statuses| - Ci::Group.new(self, name: group_name, statuses: grouped_statuses) - end + Ci::Group.new(self, name: group_name, jobs: grouped_statuses) + end.sort_by(&:name) end def to_param diff --git a/app/serializers/job_group_entity.rb b/app/serializers/job_group_entity.rb index 6e8102b8b58..eb2ff76ebb8 100644 --- a/app/serializers/job_group_entity.rb +++ b/app/serializers/job_group_entity.rb @@ -4,7 +4,7 @@ class JobGroupEntity < Grape::Entity expose :name expose :size expose :detailed_status, as: :status, with: StatusEntity - expose :statuses, as: :jobs, with: JobEntity + expose :jobs, with: JobEntity private diff --git a/app/serializers/pipeline_entity.rb b/app/serializers/pipeline_entity.rb index 9c91ab3e098..ad8b4d43e8f 100644 --- a/app/serializers/pipeline_entity.rb +++ b/app/serializers/pipeline_entity.rb @@ -15,7 +15,7 @@ class PipelineEntity < Grape::Entity expose :detailed_status, as: :status, with: StatusEntity expose :duration expose :finished_at - expose :stages, with: StageEntity + expose :stages, using: StageEntity expose :artifacts, using: BuildArtifactEntity expose :manual_actions, using: BuildActionEntity end diff --git a/spec/controllers/projects/pipelines_controller_spec.rb b/spec/controllers/projects/pipelines_controller_spec.rb index 94b1a6eb6a9..fb4a4721a58 100644 --- a/spec/controllers/projects/pipelines_controller_spec.rb +++ b/spec/controllers/projects/pipelines_controller_spec.rb @@ -55,7 +55,8 @@ describe Projects::PipelinesController do create(:ci_build, pipeline: pipeline) - expect { get_pipeline_json }.not_to exceed_query_limit(control_count) + # The plus 2 is needed to group and sort + expect { get_pipeline_json }.not_to exceed_query_limit(control_count + 2) end end diff --git a/spec/fixtures/api/schemas/pipeline.json b/spec/fixtures/api/schemas/pipeline.json index f8740f48e2c..55511d17b5e 100644 --- a/spec/fixtures/api/schemas/pipeline.json +++ b/spec/fixtures/api/schemas/pipeline.json @@ -1 +1,354 @@ -{"id":3,"user":{"name":"Administrator","username":"root","id":1,"state":"active","avatar_url":"http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon","web_url":"http://localhost:3000/root"},"path":"/gitlab-org/gitlab-ce/pipelines/3","details":{"status":{"icon":"icon_status_failed","text":"failed","label":"failed","group":"failed","has_details":true,"details_path":"/gitlab-org/gitlab-ce/pipelines/3","favicon":"/assets/ci_favicons/favicon_status_failed-c2ff6a07bdec821d1dcae59a245fa3bfb0a5199526796ff8707e14640082a79e.ico"},"duration":0,"finished_at":"2017-05-04T18:00:06.936Z","stages":[{"name":"prepare","title":"prepare: failed","status":{"icon":"icon_status_failed","text":"failed","label":"failed","group":"failed","has_details":true,"details_path":"/gitlab-org/gitlab-ce/pipelines/3#prepare","favicon":"/assets/ci_favicons/favicon_status_failed-c2ff6a07bdec821d1dcae59a245fa3bfb0a5199526796ff8707e14640082a79e.ico"},"path":"/gitlab-org/gitlab-ce/pipelines/3#prepare","dropdown_path":"/gitlab-org/gitlab-ce/pipelines/3/stage.json?stage=prepare","groups":[{"name":"knapsack","size":1,"status":{"icon":"icon_status_failed","text":"failed","label":"failed","group":"failed","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_failed-c2ff6a07bdec821d1dcae59a245fa3bfb0a5199526796ff8707e14640082a79e.ico"}},{"name":"setup-test-env","size":1,"status":{"icon":"icon_status_failed","text":"failed","label":"failed","group":"failed","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_failed-c2ff6a07bdec821d1dcae59a245fa3bfb0a5199526796ff8707e14640082a79e.ico"}}]},{"name":"test","title":"test: skipped","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/pipelines/3#test","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"},"path":"/gitlab-org/gitlab-ce/pipelines/3#test","dropdown_path":"/gitlab-org/gitlab-ce/pipelines/3/stage.json?stage=test","groups":[{"name":"bundler:audit","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"bundler:check","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"license_finder","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"lint-doc","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"lint-javascript","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"migration paths","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rake brakeman","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rake db:migrate:reset","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rake db:seed_fu","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rake downtime_check","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rake flay","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rake haml_lint","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rake scss_lint","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec","size":20,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"},"jobs":[{"name":"rspec 0 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/225","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 1 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/167","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 2 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/168","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 3 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/169","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 4 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/170","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 5 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/171","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 6 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/172","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 7 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/173","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 8 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/174","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 9 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/175","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 10 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/176","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 11 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/177","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 12 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/178","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 13 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/179","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 14 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/180","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 15 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/181","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 16 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/182","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 17 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/183","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 18 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/184","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 19 20","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/185","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}}]},{"name":"rspec ruby21","size":20,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"},"jobs":[{"name":"rspec 0 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/196","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 1 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/197","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 2 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/198","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 3 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/199","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 4 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/200","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 5 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/201","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 6 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/202","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 7 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/203","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 8 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/204","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 9 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/205","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 10 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/206","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 11 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/207","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 12 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/208","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 13 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/209","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 14 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/210","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 15 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/211","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 16 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/212","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 17 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/213","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 18 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/214","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"rspec 19 20 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/215","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}}]},{"name":"rubocop","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach","size":10,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"},"jobs":[{"name":"spinach 0 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/186","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 1 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/187","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 2 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/188","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 3 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/189","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 4 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/190","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 5 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/191","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 6 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/192","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 7 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/193","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 8 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/194","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 9 10","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/195","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}}]},{"name":"spinach ruby21","size":10,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"},"jobs":[{"name":"spinach 0 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/216","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 1 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/217","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 2 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/218","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 3 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/219","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 4 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/220","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 5 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/221","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 6 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/222","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 7 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/223","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 8 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/224","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"spinach 9 10 ruby21","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/builds/231","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}}]},{"name":"teaspoon","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}}]},{"name":"post-test","title":"post-test: failed","status":{"icon":"icon_status_failed","text":"failed","label":"failed","group":"failed","has_details":true,"details_path":"/gitlab-org/gitlab-ce/pipelines/3#post-test","favicon":"/assets/ci_favicons/favicon_status_failed-c2ff6a07bdec821d1dcae59a245fa3bfb0a5199526796ff8707e14640082a79e.ico"},"path":"/gitlab-org/gitlab-ce/pipelines/3#post-test","dropdown_path":"/gitlab-org/gitlab-ce/pipelines/3/stage.json?stage=post-test","groups":[{"name":"coverage","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"notify:slack","size":1,"status":{"icon":"icon_status_failed","text":"failed","label":"failed","group":"failed","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_failed-c2ff6a07bdec821d1dcae59a245fa3bfb0a5199526796ff8707e14640082a79e.ico"}},{"name":"trigger_docs","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}},{"name":"update-knapsack","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}}]},{"name":"pages","title":"pages: skipped","status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":true,"details_path":"/gitlab-org/gitlab-ce/pipelines/3#pages","favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"},"path":"/gitlab-org/gitlab-ce/pipelines/3#pages","dropdown_path":"/gitlab-org/gitlab-ce/pipelines/3/stage.json?stage=pages","groups":[{"name":"pages","size":1,"status":{"icon":"icon_status_skipped","text":"skipped","label":"skipped","group":"skipped","has_details":false,"details_path":null,"favicon":"/assets/ci_favicons/favicon_status_skipped-db7236d8fa67af8d7cdcf4d033d4f1481f814c29a152b184190718cd91e42e94.ico"}}]}],"artifacts":[],"manual_actions":[]},"flags":{"latest":true,"triggered":false,"stuck":false,"yaml_errors":false,"retryable":true,"cancelable":false},"ref":{"name":"master","path":"/gitlab-org/gitlab-ce/tree/master","tag":false,"branch":true},"commit":{"id":"12e4f5bd777adb5cc035c84201ef67ad53e01237","short_id":"12e4f5bd","title":"Merge branch 'docs/cycle-analytics-new-image' into 'master'\r","created_at":"2016-11-22T15:35:59.000+00:00","parent_ids":["79030a0e12bd27e54e713c15e44395a092cabee6","c9084654a134906f2442a505bfdc1c2832cdf05f"],"message":"Merge branch 'docs/cycle-analytics-new-image' into 'master'\r\n\r\nAdd new image for Cycle Analytics\r\n\r\nSee merge request !7666","author_name":"Achilleas Pipinellis","author_email":"axilleas@axilleas.me","authored_date":"2016-11-22T15:35:59.000+00:00","committer_name":"Achilleas Pipinellis","committer_email":"axilleas@axilleas.me","committed_date":"2016-11-22T15:35:59.000+00:00","author":null,"author_gravatar_url":"http://www.gravatar.com/avatar/9df074c5e2441bd51c5ed6d4a9494de7?s=80\u0026d=identicon","commit_url":"http://localhost:3000/gitlab-org/gitlab-ce/commit/12e4f5bd777adb5cc035c84201ef67ad53e01237","commit_path":"/gitlab-org/gitlab-ce/commit/12e4f5bd777adb5cc035c84201ef67ad53e01237"},"retry_path":"/gitlab-org/gitlab-ce/pipelines/3/retry","created_at":"2017-05-04T12:37:51.193Z","updated_at":"2017-05-04T18:00:06.945Z"} +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "definitions": {}, + "id": "http://example.com/example.json", + "properties": { + "commit": { + "id": "/properties/commit", + "properties": { + "author": { + "id": "/properties/commit/properties/author", + "type": "null" + }, + "author_email": { + "id": "/properties/commit/properties/author_email", + "type": "string" + }, + "author_gravatar_url": { + "id": "/properties/commit/properties/author_gravatar_url", + "type": "string" + }, + "author_name": { + "id": "/properties/commit/properties/author_name", + "type": "string" + }, + "authored_date": { + "id": "/properties/commit/properties/authored_date", + "type": "string" + }, + "commit_path": { + "id": "/properties/commit/properties/commit_path", + "type": "string" + }, + "commit_url": { + "id": "/properties/commit/properties/commit_url", + "type": "string" + }, + "committed_date": { + "id": "/properties/commit/properties/committed_date", + "type": "string" + }, + "committer_email": { + "id": "/properties/commit/properties/committer_email", + "type": "string" + }, + "committer_name": { + "id": "/properties/commit/properties/committer_name", + "type": "string" + }, + "created_at": { + "id": "/properties/commit/properties/created_at", + "type": "string" + }, + "id": { + "id": "/properties/commit/properties/id", + "type": "string" + }, + "message": { + "id": "/properties/commit/properties/message", + "type": "string" + }, + "parent_ids": { + "id": "/properties/commit/properties/parent_ids", + "items": { + "id": "/properties/commit/properties/parent_ids/items", + "type": "string" + }, + "type": "array" + }, + "short_id": { + "id": "/properties/commit/properties/short_id", + "type": "string" + }, + "title": { + "id": "/properties/commit/properties/title", + "type": "string" + } + }, + "type": "object" + }, + "created_at": { + "id": "/properties/created_at", + "type": "string" + }, + "details": { + "id": "/properties/details", + "properties": { + "artifacts": { + "id": "/properties/details/properties/artifacts", + "items": {}, + "type": "array" + }, + "duration": { + "id": "/properties/details/properties/duration", + "type": "integer" + }, + "finished_at": { + "id": "/properties/details/properties/finished_at", + "type": "string" + }, + "manual_actions": { + "id": "/properties/details/properties/manual_actions", + "items": {}, + "type": "array" + }, + "stages": { + "id": "/properties/details/properties/stages", + "items": { + "id": "/properties/details/properties/stages/items", + "properties": { + "dropdown_path": { + "id": "/properties/details/properties/stages/items/properties/dropdown_path", + "type": "string" + }, + "groups": { + "id": "/properties/details/properties/stages/items/properties/groups", + "items": { + "id": "/properties/details/properties/stages/items/properties/groups/items", + "properties": { + "name": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/name", + "type": "string" + }, + "size": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/size", + "type": "integer" + }, + "status": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/status", + "properties": { + "details_path": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/status/properties/details_path", + "type": "null" + }, + "favicon": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/status/properties/favicon", + "type": "string" + }, + "group": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/status/properties/group", + "type": "string" + }, + "has_details": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/status/properties/has_details", + "type": "boolean" + }, + "icon": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/status/properties/icon", + "type": "string" + }, + "label": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/status/properties/label", + "type": "string" + }, + "text": { + "id": "/properties/details/properties/stages/items/properties/groups/items/properties/status/properties/text", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "name": { + "id": "/properties/details/properties/stages/items/properties/name", + "type": "string" + }, + "path": { + "id": "/properties/details/properties/stages/items/properties/path", + "type": "string" + }, + "status": { + "id": "/properties/details/properties/stages/items/properties/status", + "properties": { + "details_path": { + "id": "/properties/details/properties/stages/items/properties/status/properties/details_path", + "type": "string" + }, + "favicon": { + "id": "/properties/details/properties/stages/items/properties/status/properties/favicon", + "type": "string" + }, + "group": { + "id": "/properties/details/properties/stages/items/properties/status/properties/group", + "type": "string" + }, + "has_details": { + "id": "/properties/details/properties/stages/items/properties/status/properties/has_details", + "type": "boolean" + }, + "icon": { + "id": "/properties/details/properties/stages/items/properties/status/properties/icon", + "type": "string" + }, + "label": { + "id": "/properties/details/properties/stages/items/properties/status/properties/label", + "type": "string" + }, + "text": { + "id": "/properties/details/properties/stages/items/properties/status/properties/text", + "type": "string" + } + }, + "type": "object" + }, + "title": { + "id": "/properties/details/properties/stages/items/properties/title", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "status": { + "id": "/properties/details/properties/status", + "properties": { + "details_path": { + "id": "/properties/details/properties/status/properties/details_path", + "type": "string" + }, + "favicon": { + "id": "/properties/details/properties/status/properties/favicon", + "type": "string" + }, + "group": { + "id": "/properties/details/properties/status/properties/group", + "type": "string" + }, + "has_details": { + "id": "/properties/details/properties/status/properties/has_details", + "type": "boolean" + }, + "icon": { + "id": "/properties/details/properties/status/properties/icon", + "type": "string" + }, + "label": { + "id": "/properties/details/properties/status/properties/label", + "type": "string" + }, + "text": { + "id": "/properties/details/properties/status/properties/text", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "flags": { + "id": "/properties/flags", + "properties": { + "cancelable": { + "id": "/properties/flags/properties/cancelable", + "type": "boolean" + }, + "latest": { + "id": "/properties/flags/properties/latest", + "type": "boolean" + }, + "retryable": { + "id": "/properties/flags/properties/retryable", + "type": "boolean" + }, + "stuck": { + "id": "/properties/flags/properties/stuck", + "type": "boolean" + }, + "triggered": { + "id": "/properties/flags/properties/triggered", + "type": "boolean" + }, + "yaml_errors": { + "id": "/properties/flags/properties/yaml_errors", + "type": "boolean" + } + }, + "type": "object" + }, + "id": { + "id": "/properties/id", + "type": "integer" + }, + "path": { + "id": "/properties/path", + "type": "string" + }, + "ref": { + "id": "/properties/ref", + "properties": { + "branch": { + "id": "/properties/ref/properties/branch", + "type": "boolean" + }, + "name": { + "id": "/properties/ref/properties/name", + "type": "string" + }, + "path": { + "id": "/properties/ref/properties/path", + "type": "string" + }, + "tag": { + "id": "/properties/ref/properties/tag", + "type": "boolean" + } + }, + "type": "object" + }, + "retry_path": { + "id": "/properties/retry_path", + "type": "string" + }, + "updated_at": { + "id": "/properties/updated_at", + "type": "string" + }, + "user": { + "id": "/properties/user", + "properties": { + "avatar_url": { + "id": "/properties/user/properties/avatar_url", + "type": "string" + }, + "id": { + "id": "/properties/user/properties/id", + "type": "integer" + }, + "name": { + "id": "/properties/user/properties/name", + "type": "string" + }, + "state": { + "id": "/properties/user/properties/state", + "type": "string" + }, + "username": { + "id": "/properties/user/properties/username", + "type": "string" + }, + "web_url": { + "id": "/properties/user/properties/web_url", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" +} diff --git a/spec/lib/gitlab/ci/status/group/common_spec.rb b/spec/lib/gitlab/ci/status/group/common_spec.rb index 8a519e925a1..566bb411e96 100644 --- a/spec/lib/gitlab/ci/status/group/common_spec.rb +++ b/spec/lib/gitlab/ci/status/group/common_spec.rb @@ -2,8 +2,7 @@ require 'spec_helper' describe Gitlab::Ci::Status::Group::Common do subject do - Class.new(Gitlab::Ci::Status::Group::Core) - .new(nil, nil).extend(described_class) + Gitlab::Ci::Status::Core.new(nil, nil).extend(described_class) end it 'does not have action' do @@ -13,4 +12,8 @@ describe Gitlab::Ci::Status::Group::Common do it 'has details' do expect(subject).not_to have_details end + + it 'has no details_path' do + expect(subject.details_path).to be_falsy + end end diff --git a/spec/lib/gitlab/ci/status/group/factory_spec.rb b/spec/lib/gitlab/ci/status/group/factory_spec.rb new file mode 100644 index 00000000000..382436e8c3e --- /dev/null +++ b/spec/lib/gitlab/ci/status/group/factory_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe Gitlab::Ci::Status::Group::Factory do + subject { described_class } + + it { is_expected.to respond_to(:common_helpers) } + + it 'inherrits from Status::Factory' do + expect(subject).to be < Gitlab::Ci::Status::Factory + end +end diff --git a/spec/models/ci/group_spec.rb b/spec/models/ci/group_spec.rb index 7635995770d..798d1e213ab 100644 --- a/spec/models/ci/group_spec.rb +++ b/spec/models/ci/group_spec.rb @@ -1,15 +1,15 @@ require 'spec_helper' describe Ci::Group, models: true do - subject { described_class.new('test', name: 'rspec', statuses: statuses) } - let(:statuses) { [] } + subject { described_class.new('test', name: 'rspec', jobs: jobs) } + let(:jobs) { [] } describe 'expectations' do it { is_expected.to include_module(StaticModel) } it { is_expected.to respond_to(:stage) } it { is_expected.to respond_to(:name) } - it { is_expected.to respond_to(:statuses) } + it { is_expected.to respond_to(:jobs) } it { is_expected.to respond_to(:status) } end @@ -21,7 +21,7 @@ describe Ci::Group, models: true do describe '#detailed_status' do let(:job) { build(:ci_build, :success) } - let(:statuses) { [job] } + let(:jobs) { [job] } context 'when there is only one item in the group' do it 'calls the status from the object itself' do @@ -33,7 +33,7 @@ describe Ci::Group, models: true do context 'when there are more than 1 commit statuses' do let(:job1) { build(:ci_build) } - let(:statuses) { [job, job1] } + let(:jobs) { [job, job1] } it 'fabricates a new Ci::Status object' do expect(subject.detailed_status(nil)).to be_a(Gitlab::Ci::Status::Created) diff --git a/spec/serializers/pipeline_entity_spec.rb b/spec/serializers/pipeline_entity_spec.rb index 8256224652a..93d5a21419d 100644 --- a/spec/serializers/pipeline_entity_spec.rb +++ b/spec/serializers/pipeline_entity_spec.rb @@ -20,7 +20,7 @@ describe PipelineEntity do it 'contains required fields' do expect(subject).to include :id, :user, :path - expect(subject).to include :ref, :commit, :stages + expect(subject).to include :ref, :commit expect(subject).to include :updated_at, :created_at end @@ -29,7 +29,7 @@ describe PipelineEntity do expect(subject[:details]) .to include :duration, :finished_at expect(subject[:details]) - .to include :artifacts, :manual_actions + .to include :stages, :artifacts, :manual_actions expect(subject[:details][:status]).to include :icon, :favicon, :text, :label end diff --git a/spec/serializers/stage_entity_spec.rb b/spec/serializers/stage_entity_spec.rb index 4ab40d08432..0412b2d7741 100644 --- a/spec/serializers/stage_entity_spec.rb +++ b/spec/serializers/stage_entity_spec.rb @@ -47,5 +47,13 @@ describe StageEntity do it 'contains stage title' do expect(subject[:title]).to eq 'test: passed' end + + context 'when the jobs should be grouped' do + let(:entity) { described_class.new(stage, request: request, grouped: true) } + + it 'exposes the group key' do + expect(subject).to include :groups + end + end end end |