diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb
index f1e4246e7fba11b4d23f0fadb2aecd7aedaa1959..3f3c90a49ab8f3eca717b3a988a135cf81e42016 100644
--- a/app/controllers/projects/builds_controller.rb
+++ b/app/controllers/projects/builds_controller.rb
@@ -74,7 +74,9 @@ class Projects::BuildsController < Projects::ApplicationController
   end
 
   def status
-    render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha)
+    render json: BuildSerializer
+      .new(project: @project, user: @current_user)
+      .represent_status(@build)
   end
 
   def erase
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 2fadf7c8c81474a8520cd3e9c5c116237cf22fb8..1ee96799792bef789e6e62422dc3a13874201058 100755
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -10,7 +10,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
   before_action :module_enabled
   before_action :merge_request, only: [
     :edit, :update, :show, :diffs, :commits, :conflicts, :conflict_for_path, :pipelines, :merge, :merge_check,
-    :ci_status, :ci_environments_status, :toggle_subscription, :cancel_merge_when_pipeline_succeeds, :remove_wip, :resolve_conflicts, :assign_related_issues
+    :ci_status, :pipeline_status, :ci_environments_status, :toggle_subscription, :cancel_merge_when_pipeline_succeeds, :remove_wip, :resolve_conflicts, :assign_related_issues
   ]
   before_action :validates_merge_request, only: [:show, :diffs, :commits, :pipelines]
   before_action :define_show_vars, only: [:show, :diffs, :commits, :conflicts, :conflict_for_path, :builds, :pipelines]
@@ -473,6 +473,12 @@ class Projects::MergeRequestsController < Projects::ApplicationController
     render json: response
   end
 
+  def pipeline_status
+    render json: PipelineSerializer
+      .new(project: @project, user: @current_user)
+      .represent_status(@merge_request.head_pipeline)
+  end
+
   def ci_environments_status
     environments =
       begin
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb
index 718d9e86beaad2db77c8dd894f5ca39ac6f0f2e4..43a1abaa662f757cd949050035b182b47151dba7 100644
--- a/app/controllers/projects/pipelines_controller.rb
+++ b/app/controllers/projects/pipelines_controller.rb
@@ -72,6 +72,12 @@ class Projects::PipelinesController < Projects::ApplicationController
     end
   end
 
+  def status
+    render json: PipelineSerializer
+      .new(project: @project, user: @current_user)
+      .represent_status(@pipeline)
+  end
+
   def stage
     @stage = pipeline.stage(params[:stage])
     return not_found unless @stage
diff --git a/app/serializers/build_entity.rb b/app/serializers/build_entity.rb
index 5bcbe285052ee07f25218b1419f935f6a1f64795..fadd6c5c59796f6789cef1652661b6830df53cf9 100644
--- a/app/serializers/build_entity.rb
+++ b/app/serializers/build_entity.rb
@@ -18,10 +18,17 @@ class BuildEntity < Grape::Entity
 
   expose :created_at
   expose :updated_at
+  expose :detailed_status, as: :status, with: StatusEntity
 
   private
 
+  alias_method :build, :object
+
   def path_to(route, build)
     send("#{route}_path", build.project.namespace, build.project, build)
   end
+
+  def detailed_status
+    build.detailed_status(request.user)
+  end
 end
diff --git a/app/serializers/build_serializer.rb b/app/serializers/build_serializer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..79b670011991c77209624860fa7f5f66d48e0668
--- /dev/null
+++ b/app/serializers/build_serializer.rb
@@ -0,0 +1,8 @@
+class BuildSerializer < BaseSerializer
+  entity BuildEntity
+
+  def represent_status(resource)
+    data = represent(resource, { only: [:status] })
+    data.fetch(:status, {})
+  end
+end
diff --git a/app/serializers/pipeline_entity.rb b/app/serializers/pipeline_entity.rb
index 61f0f11d7d23ac06b86e2161689385b1e7bf2dae..3f16dd66d54b4c6f235ed64d0ad85e304823a604 100644
--- a/app/serializers/pipeline_entity.rb
+++ b/app/serializers/pipeline_entity.rb
@@ -12,12 +12,7 @@ class PipelineEntity < Grape::Entity
   end
 
   expose :details do
