From d54cf868f81ca957c8322661b11e6755d9ea5a85 Mon Sep 17 00:00:00 2001
From: Mayra Cabrera <mcabrera@gitlab.com>
Date: Thu, 5 Apr 2018 21:04:42 +0000
Subject: Resolve "Show `failure_reason` and upgrade tooltips of jobs"

---
 spec/serializers/build_serializer_spec.rb | 22 +++++++++++++++++++---
 spec/serializers/job_entity_spec.rb       | 26 ++++++++++++++++++++++++--
 spec/serializers/pipeline_entity_spec.rb  |  2 +-
 spec/serializers/stage_entity_spec.rb     |  2 +-
 spec/serializers/status_entity_spec.rb    |  2 +-
 5 files changed, 46 insertions(+), 8 deletions(-)

(limited to 'spec/serializers')

diff --git a/spec/serializers/build_serializer_spec.rb b/spec/serializers/build_serializer_spec.rb
index 9673b11c2a2..98cd15e248b 100644
--- a/spec/serializers/build_serializer_spec.rb
+++ b/spec/serializers/build_serializer_spec.rb
@@ -28,15 +28,31 @@ describe BuildSerializer do
   end
 
   describe '#represent_status' do
-    context 'when represents only status' do
-      let(:resource) { create(:ci_build) }
+    context 'for a failed build' do
+      let(:resource) { create(:ci_build, :failed) }
+      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('failed')
+        expect(subject[:tooltip]).to eq('failed <br> (unknown failure)')
+        expect(subject[:icon]).to eq(status.icon)
+        expect(subject[:favicon]).to match_asset_path("/assets/ci_favicons/#{status.favicon}.ico")
+      end
+    end
+
+    context 'for any other type of build' do
+      let(:resource) { create(:ci_build, :success) }
       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[:label]).to eq('passed')
+        expect(subject[:tooltip]).to eq('passed')
         expect(subject[:icon]).to eq(status.icon)
         expect(subject[:favicon]).to match_asset_path("/assets/ci_favicons/#{status.favicon}.ico")
       end
diff --git a/spec/serializers/job_entity_spec.rb b/spec/serializers/job_entity_spec.rb
index 026360e91a3..24a6f1a2a8a 100644
--- a/spec/serializers/job_entity_spec.rb
+++ b/spec/serializers/job_entity_spec.rb
@@ -38,7 +38,7 @@ describe JobEntity do
 
   it 'contains details' do
     expect(subject).to include :status
-    expect(subject[:status]).to include :icon, :favicon, :text, :label
+    expect(subject[:status]).to include :icon, :favicon, :text, :label, :tooltip
   end
 
   context 'when job is retryable' do
@@ -126,7 +126,29 @@ describe JobEntity do
 
     it 'contains details' do
       expect(subject).to include :status
-      expect(subject[:status]).to include :icon, :favicon, :text, :label
+      expect(subject[:status]).to include :icon, :favicon, :text, :label, :tooltip
+    end
+  end
+
+  context 'when job failed' do
+    let(:job) { create(:ci_build, :script_failure) }
+
+    describe 'status' do
+      it 'should contain the failure reason inside label' do
+        expect(subject[:status]).to include :icon, :favicon, :text, :label, :tooltip
+        expect(subject[:status][:label]).to eq('failed')
+        expect(subject[:status][:tooltip]).to eq('failed <br> (script failure)')
+      end
+    end
+  end
+
+  context 'when job passed' do
+    let(:job) { create(:ci_build, :success) }
+
+    describe 'status' do
+      it 'should not contain the failure reason inside label' do
+        expect(subject[:status][:label]).to eq('passed')
+      end
     end
   end
 end
diff --git a/spec/serializers/pipeline_entity_spec.rb b/spec/serializers/pipeline_entity_spec.rb
index 248552d1858..2473c561f4b 100644
--- a/spec/serializers/pipeline_entity_spec.rb
+++ b/spec/serializers/pipeline_entity_spec.rb
@@ -30,7 +30,7 @@ describe PipelineEntity do
         expect(subject).to include :details
         expect(subject[:details])
           .to include :duration, :finished_at
-        expect(subject[:details][:status]).to include :icon, :favicon, :text, :label
+        expect(subject[:details][:status]).to include :icon, :favicon, :text, :label, :tooltip
       end
 
       it 'contains flags' do
diff --git a/spec/serializers/stage_entity_spec.rb b/spec/serializers/stage_entity_spec.rb
index 40e303f7b89..2034c7891ef 100644
--- a/spec/serializers/stage_entity_spec.rb
+++ b/spec/serializers/stage_entity_spec.rb
@@ -26,7 +26,7 @@ describe StageEntity do
     end
 
     it 'contains detailed status' do
-      expect(subject[:status]).to include :text, :label, :group, :icon
+      expect(subject[:status]).to include :text, :label, :group, :icon, :tooltip
       expect(subject[:status][:label]).to eq 'passed'
     end
 
diff --git a/spec/serializers/status_entity_spec.rb b/spec/serializers/status_entity_spec.rb
index 70402bac2e2..559475e571c 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, :favicon, :label, :group
+      expect(subject).to include :text, :icon, :favicon, :label, :group, :tooltip
       expect(subject).to include :has_details, :details_path
       expect(subject[:favicon]).to match_asset_path('/assets/ci_favicons/favicon_status_success.ico')
     end
-- 
cgit v1.2.1