mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 23:58:31 -05:00
5b844f5320
FIX: more robust site customizations Rewrote site customization to use distributed cache and a much cleaner css delivery mechanism
95 lines
3.7 KiB
Ruby
95 lines
3.7 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe SiteCustomization do
|
|
|
|
before do
|
|
SiteCustomization.clear_cache!
|
|
end
|
|
|
|
let :user do
|
|
Fabricate(:user)
|
|
end
|
|
|
|
let :customization_params do
|
|
{name: 'my name', user_id: user.id, header: "my awesome header", stylesheet: "my awesome css", mobile_stylesheet: nil, mobile_header: nil}
|
|
end
|
|
|
|
let :customization do
|
|
SiteCustomization.create!(customization_params)
|
|
end
|
|
|
|
let :customization_with_mobile do
|
|
SiteCustomization.create!(customization_params.merge(mobile_stylesheet: ".mobile {better: true;}", mobile_header: "fancy mobile stuff"))
|
|
end
|
|
|
|
it 'should set default key when creating a new customization' do
|
|
s = SiteCustomization.create!(name: 'my name', user_id: user.id)
|
|
s.key.should_not == nil
|
|
end
|
|
|
|
it 'can enable more than one style at once' do
|
|
c1 = SiteCustomization.create!(name: '2', user_id: user.id, header: 'World',
|
|
enabled: true, mobile_header: 'hi', footer: 'footer',
|
|
stylesheet: '.hello{.world {color: blue;}}')
|
|
|
|
SiteCustomization.create!(name: '1', user_id: user.id, header: 'Hello',
|
|
enabled: true, mobile_footer: 'mfooter',
|
|
mobile_stylesheet: '.hello{margin: 1px;}',
|
|
stylesheet: 'p{width: 1px;}'
|
|
)
|
|
|
|
SiteCustomization.custom_header.should == "Hello\nWorld"
|
|
SiteCustomization.custom_header(nil, :mobile).should == "hi"
|
|
SiteCustomization.custom_footer(nil, :mobile).should == "mfooter"
|
|
SiteCustomization.custom_footer.should == "footer"
|
|
|
|
desktop_css = SiteCustomization.custom_stylesheet
|
|
desktop_css.should =~ Regexp.new("#{SiteCustomization::ENABLED_KEY}.css\\?target=desktop")
|
|
|
|
mobile_css = SiteCustomization.custom_stylesheet(nil, :mobile)
|
|
mobile_css.should =~ Regexp.new("#{SiteCustomization::ENABLED_KEY}.css\\?target=mobile")
|
|
|
|
SiteCustomization.enabled_stylesheet_contents.should =~ /\.hello \.world/
|
|
|
|
# cache expiry
|
|
c1.enabled = false
|
|
c1.save
|
|
|
|
SiteCustomization.custom_stylesheet.should_not == desktop_css
|
|
SiteCustomization.enabled_stylesheet_contents.should_not =~ /\.hello \.world/
|
|
end
|
|
|
|
it 'should be able to look up stylesheets by key' do
|
|
c = SiteCustomization.create!(name: '2', user_id: user.id,
|
|
enabled: true,
|
|
stylesheet: '.hello{.world {color: blue;}}',
|
|
mobile_stylesheet: '.world{.hello{color: black;}}')
|
|
|
|
SiteCustomization.custom_stylesheet(c.key, :mobile).should =~ Regexp.new("#{c.key}.css\\?target=mobile")
|
|
SiteCustomization.custom_stylesheet(c.key).should =~ Regexp.new("#{c.key}.css\\?target=desktop")
|
|
|
|
end
|
|
|
|
|
|
it 'should allow including discourse styles' do
|
|
c = SiteCustomization.create!(user_id: user.id, name: "test", stylesheet: '@import "desktop";', mobile_stylesheet: '@import "mobile";')
|
|
c.stylesheet_baked.should_not =~ /Syntax error/
|
|
c.stylesheet_baked.length.should be > 1000
|
|
c.mobile_stylesheet_baked.should_not =~ /Syntax error/
|
|
c.mobile_stylesheet_baked.length.should be > 1000
|
|
end
|
|
|
|
it 'should provide an awesome error on failure' do
|
|
c = SiteCustomization.create!(user_id: user.id, name: "test", stylesheet: "$black: #000; #a { color: $black; }\n\n\nboom", header: '')
|
|
c.stylesheet_baked.should =~ /Syntax error/
|
|
c.mobile_stylesheet_baked.should_not be_present
|
|
end
|
|
|
|
it 'should provide an awesome error on failure for mobile too' do
|
|
c = SiteCustomization.create!(user_id: user.id, name: "test", stylesheet: '', header: '', mobile_stylesheet: "$black: #000; #a { color: $black; }\n\n\nboom", mobile_header: '')
|
|
c.mobile_stylesheet_baked.should =~ /Syntax error/
|
|
c.stylesheet_baked.should_not be_present
|
|
end
|
|
|
|
|
|
end
|