-    expose :status do |pipeline, options|
-      StatusEntity.represent(
-        pipeline.detailed_status(request.user),
-        options)
-    end
-
+    expose :detailed_status, as: :status, with: StatusEntity
     expose :duration
     expose :finished_at
     expose :stages, using: StageEntity
@@ -82,4 +77,8 @@ class PipelineEntity < Grape::Entity
     pipeline.cancelable? &&
       can?(request.user, :update_pipeline, pipeline)
   end
+
+  def detailed_status
+    pipeline.detailed_status(request.user)
+  end
 end
diff --git a/app/serializers/pipeline_serializer.rb b/app/serializers/pipeline_serializer.rb
index ab2d3d5a3ece51f5148f70d78b49bd3a056381bb..7829df9fada1a623bb62addefeea2bd6121af80e 100644
--- a/app/serializers/pipeline_serializer.rb
+++ b/app/serializers/pipeline_serializer.rb
@@ -22,4 +22,11 @@ class PipelineSerializer < BaseSerializer
       super(resource, opts)
     end
   end
+
+  def represent_status(resource)
+    return {} unless resource.present?
+
+    data = represent(resource, { only: [{ details: [:status] }] })
+    data.dig(:details, :status) || {}
+  end
 end
diff --git a/app/serializers/status_entity.rb b/app/serializers/status_entity.rb
index 47066bebfb11075658c0888d381590d4bce27bf5..dfd9d1584a1ca631d890204dead9d9ebe77953fd 100644
--- a/app/serializers/status_entity.rb
+++ b/app/serializers/status_entity.rb
@@ -1,7 +1,7 @@
 class StatusEntity < Grape::Entity
   include RequestAwareEntity
 
-  expose :icon, :text, :label, :group
+  expose :icon, :favicon, :text, :label, :group
 
   expose :has_details?, as: :has_details
   expose :details_path
diff --git a/changelogs/unreleased/12818-expose-simple-cicd-status-endpoints-with-status-serializer-gitlab-ci-status-for-pipeline-job-and-merge-request.yml b/changelogs/unreleased/12818-expose-simple-cicd-status-endpoints-with-status-serializer-gitlab-ci-status-for-pipeline-job-and-merge-request.yml
new file mode 100644
index 0000000000000000000000000000000000000000..953009213df9c8ea61eb407d5e96969527577314
--- /dev/null
+++ b/changelogs/unreleased/12818-expose-simple-cicd-status-endpoints-with-status-serializer-gitlab-ci-status-for-pipeline-job-and-merge-request.yml
@@ -0,0 +1,5 @@
+---
+title: Expose CI/CD status API endpoints with Gitlab::Ci::Status facility on pipeline,
+  job and merge request for favicon
+merge_request: 9561
+author: dosuken123
diff --git a/config/routes/project.rb b/config/routes/project.rb
index 44b8ae7aeddffa91bdb30a9ccbc3141fe0b9da3e..823e0614aeba7d824d27006a3c35259798e4a627 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -102,6 +102,7 @@ constraints(ProjectUrlConstrainer.new) do
           get :merge_widget_refresh
           post :cancel_merge_when_pipeline_succeeds
           get :ci_status
+          get :pipeline_status
           get :ci_environments_status
           post :toggle_subscription
           post :remove_wip
@@ -152,6 +153,7 @@ constraints(ProjectUrlConstrainer.new) do
           post :cancel
           post :retry
           get :builds
+          get :status
         end
       end
 
diff --git a/lib/gitlab/ci/status/canceled.rb b/lib/gitlab/ci/status/canceled.rb
index dd6d99e90757d623a83964ca738141eb44ed6559..97c121ce7b9d0705c24c4245c48de1630b3575c5 100644
--- a/lib/gitlab/ci/status/canceled.rb
+++ b/lib/gitlab/ci/status/canceled.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_canceled'
         end
