Commit 4bfe10d5 authored by Stan Hu's avatar Stan Hu

Fix emoji paths in relative root configurations

If a site specifies a relative URL root, emoji files would omit the path from
the URL, leading to lots of 404s.

Closes #15642
parent 6c0d3b4c
...@@ -66,8 +66,17 @@ module Gitlab ...@@ -66,8 +66,17 @@ module Gitlab
def self.urls def self.urls
@urls ||= begin @urls ||= begin
path = File.join(Rails.root, 'fixtures', 'emojis', 'digests.json') path = File.join(Rails.root, 'fixtures', 'emojis', 'digests.json')
# Construct the full asset path ourselves because
# ActionView::Helpers::AssetUrlHelper.asset_url is slow for hundreds
# of entries since it has to do a lot of extra work (e.g. regexps).
prefix = Gitlab::Application.config.assets.prefix prefix = Gitlab::Application.config.assets.prefix
digest = Gitlab::Application.config.assets.digest digest = Gitlab::Application.config.assets.digest
base =
if defined?(Gitlab::Application.config.relative_url_root) && Gitlab::Application.config.relative_url_root
Gitlab::Application.config.relative_url_root
else
''
end
JSON.parse(File.read(path)).map do |hash| JSON.parse(File.read(path)).map do |hash|
if digest if digest
...@@ -76,7 +85,7 @@ module Gitlab ...@@ -76,7 +85,7 @@ module Gitlab
fname = hash['unicode'] fname = hash['unicode']
end end
{ name: hash['name'], path: "#{prefix}/#{fname}.png" } { name: hash['name'], path: File.join(base, prefix, "#{fname}.png") }
end end
end end
end end
......
...@@ -2,6 +2,10 @@ require 'spec_helper' ...@@ -2,6 +2,10 @@ require 'spec_helper'
describe Gitlab::AwardEmoji do describe Gitlab::AwardEmoji do
describe '.urls' do describe '.urls' do
after do
Gitlab::AwardEmoji.instance_variable_set(:@urls, nil)
end
subject { Gitlab::AwardEmoji.urls } subject { Gitlab::AwardEmoji.urls }
it { is_expected.to be_an_instance_of(Array) } it { is_expected.to be_an_instance_of(Array) }
...@@ -15,6 +19,17 @@ describe Gitlab::AwardEmoji do ...@@ -15,6 +19,17 @@ describe Gitlab::AwardEmoji do
end end
end end
end end
context 'handles relative root' do
it 'includes the full path' do
allow(Gitlab::Application.config).to receive(:relative_url_root).and_return('/gitlab')
subject.each do |hash|
expect(hash[:name]).to be_an_instance_of(String)
expect(hash[:path]).to start_with('/gitlab')
end
end
end
end end
describe '.emoji_by_category' do describe '.emoji_by_category' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment