forked from discourse/discourse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsvg_sprite_controller_spec.rb
162 lines (123 loc) · 4.89 KB
/
svg_sprite_controller_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# frozen_string_literal: true
RSpec.describe SvgSpriteController do
fab!(:user) { Fabricate(:user) }
describe "#show" do
before { SvgSprite.expire_cache }
it "should return bundle when version is current" do
get "/svg-sprite/#{Discourse.current_hostname}/svg--#{SvgSprite.version}.js"
expect(response.status).to eq(200)
theme = Fabricate(:theme)
theme.set_field(target: :settings, name: :yaml, value: "custom_icon: dragon")
theme.save!
get "/svg-sprite/#{Discourse.current_hostname}/svg-#{theme.id}-#{SvgSprite.version(theme.id)}.js"
expect(response.status).to eq(200)
end
it "should redirect to current version" do
random_hash = Digest::SHA1.hexdigest("somerandomstring")
get "/svg-sprite/#{Discourse.current_hostname}/svg--#{random_hash}.js"
expect(response).to redirect_to("/svg-sprite/test.localhost/svg--#{SvgSprite.version}.js")
set_cdn_url "//some-cdn.com/site"
get "/svg-sprite/#{Discourse.current_hostname}/svg--#{random_hash}.js"
expect(response).to redirect_to(
"https://some-cdn.com/site/svg-sprite/test.localhost/svg--#{SvgSprite.version}.js",
)
end
end
describe "#search" do
it "should not work for anons" do
get "/svg-sprite/search/fa-bolt"
expect(response.status).to eq(404)
end
it "should return symbol for FA icon search" do
sign_in(user)
get "/svg-sprite/search/fa-bolt"
expect(response.status).to eq(200)
expect(response.body).to include("bolt")
end
it "should return 404 when looking for non-existent FA icon" do
sign_in(user)
get "/svg-sprite/search/fa-not-a-valid-icon"
expect(response.status).to eq(404)
end
it "should find a custom icon in default theme" do
theme = Fabricate(:theme)
fname = "custom-theme-icon-sprite.svg"
upload = UploadCreator.new(file_from_fixtures(fname), fname, for_theme: true).create_for(-1)
theme.set_field(
target: :common,
name: SvgSprite.theme_sprite_variable_name,
upload_id: upload.id,
type: :theme_upload_var,
)
theme.save!
SiteSetting.default_theme_id = theme.id
sign_in(user)
get "/svg-sprite/search/fa-my-custom-theme-icon"
expect(response.status).to eq(200)
expect(response.body).to include("my-custom-theme-icon")
end
end
describe "#icon_picker_search" do
it "should return 403 for anonymous users" do
get "/svg-sprite/picker-search"
expect(response.status).to eq(403)
end
it "should work with no filter and max out at 200 results" do
sign_in(user)
get "/svg-sprite/picker-search"
expect(response.status).to eq(200)
data = response.parsed_body
expect(data.length).to eq(200)
expect(data[0]["id"]).to eq("ad")
end
it "should filter" do
sign_in(user)
get "/svg-sprite/picker-search", params: { filter: "500px" }
expect(response.status).to eq(200)
data = response.parsed_body
expect(data.length).to eq(1)
expect(data[0]["id"]).to eq("fab-500px")
end
it "should display only available" do
sign_in(user)
get "/svg-sprite/picker-search"
data = response.parsed_body
beer_icon = response.parsed_body.find { |i| i["id"] == "beer" }
expect(beer_icon).to be_present
get "/svg-sprite/picker-search", params: { only_available: "true" }
data = response.parsed_body
beer_icon = response.parsed_body.find { |i| i["id"] == "beer" }
expect(beer_icon).to be nil
expect(data.length).to eq(200)
end
end
describe "#svg_icon" do
it "requires .svg extension" do
get "/svg-sprite/#{Discourse.current_hostname}/icon/bolt"
expect(response.status).to eq(404)
end
it "returns SVG given an icon name" do
get "/svg-sprite/#{Discourse.current_hostname}/icon/bolt.svg"
expect(response.status).to eq(200)
expect(response.body).to include("bolt")
end
it "returns SVG given an icon name and a color" do
get "/svg-sprite/#{Discourse.current_hostname}/icon/CC0000/fab-github.svg"
expect(response.status).to eq(200)
expect(response.body).to include("fab-github")
expect(response.body).to include('fill="#CC0000"')
expect(response.headers["Cache-Control"]).to eq("max-age=86400, public, immutable")
end
it "returns SVG given an icon name and a 3-character HEX color" do
get "/svg-sprite/#{Discourse.current_hostname}/icon/C00/fab-github.svg"
expect(response.status).to eq(200)
expect(response.body).to include("fab-github")
expect(response.body).to include('fill="#CC0000"')
expect(response.headers["Cache-Control"]).to eq("max-age=86400, public, immutable")
end
it "ignores non-HEX colors" do
get "/svg-sprite/#{Discourse.current_hostname}/icon/orange/fab-github.svg"
expect(response.status).to eq(404)
end
end
end