+
+        def favicon
+          'favicon_status_canceled'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/core.rb b/lib/gitlab/ci/status/core.rb
index 3dd2b9e01f6d24efd4a05ba495c89c1a8080baf9..d4fd83b93f8f023052d2811c5ba641338e2e8c59 100644
--- a/lib/gitlab/ci/status/core.rb
+++ b/lib/gitlab/ci/status/core.rb
@@ -18,6 +18,10 @@ module Gitlab
           raise NotImplementedError
         end
 
+        def favicon
+          raise NotImplementedError
+        end
+
         def label
           raise NotImplementedError
         end
diff --git a/lib/gitlab/ci/status/created.rb b/lib/gitlab/ci/status/created.rb
index 6596d7e01ca9bb48b2c1beae651a99f012e42f91..0721bf6ec7c4df0dc2c1c6e6906e8b98aa4d935f 100644
--- a/lib/gitlab/ci/status/created.rb
+++ b/lib/gitlab/ci/status/created.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_created'
         end
+
+        def favicon
+          'favicon_status_created'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/failed.rb b/lib/gitlab/ci/status/failed.rb
index c5b5e3203ad6af466b7e53ffcde0ed55bf08dcae..cb75e9383a8524e9f43f62fbfa1dc3c0b418920f 100644
--- a/lib/gitlab/ci/status/failed.rb
+++ b/lib/gitlab/ci/status/failed.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_failed'
         end
+
+        def favicon
+          'favicon_status_failed'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/manual.rb b/lib/gitlab/ci/status/manual.rb
index 5f28521901df6ac2c0965dae962b636cb4290fe8..f8f6c2903ba70f75f726f11b86cf4ac9f519a862 100644
--- a/lib/gitlab/ci/status/manual.rb
+++ b/lib/gitlab/ci/status/manual.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_manual'
         end
+
+        def favicon
+          'favicon_status_manual'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/pending.rb b/lib/gitlab/ci/status/pending.rb
index d30f35a59a254bb89ec67f39c6071f5f81dcb07a..f40cc1314dce365fd7c8b96fbe6df804a3205f00 100644
--- a/lib/gitlab/ci/status/pending.rb
+++ b/lib/gitlab/ci/status/pending.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_pending'
         end
+
+        def favicon
+          'favicon_status_pending'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/running.rb b/lib/gitlab/ci/status/running.rb
index 2aba3c373c7fabbff7ecec5a019d478f90ada659..1237cd47dc85fc96ac8d4065c279e0cb700a5046 100644
--- a/lib/gitlab/ci/status/running.rb
+++ b/lib/gitlab/ci/status/running.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_running'
         end
+
+        def favicon
+          'favicon_status_running'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/skipped.rb b/lib/gitlab/ci/status/skipped.rb
index 16282aefd03d7a6a9942f388adad8213a012311d..28005d91503c889939502903c565ecaf3aca49df 100644
--- a/lib/gitlab/ci/status/skipped.rb
+++ b/lib/gitlab/ci/status/skipped.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_skipped'
         end
+
+        def favicon
+          'favicon_status_skipped'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/success.rb b/lib/gitlab/ci/status/success.rb
index c09c5f006e326a4353cb07a7e1909e1499f1d656..88f7758a27077733eb76f242640c672e6db21b0f 100644
--- a/lib/gitlab/ci/status/success.rb
+++ b/lib/gitlab/ci/status/success.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_success'
         end
+
+        def favicon
+          'favicon_status_success'
+        end
       end
     end
   end
