summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/serializers/status_entity.rb11
-rw-r--r--lib/gitlab/ci/status/canceled.rb2
-rw-r--r--lib/gitlab/ci/status/created.rb2
-rw-r--r--lib/gitlab/ci/status/failed.rb2
-rw-r--r--lib/gitlab/ci/status/manual.rb2
-rw-r--r--lib/gitlab/ci/status/pending.rb2
-rw-r--r--lib/gitlab/ci/status/running.rb2
-rw-r--r--lib/gitlab/ci/status/skipped.rb2
-rw-r--r--lib/gitlab/ci/status/success.rb2
-rw-r--r--lib/gitlab/favicon.rb18
-rw-r--r--spec/lib/gitlab/favicon_spec.rb13
11 files changed, 37 insertions, 21 deletions
diff --git a/app/serializers/status_entity.rb b/app/serializers/status_entity.rb
index 8e8bda2f9df..f4d0a33d466 100644
--- a/app/serializers/status_entity.rb
+++ b/app/serializers/status_entity.rb
@@ -7,16 +7,7 @@ class StatusEntity < Grape::Entity
expose :details_path
expose :favicon do |status|
- dir =
- if Gitlab::Utils.to_boolean(ENV['CANARY'])
- File.join('ci_favicons', 'canary')
- elsif Rails.env.development?
- File.join('ci_favicons', 'dev')
- else
- 'ci_favicons'
- end
-
- ActionController::Base.helpers.image_path(File.join(dir, "#{status.favicon}.ico"))
+ ActionController::Base.helpers.image_path(status.favicon)
end
expose :action, if: -> (status, _) { status.has_action? } do
diff --git a/lib/gitlab/ci/status/canceled.rb b/lib/gitlab/ci/status/canceled.rb
index e6195a60d4f..0d71ff03163 100644
--- a/lib/gitlab/ci/status/canceled.rb
+++ b/lib/gitlab/ci/status/canceled.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def favicon
- 'favicon_status_canceled'
+ Gitlab::Favicon.status('canceled')
end
end
end
diff --git a/lib/gitlab/ci/status/created.rb b/lib/gitlab/ci/status/created.rb
index 846f00b83dd..de86191dfeb 100644
--- a/lib/gitlab/ci/status/created.rb
+++ b/lib/gitlab/ci/status/created.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def favicon
- 'favicon_status_created'
+ Gitlab::Favicon.status('created')
end
end
end
diff --git a/lib/gitlab/ci/status/failed.rb b/lib/gitlab/ci/status/failed.rb
index 27ce85bd3ed..20e2050108c 100644
--- a/lib/gitlab/ci/status/failed.rb
+++ b/lib/gitlab/ci/status/failed.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def favicon
- 'favicon_status_failed'
+ Gitlab::Favicon.status('failed')
end
end
end
diff --git a/lib/gitlab/ci/status/manual.rb b/lib/gitlab/ci/status/manual.rb
index fc387e2fd25..2c02ce6e870 100644
--- a/lib/gitlab/ci/status/manual.rb
+++ b/lib/gitlab/ci/status/manual.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def favicon
- 'favicon_status_manual'
+ Gitlab::Favicon.status('manual')
end
end
end
diff --git a/lib/gitlab/ci/status/pending.rb b/lib/gitlab/ci/status/pending.rb
index 6780780db32..9122d11cfed 100644
--- a/lib/gitlab/ci/status/pending.rb
+++ b/lib/gitlab/ci/status/pending.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def favicon
- 'favicon_status_pending'
+ Gitlab::Favicon.status('pending')
end
end
end
diff --git a/lib/gitlab/ci/status/running.rb b/lib/gitlab/ci/status/running.rb
index ee13905e46d..9bc48ec2c29 100644
--- a/lib/gitlab/ci/status/running.rb
+++ b/lib/gitlab/ci/status/running.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def favicon
- 'favicon_status_running'
+ Gitlab::Favicon.status('running')
end
end
end
diff --git a/lib/gitlab/ci/status/skipped.rb b/lib/gitlab/ci/status/skipped.rb
index 0dbdc4de426..b404118cd3b 100644
--- a/lib/gitlab/ci/status/skipped.rb
+++ b/lib/gitlab/ci/status/skipped.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def favicon
- 'favicon_status_skipped'
+ Gitlab::Favicon.status('skipped')
end
end
end
diff --git a/lib/gitlab/ci/status/success.rb b/lib/gitlab/ci/status/success.rb
index 731013ec017..be7e5d60b26 100644
--- a/lib/gitlab/ci/status/success.rb
+++ b/lib/gitlab/ci/status/success.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def favicon
- 'favicon_status_success'
+ Gitlab::Favicon.status('success')
end
end
end
diff --git a/lib/gitlab/favicon.rb b/lib/gitlab/favicon.rb
index 27150f8d1ea..17e737ac913 100644
--- a/lib/gitlab/favicon.rb
+++ b/lib/gitlab/favicon.rb
@@ -2,21 +2,33 @@ module Gitlab
class Favicon
class << self
def default
- return appearance_favicon.default.url if appearance_favicon
+ return appearance_favicon.default.url if appearance_favicon.exists?
return 'favicon-yellow.ico' if Gitlab::Utils.to_boolean(ENV['CANARY'])
return 'favicon-blue.ico' if Rails.env.development?
'favicon.ico'
end
+ def status(status_name)
+ if appearance_favicon.exists?
+ appearance_favicon.public_send("status_#{status_name}").url
+ else
+ dir = 'ci_favicons'
+ dir = File.join(dir, 'dev') if Rails.env.development?
+ dir = File.join(dir, 'canary') if Gitlab::Utils.to_boolean(ENV['CANARY'])
+
+ File.join(dir, "favicon_status_#{status_name}.ico")
+ end
+ end
+
private
def appearance
- @appearance ||= Appearance.current
+ Appearance.current || Appearance.new
end
def appearance_favicon
- appearance&.favicon
+ appearance.favicon
end
end
end
diff --git a/spec/lib/gitlab/favicon_spec.rb b/spec/lib/gitlab/favicon_spec.rb
index 51a8ed47abf..d74dabf1458 100644
--- a/spec/lib/gitlab/favicon_spec.rb
+++ b/spec/lib/gitlab/favicon_spec.rb
@@ -22,4 +22,17 @@ RSpec.describe Gitlab::Favicon do
expect(described_class.default).to match %r{/uploads/-/system/appearance/favicon/\d+/default_dk.ico}
end
end
+
+ describe '.status' do
+ subject { described_class.status('created') }
+
+ it 'defaults to the stock icon' do
+ expect(subject).to eq 'ci_favicons/favicon_status_created.ico'
+ end
+
+ it 'uses the custom favicon if a favicon appearance is present' do
+ create :appearance, favicon: fixture_file_upload(Rails.root.join('spec/fixtures/dk.png'))
+ expect(subject).to match(%r{/uploads/-/system/appearance/favicon/\d+/status_created_dk.ico})
+ end
+ end
end