Commit 2828b768 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch '38598-precompiled-assets-with-digest-strings-are-ignored-in-ci' into 'master'

Resolve "Precompiled assets with digest strings are ignored in CI"

Closes #38598

See merge request gitlab-org/gitlab-ce!14583
parents 18fee306 7b262c43
...@@ -16,7 +16,7 @@ Rails.application.configure do ...@@ -16,7 +16,7 @@ Rails.application.configure do
config.cache_classes = ENV['CACHE_CLASSES'] == 'true' config.cache_classes = ENV['CACHE_CLASSES'] == 'true'
# Configure static asset server for tests with Cache-Control for performance # Configure static asset server for tests with Cache-Control for performance
config.assets.digest = false config.assets.compile = false if ENV['CI']
config.serve_static_files = true config.serve_static_files = true
config.static_cache_control = "public, max-age=3600" config.static_cache_control = "public, max-age=3600"
......
...@@ -216,7 +216,7 @@ describe Projects::JobsController do ...@@ -216,7 +216,7 @@ describe Projects::JobsController do
expect(json_response['text']).to eq status.text expect(json_response['text']).to eq status.text
expect(json_response['label']).to eq status.label expect(json_response['label']).to eq status.label
expect(json_response['icon']).to eq status.icon expect(json_response['icon']).to eq status.icon
expect(json_response['favicon']).to eq "/assets/ci_favicons/#{status.favicon}.ico" expect(json_response['favicon']).to match_asset_path "/assets/ci_favicons/#{status.favicon}.ico"
end end
end end
......
...@@ -658,7 +658,7 @@ describe Projects::MergeRequestsController do ...@@ -658,7 +658,7 @@ describe Projects::MergeRequestsController do
expect(json_response['text']).to eq status.text expect(json_response['text']).to eq status.text
expect(json_response['label']).to eq status.label expect(json_response['label']).to eq status.label
expect(json_response['icon']).to eq status.icon expect(json_response['icon']).to eq status.icon
expect(json_response['favicon']).to eq "/assets/ci_favicons/#{status.favicon}.ico" expect(json_response['favicon']).to match_asset_path "/assets/ci_favicons/#{status.favicon}.ico"
end end
end end
......
...@@ -142,7 +142,7 @@ describe Projects::PipelinesController do ...@@ -142,7 +142,7 @@ describe Projects::PipelinesController do
expect(json_response['text']).to eq status.text expect(json_response['text']).to eq status.text
expect(json_response['label']).to eq status.label expect(json_response['label']).to eq status.label
expect(json_response['icon']).to eq status.icon expect(json_response['icon']).to eq status.icon
expect(json_response['favicon']).to eq "/assets/ci_favicons/#{status.favicon}.ico" expect(json_response['favicon']).to match_asset_path("/assets/ci_favicons/#{status.favicon}.ico")
end end
end end
......
...@@ -17,7 +17,7 @@ describe GroupsHelper do ...@@ -17,7 +17,7 @@ describe GroupsHelper do
it 'gives default avatar_icon when no avatar is present' do it 'gives default avatar_icon when no avatar is present' do
group = create(:group) group = create(:group)
group.save! group.save!
expect(group_icon(group.path)).to match('group_avatar.png') expect(group_icon(group.path)).to match_asset_path('group_avatar.png')
end end
end end
......
...@@ -54,7 +54,7 @@ describe PageLayoutHelper do ...@@ -54,7 +54,7 @@ describe PageLayoutHelper do
describe 'page_image' do describe 'page_image' do
it 'defaults to the GitLab logo' do it 'defaults to the GitLab logo' do
expect(helper.page_image).to end_with 'assets/gitlab_logo.png' expect(helper.page_image).to match_asset_path 'assets/gitlab_logo.png'
end end
%w(project user group).each do |type| %w(project user group).each do |type|
...@@ -70,13 +70,13 @@ describe PageLayoutHelper do ...@@ -70,13 +70,13 @@ describe PageLayoutHelper do
object = double(avatar_url: nil) object = double(avatar_url: nil)
assign(type, object) assign(type, object)
expect(helper.page_image).to end_with 'assets/gitlab_logo.png' expect(helper.page_image).to match_asset_path 'assets/gitlab_logo.png'
end end
end end
context "with no assignments" do context "with no assignments" do
it 'falls back to the default' do it 'falls back to the default' do
expect(helper.page_image).to end_with 'assets/gitlab_logo.png' expect(helper.page_image).to match_asset_path 'assets/gitlab_logo.png'
end end
end end
end end
......
...@@ -84,9 +84,9 @@ describe Gitlab::PathRegex do ...@@ -84,9 +84,9 @@ describe Gitlab::PathRegex do
let(:top_level_words) do let(:top_level_words) do
words = routes_not_starting_in_wildcard.map do |route| words = routes_not_starting_in_wildcard.map do |route|
route.split('/')[1] route.split('/')[1]
end.compact.uniq end.compact
words + ee_top_level_words + files_in_public + Array(API::API.prefix.to_s) (words + ee_top_level_words + files_in_public + Array(API::API.prefix.to_s)).uniq
end end
let(:ee_top_level_words) do let(:ee_top_level_words) do
...@@ -95,10 +95,11 @@ describe Gitlab::PathRegex do ...@@ -95,10 +95,11 @@ describe Gitlab::PathRegex do
let(:files_in_public) do let(:files_in_public) do
git = Gitlab.config.git.bin_path git = Gitlab.config.git.bin_path
`cd #{Rails.root} && #{git} ls-files public` tracked = `cd #{Rails.root} && #{git} ls-files public`
.split("\n") .split("\n")
.map { |entry| entry.gsub('public/', '') } .map { |entry| entry.gsub('public/', '') }
.uniq .uniq
tracked + %w(assets uploads)
end end
# All routes that start with a namespaced path, that have 1 or more # All routes that start with a namespaced path, that have 1 or more
......
...@@ -14,7 +14,7 @@ describe 'Gitlab::Popen' do ...@@ -14,7 +14,7 @@ describe 'Gitlab::Popen' do
end end
it { expect(@status).to be_zero } it { expect(@status).to be_zero }
it { expect(@output).to include('cache') } it { expect(@output).to include('tests') }
end end
context 'non-zero status' do context 'non-zero status' do
......
...@@ -38,7 +38,7 @@ describe BuildSerializer do ...@@ -38,7 +38,7 @@ describe BuildSerializer do
expect(subject[:text]).to eq(status.text) expect(subject[:text]).to eq(status.text)
expect(subject[:label]).to eq(status.label) expect(subject[:label]).to eq(status.label)
expect(subject[:icon]).to eq(status.icon) expect(subject[:icon]).to eq(status.icon)
expect(subject[:favicon]).to eq("/assets/ci_favicons/#{status.favicon}.ico") expect(subject[:favicon]).to match_asset_path("/assets/ci_favicons/#{status.favicon}.ico")
end end
end end
end end
......
...@@ -168,7 +168,7 @@ describe PipelineSerializer do ...@@ -168,7 +168,7 @@ describe PipelineSerializer do
expect(subject[:text]).to eq(status.text) expect(subject[:text]).to eq(status.text)
expect(subject[:label]).to eq(status.label) expect(subject[:label]).to eq(status.label)
expect(subject[:icon]).to eq(status.icon) expect(subject[:icon]).to eq(status.icon)
expect(subject[:favicon]).to eq("/assets/ci_favicons/#{status.favicon}.ico") expect(subject[:favicon]).to match_asset_path("/assets/ci_favicons/#{status.favicon}.ico")
end end
end end
end end
......
...@@ -18,12 +18,12 @@ describe StatusEntity do ...@@ -18,12 +18,12 @@ describe StatusEntity do
it 'contains status details' do it 'contains status details' do
expect(subject).to include :text, :icon, :favicon, :label, :group expect(subject).to include :text, :icon, :favicon, :label, :group
expect(subject).to include :has_details, :details_path expect(subject).to include :has_details, :details_path
expect(subject[:favicon]).to eq('/assets/ci_favicons/favicon_status_success.ico') expect(subject[:favicon]).to match_asset_path('/assets/ci_favicons/favicon_status_success.ico')
end end
it 'contains a dev namespaced favicon if dev env' do it 'contains a dev namespaced favicon if dev env' do
allow(Rails.env).to receive(:development?) { true } allow(Rails.env).to receive(:development?) { true }
expect(entity.as_json[:favicon]).to eq('/assets/ci_favicons/dev/favicon_status_success.ico') expect(entity.as_json[:favicon]).to match_asset_path('/assets/ci_favicons/dev/favicon_status_success.ico')
end end
end end
end end
...@@ -169,6 +169,24 @@ RSpec.configure do |config| ...@@ -169,6 +169,24 @@ RSpec.configure do |config|
end end
end end
# add simpler way to match asset paths containing digest strings
RSpec::Matchers.define :match_asset_path do |expected|
match do |actual|
path = Regexp.escape(expected)
extname = Regexp.escape(File.extname(expected))
digest_regex = Regexp.new(path.sub(extname, "(?:-\\h+)?#{extname}") << '$')
digest_regex =~ actual
end
failure_message do |actual|
"expected that #{actual} would include an asset path for #{expected}"
end
failure_message_when_negated do |actual|
"expected that #{actual} would not include an asset path for #{expected}"
end
end
FactoryGirl::SyntaxRunner.class_eval do FactoryGirl::SyntaxRunner.class_eval do
include RSpec::Mocks::ExampleMethods include RSpec::Mocks::ExampleMethods
end end
......
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