diff --git a/spec/controllers/projects/builds_controller_spec.rb b/spec/controllers/projects/builds_controller_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..683667129e5ab06aad3840503771dfcfc56eaaf0
--- /dev/null
+++ b/spec/controllers/projects/builds_controller_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+describe Projects::BuildsController do
+  include ApiHelpers
+
+  let(:user) { create(:user) }
+  let(:project) { create(:empty_project, :public) }
+
+  before do
+    sign_in(user)
+  end
+
+  describe 'GET status.json' do
+    let(:pipeline) { create(:ci_pipeline, project: project) }
+    let(:build) { create(:ci_build, pipeline: pipeline) }
+    let(:status) { build.detailed_status(double('user')) }
+
+    before do
+      get :status, namespace_id: project.namespace,
+                   project_id: project,
+                   id: build.id,
+                   format: :json
+    end
+
+    it 'return a detailed build status in json' do
+      expect(response).to have_http_status(:ok)
+      expect(json_response['text']).to eq status.text
+      expect(json_response['label']).to eq status.label
+      expect(json_response['icon']).to eq status.icon
+      expect(json_response['favicon']).to eq status.favicon
+    end
+  end
+end
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index c310d830e817ebefa3fc2fdf1bff3f460308731d..72f41f7209ae34875d2a168ed512d86331383e5a 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -1178,4 +1178,42 @@ describe Projects::MergeRequestsController do
       end
     end
   end
+
+  describe 'GET pipeline_status.json' do
+    context 'when head_pipeline exists' do
+      let!(:pipeline) do
+        create(:ci_pipeline, project: merge_request.source_project,
+                             ref: merge_request.source_branch,
+                             sha: merge_request.diff_head_sha)
+      end
+
+      let(:status) { pipeline.detailed_status(double('user')) }
+
+      before { get_pipeline_status }
+
+      it 'return a detailed head_pipeline status in json' do
+        expect(response).to have_http_status(:ok)
+        expect(json_response['text']).to eq status.text
+        expect(json_response['label']).to eq status.label
+        expect(json_response['icon']).to eq status.icon
+        expect(json_response['favicon']).to eq status.favicon
+      end
+    end
+
+    context 'when head_pipeline does not exist' do
+      before { get_pipeline_status }
+
+      it 'return empty' do
+        expect(response).to have_http_status(:ok)
+        expect(json_response).to be_empty
+      end
+    end
+
+    def get_pipeline_status
+      get :pipeline_status, namespace_id: project.namespace,
+                            project_id: project,
+                            id: merge_request.iid,
+                            format: :json
+    end
+  end
 end
diff --git a/spec/controllers/projects/pipelines_controller_spec.rb b/spec/controllers/projects/pipelines_controller_spec.rb
index 04bb5cbbd591a59e13e54b2cdff3aa3762e11d35..d8f9bfd0d378a654d1c4329629a137635e8fa372 100644
--- a/spec/controllers/projects/pipelines_controller_spec.rb
+++ b/spec/controllers/projects/pipelines_controller_spec.rb
@@ -69,4 +69,24 @@ describe Projects::PipelinesController do
                   format: :json
     end
   end
+
+  describe 'GET status.json' do
+    let(:pipeline) { create(:ci_pipeline, project: project) }
+    let(:status) { pipeline.detailed_status(double('user')) }
+
+    before do
+      get :status, namespace_id: project.namespace,
+                   project_id: project,
+                   id: pipeline.id,
+                   format: :json
+    end
+
+    it 'return a detailed pipeline status in json' do
+      expect(response).to have_http_status(:ok)
+      expect(json_response['text']).to eq status.text
+      expect(json_response['label']).to eq status.label
+      expect(json_response['icon']).to eq status.icon
+      expect(json_response['favicon']).to eq status.favicon
+    end
+  end
 end
diff --git a/spec/lib/gitlab/ci/status/build/factory_spec.rb b/spec/lib/gitlab/ci/status/build/factory_spec.rb
index 8b3bd08cf138f98d0908f07e63a7bb3743f8ee55..e648a3ac3a27c49752cdee98a7086707b710023f 100644
--- a/spec/lib/gitlab/ci/status/build/factory_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/factory_spec.rb
@@ -27,6 +27,7 @@ describe Gitlab::Ci::Status::Build::Factory do
     it 'fabricates status with correct details' do
       expect(status.text).to eq 'passed'
       expect(status.icon).to eq 'icon_status_success'
+      expect(status.favicon).to eq 'favicon_status_success'
       expect(status.label).to eq 'passed'
       expect(status).to have_details
       expect(status).to have_action
@@ -53,6 +54,7 @@ describe Gitlab::Ci::Status::Build::Factory do
       it 'fabricates status with correct details' do
         expect(status.text).to eq 'failed'
         expect(status.icon).to eq 'icon_status_failed'
+        expect(status.favicon).to eq 'favicon_status_failed'
         expect(status.label).to eq 'failed'
         expect(status).to have_details
         expect(status).to have_action
@@ -79,6 +81,7 @@ describe Gitlab::Ci::Status::Build::Factory do
       it 'fabricates status with correct details' do
         expect(status.text).to eq 'failed'
         expect(status.icon).to eq 'icon_status_warning'
+        expect(status.favicon).to eq 'favicon_status_failed'
         expect(status.label).to eq 'failed (allowed to fail)'
         expect(status).to have_details
         expect(status).to have_action
@@ -107,6 +110,7 @@ describe Gitlab::Ci::Status::Build::Factory do
     it 'fabricates status with correct details' do
       expect(status.text).to eq 'canceled'
       expect(status.icon).to eq 'icon_status_canceled'
+      expect(status.favicon).to eq 'favicon_status_canceled'
       expect(status.label).to eq 'canceled'
       expect(status).to have_details
       expect(status).to have_action
@@ -132,6 +136,7 @@ describe Gitlab::Ci::Status::Build::Factory do
     it 'fabricates status with correct details' do
       expect(status.text).to eq 'running'
       expect(status.icon).to eq 'icon_status_running'
+      expect(status.favicon).to eq 'favicon_status_running'
       expect(status.label).to eq 'running'
       expect(status).to have_details
       expect(status).to have_action
@@ -157,6 +162,7 @@ describe Gitlab::Ci::Status::Build::Factory do
     it 'fabricates status with correct details' do
       expect(status.text).to eq 'pending'
       expect(status.icon).to eq 'icon_status_pending'
+      expect(status.favicon).to eq 'favicon_status_pending'
       expect(status.label).to eq 'pending'
       expect(status).to have_details
       expect(status).to have_action
@@ -181,6 +187,7 @@ describe Gitlab::Ci::Status::Build::Factory do
     it 'fabricates status with correct details' do
       expect(status.text).to eq 'skipped'
       expect(status.icon).to eq 'icon_status_skipped'
+      expect(status.favicon).to eq 'favicon_status_skipped'
       expect(status.label).to eq 'skipped'
       expect(status).to have_details
       expect(status).not_to have_action
@@ -208,6 +215,7 @@ describe Gitlab::Ci::Status::Build::Factory do
         expect(status.text).to eq 'manual'
         expect(status.group).to eq 'manual'
         expect(status.icon).to eq 'icon_status_manual'
+        expect(status.favicon).to eq 'favicon_status_manual'
         expect(status.label).to eq 'manual play action'
         expect(status).to have_details
         expect(status).to have_action
@@ -235,6 +243,7 @@ describe Gitlab::Ci::Status::Build::Factory do
         expect(status.text).to eq 'manual'
         expect(status.group).to eq 'manual'
         expect(status.icon).to eq 'icon_status_manual'
+        expect(status.favicon).to eq 'favicon_status_manual'
         expect(status.label).to eq 'manual stop action'
         expect(status).to have_details
         expect(status).to have_action
diff --git a/spec/lib/gitlab/ci/status/canceled_spec.rb b/spec/lib/gitlab/ci/status/canceled_spec.rb
index 768f8926f1d31074505f09a224b3640d1b3863ad..530639a58972e344c8ab31925fee3fac949e08bb 100644
--- a/spec/lib/gitlab/ci/status/canceled_spec.rb
+++ b/spec/lib/gitlab/ci/status/canceled_spec.rb
@@ -17,6 +17,10 @@ describe Gitlab::Ci::Status::Canceled do
     it { expect(subject.icon).to eq 'icon_status_canceled' }
   end
 
