discourse/spec/components/svg_sprite/svg_sprite_spec.rb

110 lines
3.5 KiB
Ruby
Raw Normal View History

Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
require 'rails_helper'
describe SvgSprite do
before do
SvgSprite.rebuild_cache
end
it 'can generate a bundle' do
bundle = SvgSprite.bundle
expect(bundle).to match(/heart/)
expect(bundle).to match(/angle-double-down/)
end
it 'can search for a specific FA icon' do
expect(SvgSprite.search("fa-heart")).to match(/heart/)
expect(SvgSprite.search("poo-storm")).to match(/poo-storm/)
expect(SvgSprite.search("this-is-not-an-icon")).to eq(false)
end
it 'can get a consistent version string' do
version1 = SvgSprite.version
version2 = SvgSprite.version
expect(version1).to eq(version2)
end
it 'version string changes' do
version1 = SvgSprite.version
Fabricate(:badge, name: 'Custom Icon Badge', icon: 'fa-gamepad')
version2 = SvgSprite.version
expect(version1).not_to eq(version2)
end
it 'strips whitespace when processing icons' do
Fabricate(:badge, name: 'Custom Icon Badge', icon: ' fab fa-facebook-messenger ')
expect(SvgSprite.all_icons).to include("fab-facebook-messenger")
expect(SvgSprite.all_icons).not_to include(" fab-facebook-messenger ")
end
it 'includes Font Awesome 4.7 icons from badges' do
Fabricate(:badge, name: 'Custom Icon Badge', icon: 'fa-gamepad')
expect(SvgSprite.all_icons).to include("gamepad")
end
it 'includes Font Awesome 5 icons from badges' do
Fabricate(:badge, name: 'Custom Icon Badge', icon: 'far fa-building')
expect(SvgSprite.all_icons).to include("far-building")
end
it 'includes icons defined in theme settings' do
theme = Fabricate(:theme)
theme.set_field(target: :settings, name: :yaml, value: "custom_icon: magic")
theme.save!
# TODO: add test for default settings values
theme.update_setting(:custom_icon, "gas-pump")
expect(SvgSprite.all_icons).to include("gas-pump")
theme.update_setting(:custom_icon, "gamepad")
expect(SvgSprite.all_icons).to include("gamepad")
expect(SvgSprite.all_icons).not_to include("gas-pump")
# FA5 syntax
theme.update_setting(:custom_icon, "fab fa-bandcamp")
expect(SvgSprite.all_icons).to include("fab-bandcamp")
# Internal Discourse syntax + multiple icons
theme.update_setting(:custom_icon, "fab-android|dragon")
expect(SvgSprite.all_icons).to include("fab-android")
expect(SvgSprite.all_icons).to include("dragon")
end
it 'includes icons from SiteSettings' do
SiteSetting.svg_icon_subset = "blender|drafting-compass|fab-bandcamp"
all_icons = SvgSprite.all_icons
expect(all_icons).to include("blender")
expect(all_icons).to include("drafting-compass")
expect(all_icons).to include("fab-bandcamp")
SiteSetting.svg_icon_subset = nil
expect(SvgSprite.all_icons).not_to include("drafting-compass")
2018-11-30 08:11:32 +08:00
# does not fail on non-string setting
SiteSetting.svg_icon_subset = false
expect(SvgSprite.all_icons).to be_truthy
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
end
it 'includes icons from plugin registry' do
DiscoursePluginRegistry.register_svg_icon "blender"
DiscoursePluginRegistry.register_svg_icon "fab fa-bandcamp"
expect(SvgSprite.all_icons).to include("blender")
expect(SvgSprite.all_icons).to include("fab-bandcamp")
end
it "includes Font Awesome 4.7 icons as group flair" do
group = Fabricate(:group, flair_url: "fa-air-freshener")
expect(SvgSprite.bundle).to match(/air-freshener/)
end
it "includes Font Awesome 5 icons as group flair" do
group = Fabricate(:group, flair_url: "far fa-building")
expect(SvgSprite.bundle).to match(/building/)
end
end