discourse/spec/controllers/stylesheets_controller_spec.rb
Sam a3e8c3cd7b FEATURE: Native theme support
This feature introduces the concept of themes. Themes are an evolution
of site customizations.

Themes introduce two very big conceptual changes:

- A theme may include other "child themes", children can include grand
children and so on.

- A theme may specify a color scheme

The change does away with the idea of "enabled" color schemes.

It also adds a bunch of big niceties like

- You can source a theme from a git repo

- History for themes is much improved

- You can only have a single enabled theme. Themes can be selected by
    users, if you opt for it.

On a technical level this change comes with a whole bunch of goodies

- All CSS is now compiled using a custom pipeline that uses libsass
    see /lib/stylesheet

- There is a single pipeline for css compilation (in the past we used
    one for customizations and another one for the rest of the app

- The stylesheet pipeline is now divorced of sprockets, there is no
   reliance on sprockets for CSS bundling

- CSS is generated with source maps everywhere (including themes) this
    makes debugging much easier

- Our "live reloader" is smarter and avoid a flash of unstyled content
   we run a file watcher in "puma" in dev so you no longer need to run
   rake autospec to watch for CSS changes
2017-04-12 10:53:49 -04:00

69 lines
1.8 KiB
Ruby

require 'rails_helper'
describe StylesheetsController do
it 'can survive cache miss' do
StylesheetCache.destroy_all
builder = Stylesheet::Manager.new('desktop_rtl', nil)
builder.compile
builder.ensure_digestless_file
digest = StylesheetCache.first.digest
StylesheetCache.destroy_all
# digestless
get :show, name: 'desktop_rtl'
expect(response).to be_success
StylesheetCache.destroy_all
get :show, name: "desktop_rtl_#{digest}"
expect(response).to be_success
cached = StylesheetCache.first
expect(cached.target).to eq 'desktop_rtl'
expect(cached.digest).to eq digest
# tmp folder destruction and cached
`rm #{Stylesheet::Manager.cache_fullpath}/*`
get :show, name: 'desktop_rtl'
expect(response).to be_success
get :show, name: "desktop_rtl_#{digest}"
expect(response).to be_success
# there is an edge case which is ... disk and db cache is nuked, very unlikely to happen
end
it 'can lookup theme specific css' do
scheme = ColorScheme.create_from_base({name: "testing", colors: []})
theme = Theme.create!(name: "test", color_scheme_id: scheme.id, user_id: -1)
builder = Stylesheet::Manager.new(:desktop, theme.key)
builder.compile
`rm #{Stylesheet::Manager.cache_fullpath}/*`
get :show, name: builder.stylesheet_filename.sub(".css", "")
expect(response).to be_success
get :show, name: builder.stylesheet_filename_no_digest.sub(".css", "")
expect(response).to be_success
builder = Stylesheet::Manager.new(:desktop_theme, theme.key)
builder.compile
`rm #{Stylesheet::Manager.cache_fullpath}/*`
get :show, name: builder.stylesheet_filename.sub(".css", "")
expect(response).to be_success
get :show, name: builder.stylesheet_filename_no_digest.sub(".css", "")
expect(response).to be_success
end
end