+  describe '#favicon' do
+    it { expect(subject.favicon).to eq 'favicon_status_canceled' }
+  end
+
   describe '#group' do
     it { expect(subject.group).to eq 'canceled' }
   end
diff --git a/spec/lib/gitlab/ci/status/created_spec.rb b/spec/lib/gitlab/ci/status/created_spec.rb
index e96c13aede38b54840ada4bc41fdde51982e95c3..aef982e17f1d00f0e95cbf1c60b038163a37436d 100644
--- a/spec/lib/gitlab/ci/status/created_spec.rb
+++ b/spec/lib/gitlab/ci/status/created_spec.rb
@@ -17,6 +17,10 @@ describe Gitlab::Ci::Status::Created do
     it { expect(subject.icon).to eq 'icon_status_created' }
   end
 
+  describe '#favicon' do
+    it { expect(subject.favicon).to eq 'favicon_status_created' }
+  end
+
   describe '#group' do
     it { expect(subject.group).to eq 'created' }
   end
diff --git a/spec/lib/gitlab/ci/status/failed_spec.rb b/spec/lib/gitlab/ci/status/failed_spec.rb
index e5da0a91159a0c21f790b636cd06c83dd94968ca..9a25743885c28aa84d70c2012fcd1315c89c609f 100644
--- a/spec/lib/gitlab/ci/status/failed_spec.rb
+++ b/spec/lib/gitlab/ci/status/failed_spec.rb
@@ -17,6 +17,10 @@ describe Gitlab::Ci::Status::Failed do
     it { expect(subject.icon).to eq 'icon_status_failed' }
   end
 
+  describe '#favicon' do
+    it { expect(subject.favicon).to eq 'favicon_status_failed' }
+  end
+
   describe '#group' do
     it { expect(subject.group).to eq 'failed' }
   end
diff --git a/spec/lib/gitlab/ci/status/manual_spec.rb b/spec/lib/gitlab/ci/status/manual_spec.rb
index 3fd3727b92ddf27e110160846f8896ed2672df74..6fdc3801d71231567e97e44991dc1acc4c36a081 100644
--- a/spec/lib/gitlab/ci/status/manual_spec.rb
+++ b/spec/lib/gitlab/ci/status/manual_spec.rb
@@ -17,6 +17,10 @@ describe Gitlab::Ci::Status::Manual do
     it { expect(subject.icon).to eq 'icon_status_manual' }
   end
 
+  describe '#favicon' do
+    it { expect(subject.favicon).to eq 'favicon_status_manual' }
+  end
+
   describe '#group' do
     it { expect(subject.group).to eq 'manual' }
   end
diff --git a/spec/lib/gitlab/ci/status/pending_spec.rb b/spec/lib/gitlab/ci/status/pending_spec.rb
index 8d09cf2a05a13ccce498ded734cc1f34e1967a4b..ffc53f0506b58e075eda2ae9a4bdf4a9041ead82 100644
--- a/spec/lib/gitlab/ci/status/pending_spec.rb
+++ b/spec/lib/gitlab/ci/status/pending_spec.rb
@@ -17,6 +17,10 @@ describe Gitlab::Ci::Status::Pending do
     it { expect(subject.icon).to eq 'icon_status_pending' }
   end
 
+  describe '#favicon' do
+    it { expect(subject.favicon).to eq 'favicon_status_pending' }
+  end
+
   describe '#group' do
     it { expect(subject.group).to eq 'pending' }
   end
diff --git a/spec/lib/gitlab/ci/status/running_spec.rb b/spec/lib/gitlab/ci/status/running_spec.rb
index 10d3bf749c1857c6f521fa5fd8b2bed6f81a2205..0babf1fb54e4668c496683ed3ee43914691f99ed 100644
--- a/spec/lib/gitlab/ci/status/running_spec.rb
+++ b/spec/lib/gitlab/ci/status/running_spec.rb
@@ -17,6 +17,10 @@ describe Gitlab::Ci::Status::Running do
     it { expect(subject.icon).to eq 'icon_status_running' }
   end
 
+  describe '#favicon' do
+    it { expect(subject.favicon).to eq 'favicon_status_running' }
+  end
+
   describe '#group' do
     it { expect(subject.group).to eq 'running' }
   end
diff --git a/spec/lib/gitlab/ci/status/skipped_spec.rb b/spec/lib/gitlab/ci/status/skipped_spec.rb
index 10db93d38025604eca3bb4d80d66f982aacc8ed5..670747c9f0b87ab471db37112b6918a04c296bb8 100644
--- a/spec/lib/gitlab/ci/status/skipped_spec.rb
+++ b/spec/lib/gitlab/ci/status/skipped_spec.rb
@@ -17,6 +17,10 @@ describe Gitlab::Ci::Status::Skipped do
     it { expect(subject.icon).to eq 'icon_status_skipped' }
   end
 
+  describe '#favicon' do
+    it { expect(subject.favicon).to eq 'favicon_status_skipped' }
+  end
+
   describe '#group' do
     it { expect(subject.group).to eq 'skipped' }
   end
diff --git a/spec/lib/gitlab/ci/status/success_spec.rb b/spec/lib/gitlab/ci/status/success_spec.rb
index 230f24b94a4418fa0e528704adb8096efdef17dd..ff65b074808ae94f220c01b802c2a344d7c631ad 100644
--- a/spec/lib/gitlab/ci/status/success_spec.rb
+++ b/spec/lib/gitlab/ci/status/success_spec.rb
@@ -17,6 +17,10 @@ describe Gitlab::Ci::Status::Success do
     it { expect(subject.icon).to eq 'icon_status_success' }
   end
 
+  describe '#favicon' do
+    it { expect(subject.favicon).to eq 'favicon_status_success' }
+  end
+
   describe '#group' do
     it { expect(subject.group).to eq 'success' }
   end
diff --git a/spec/serializers/build_entity_spec.rb b/spec/serializers/build_entity_spec.rb
index 60c9642ee2c6662c6433ebed77b77f2c7750a682..7dcdf54fd933e26936872ebbd683fe9a91665eda 100644
--- a/spec/serializers/build_entity_spec.rb
+++ b/spec/serializers/build_entity_spec.rb
@@ -1,10 +1,16 @@
 require 'spec_helper'
 
 describe BuildEntity do
+  let(:user) { create(:user) }
   let(:build) { create(:ci_build) }
+  let(:request) { double('request') }
+
+  before do
+    allow(request).to receive(:user).and_return(user)
+  end
 
   let(:entity) do
-    described_class.new(build, request: double)
+    described_class.new(build, request: request)
   end
 
   subject { entity.as_json }
@@ -22,6 +28,11 @@ describe BuildEntity do
     expect(subject).to include(:created_at, :updated_at)
   end
 
+  it 'contains details' do
+    expect(subject).to include :status
+    expect(subject[:status]).to include :icon, :favicon, :text, :label
+  end
+
   context 'when build is a regular job' do
     it 'does not contain path to play action' do
       expect(subject).not_to include(:play_path)
diff --git a/spec/serializers/build_serializer_spec.rb b/spec/serializers/build_serializer_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3cc791bca50ff20324a3aaf725a9073111089a37
--- /dev/null
+++ b/spec/serializers/build_serializer_spec.rb
@@ -0,0 +1,45 @@
+require 'spec_helper'
+
+describe BuildSerializer do
+  let(:user) { create(:user) }
+
+  let(:serializer) do
+    described_class.new(user: user)
+  end
+
+  subject { serializer.represent(resource) }
+
+  describe '#represent' do
+    context 'when a single object is being serialized' do
+      let(:resource) { create(:ci_build) }
+
+      it 'serializers the pipeline object' do
+        expect(subject[:id]).to eq resource.id
+      end
+    end
+
+    context 'when multiple objects are being serialized' do
+      let(:resource) { create_list(:ci_build, 2) }
+
+      it 'serializers the array of pipelines' do
+        expect(subject).not_to be_empty
+      end
+    end
+  end
+
+  describe '#represent_status' do
+    context 'when represents only status' do
+      let(:resource) { create(:ci_build) }
+      let(:status) { resource.detailed_status(double('user')) }
+
+      subject { serializer.represent_status(resource) }
+
+      it 'serializes only status' do
+        expect(subject[:text]).to eq(status.text)
+        expect(subject[:label]).to eq(status.label)
+        expect(subject[:icon]).to eq(status.icon)
+        expect(subject[:favicon]).to eq(status.favicon)
+      end
+    end
+  end
+end
diff --git a/spec/serializers/deployment_entity_spec.rb b/spec/serializers/deployment_entity_spec.rb
index ea87771e2a2b11b05457271169c7b71f2cda279e..95eca5463eb618266c219fc10d1d323ef83a531c 100644
--- a/spec/serializers/deployment_entity_spec.rb
+++ b/spec/serializers/deployment_entity_spec.rb
@@ -1,8 +1,15 @@
 require 'spec_helper'
 
 describe DeploymentEntity do
+  let(:user) { create(:user) }
+  let(:request) { double('request') }
+
+  before do
+    allow(request).to receive(:user).and_return(user)
+  end
+
   let(:entity) do
-    described_class.new(deployment, request: double)
+    described_class.new(deployment, request: request)
   end
 
   let(:deployment) { create(:deployment) }
diff --git a/spec/serializers/pipeline_entity_spec.rb b/spec/serializers/pipeline_entity_spec.rb
index ccb72973f9c2de19db795e56c85b70206fbaf8d0..93d5a21419d80c275919dcebd7fc591b6a5f3bde 100644
--- a/spec/serializers/pipeline_entity_spec.rb
+++ b/spec/serializers/pipeline_entity_spec.rb
@@ -30,7 +30,7 @@ describe PipelineEntity do
           .to include :duration, :finished_at
         expect(subject[:details])
           .to include :stages, :artifacts, :manual_actions
-        expect(subject[:details][:status]).to include :icon, :text, :label
+        expect(subject[:details][:status]).to include :icon, :favicon, :text, :label
       end
 
       it 'contains flags' do
diff --git a/spec/serializers/pipeline_serializer_spec.rb b/spec/serializers/pipeline_serializer_spec.rb
index 2aaef03cb935b9dd79e0145d38c9e7e9cd36dc95..8642b8038448ba11d88aea434bee082887f0fd2f 100644
--- a/spec/serializers/pipeline_serializer_spec.rb
+++ b/spec/serializers/pipeline_serializer_spec.rb
@@ -94,4 +94,20 @@ describe PipelineSerializer do
       end
     end
   end
+
+  describe '#represent_status' do
+    context 'when represents only status' do
+      let(:resource) { create(:ci_pipeline) }
+      let(:status) { resource.detailed_status(double('user')) }
+
+      subject { serializer.represent_status(resource) }
+
+      it 'serializes only status' do
+        expect(subject[:text]).to eq(status.text)
+        expect(subject[:label]).to eq(status.label)
+        expect(subject[:icon]).to eq(status.icon)
+        expect(subject[:favicon]).to eq(status.favicon)
+      end
+    end
+  end
 end
diff --git a/spec/serializers/status_entity_spec.rb b/spec/serializers/status_entity_spec.rb
index 89428b4216ecdb6b0b2f9e33e850837fd9a9d41a..c94902dbab8f77d84d7fd64bc8a4550d1a95bbfa 100644
--- a/spec/serializers/status_entity_spec.rb
+++ b/spec/serializers/status_entity_spec.rb
@@ -16,7 +16,7 @@ describe StatusEntity do
     subject { entity.as_json }
 
     it 'contains status details' do
-      expect(subject).to include :text, :icon, :label, :group
+      expect(subject).to include :text, :icon, :favicon, :label, :group
       expect(subject).to include :has_details, :details_path
     end
   end