wovnrb 3.5.0 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.en.md +30 -13
- data/build.sh +7 -0
- data/docker/nginx/Dockerfile +18 -0
- data/docker/nginx/README.md +13 -0
- data/docker/nginx/build.sh +8 -0
- data/docker/nginx/scripts/configure_sshd.sh +25 -0
- data/docker/nginx/scripts/startup.sh +10 -0
- data/docker/nginx/wovnrb.conf +19 -0
- data/docker/rails/Dockerfile +9 -0
- data/docker/rails/Dockerfile.ECS +17 -0
- data/docker/rails/TestSite/Gemfile +0 -2
- data/docker/rails/TestSite/app/controllers/custom_response_controller.rb +1 -1
- data/docker/rails/TestSite/config/environments/development.rb +2 -0
- data/docker/rails/TestSite/config/environments/production.rb +2 -0
- data/docker/rails/TestSite/config/environments/test.rb +2 -0
- data/docker/rails/TestSite/public/index.html +1 -1
- data/docker/rails/TestSite/start.sh +2 -11
- data/docker/rails/TestSite/start_rails.sh +9 -0
- data/docker/rails/TestSite/yarn.lock +3 -3
- data/docker/scripts/jenkins/build.sh +45 -0
- data/docker/scripts/jenkins/tag_and_push_image.sh +30 -0
- data/docker/scripts/jenkins/taskdef.json +104 -0
- data/docker/scripts/jenkins/taskdef.json.bak +99 -0
- data/lib/wovnrb/api_translator.rb +6 -1
- data/lib/wovnrb/headers.rb +19 -2
- data/lib/wovnrb/services/html_converter.rb +17 -1
- data/lib/wovnrb/services/url.rb +136 -0
- data/lib/wovnrb/store.rb +8 -2
- data/lib/wovnrb/url_language_switcher.rb +124 -0
- data/lib/wovnrb/version.rb +1 -1
- data/lib/wovnrb.rb +3 -1
- data/test/lib/api_translator_test.rb +44 -0
- data/test/lib/services/html_converter_test.rb +210 -37
- data/test/lib/services/url_test.rb +308 -0
- data/test/lib/url_language_switcher_test.rb +798 -0
- data/test/lib/wovnrb_test.rb +2 -1
- data/test/test_helper.rb +4 -1
- metadata +22 -3
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Wovnrb
|
4
4
|
class HtmlConverterTest < WovnMiniTest
|
5
|
-
|
5
|
+
test 'build API compatible html' do
|
6
6
|
converter = prepare_html_converter('<html><body><a class="test">hello</a></body></html>', supported_langs: %w[en vi])
|
7
7
|
converted_html, = converter.build_api_compatible_html
|
8
8
|
|
@@ -10,7 +10,7 @@ module Wovnrb
|
|
10
10
|
assert_equal(expected_html, converted_html)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
test 'build API compatible html - with custom lang param name' do
|
14
14
|
settings = {
|
15
15
|
supported_langs: %w[en vi],
|
16
16
|
url_lang_pattern: 'query',
|
@@ -23,7 +23,7 @@ module Wovnrb
|
|
23
23
|
assert_equal(expected_html, converted_html)
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
test 'build API compatible html - excessively large HTML' do
|
27
27
|
long_string = 'a' * 60_000
|
28
28
|
converter = prepare_html_converter("<html><body><p>#{long_string}</p></body></html>", supported_langs: %w[en vi])
|
29
29
|
converted_html, = converter.build_api_compatible_html
|
@@ -32,7 +32,7 @@ module Wovnrb
|
|
32
32
|
assert_equal(expected_html, converted_html)
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
test 'build API compatible html - ignored content should not be sent' do
|
36
36
|
html = [
|
37
37
|
'<html><body>',
|
38
38
|
'<p>Hello <span wovn-ignore>WOVN</span><p>',
|
@@ -49,7 +49,7 @@ module Wovnrb
|
|
49
49
|
assert_equal(expected_convert_html, converted_html)
|
50
50
|
end
|
51
51
|
|
52
|
-
|
52
|
+
test 'build API compatible html - do not send html form' do
|
53
53
|
html = [
|
54
54
|
'<html><body>',
|
55
55
|
'<form action="/test" method="POST">',
|
@@ -66,7 +66,7 @@ module Wovnrb
|
|
66
66
|
assert_equal(expected_convert_html, converted_html)
|
67
67
|
end
|
68
68
|
|
69
|
-
|
69
|
+
test 'build API compatible html - do not send hidden form input' do
|
70
70
|
html = [
|
71
71
|
'<html><body>',
|
72
72
|
'<input id="user-id" type="hidden" value="secret-id">',
|
@@ -91,7 +91,7 @@ module Wovnrb
|
|
91
91
|
assert_equal(expected_convert_html, converted_html)
|
92
92
|
end
|
93
93
|
|
94
|
-
|
94
|
+
test 'Transform HTML' do
|
95
95
|
converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: %w[en vi])
|
96
96
|
translated_html = converter.build
|
97
97
|
|
@@ -99,7 +99,7 @@ module Wovnrb
|
|
99
99
|
assert_equal(expected_html, translated_html)
|
100
100
|
end
|
101
101
|
|
102
|
-
|
102
|
+
test 'Transform HTML - with empty supported langs' do
|
103
103
|
converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: [])
|
104
104
|
translated_html = converter.build
|
105
105
|
|
@@ -107,7 +107,7 @@ module Wovnrb
|
|
107
107
|
assert_equal(expected_html, translated_html)
|
108
108
|
end
|
109
109
|
|
110
|
-
|
110
|
+
test 'Transform HTML - with head tag' do
|
111
111
|
converter = prepare_html_converter('<html><head><title>TITLE</title></head><body><a>hello</a></body></html>', supported_langs: %w[en vi])
|
112
112
|
translated_html = converter.build
|
113
113
|
|
@@ -115,7 +115,7 @@ module Wovnrb
|
|
115
115
|
assert_equal(expected_html, translated_html)
|
116
116
|
end
|
117
117
|
|
118
|
-
|
118
|
+
test 'Transform HTML - without body' do
|
119
119
|
converter = prepare_html_converter('<html>hello<a>world</a></html>', supported_langs: [])
|
120
120
|
translated_html = converter.build
|
121
121
|
|
@@ -123,7 +123,7 @@ module Wovnrb
|
|
123
123
|
assert_equal(expected_html, translated_html)
|
124
124
|
end
|
125
125
|
|
126
|
-
|
126
|
+
test 'Transform HTML - default lang - with query pattern and supported langs defined' do
|
127
127
|
dom = get_dom('<html>hello<a>world</a></html>')
|
128
128
|
settings = {
|
129
129
|
'default_lang' => 'en',
|
@@ -131,14 +131,101 @@ module Wovnrb
|
|
131
131
|
'url_pattern' => 'query'
|
132
132
|
}
|
133
133
|
store, headers = store_headers_factory(settings)
|
134
|
-
|
134
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
135
|
+
converter = HtmlConverter.new(dom, store, headers, url_lang_switcher)
|
135
136
|
translated_html = converter.build
|
136
137
|
|
137
138
|
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body>hello<a>world</a></body></html>"
|
138
139
|
assert_equal(expected_html, translated_html)
|
139
140
|
end
|
140
141
|
|
141
|
-
|
142
|
+
test 'Transform HTML - canonical tag - target lang - should translate' do
|
143
|
+
dom = get_dom('<html><head><link rel="canonical" href="http://my-site.com/" /></head><body></body></html>')
|
144
|
+
settings = {
|
145
|
+
'default_lang' => 'en',
|
146
|
+
'supported_langs' => %w[en ja vi],
|
147
|
+
'url_pattern' => 'path',
|
148
|
+
'translate_canonical_tag' => true
|
149
|
+
}
|
150
|
+
store, headers = store_headers_factory(settings, 'http://my-site.com/vi/')
|
151
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
152
|
+
converter = HtmlConverter.new(dom, store, headers, url_lang_switcher)
|
153
|
+
translated_html = converter.build
|
154
|
+
|
155
|
+
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=vi&defaultLang=en&urlPattern=path&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"canonical\" href=\"http://my-site.com/vi/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body></body></html>"
|
156
|
+
assert_equal(expected_html, translated_html)
|
157
|
+
end
|
158
|
+
|
159
|
+
test 'Transform HTML - canonical tag - default lang - path pattern - no need to translate' do
|
160
|
+
dom = get_dom('<html><head><link rel="canonical" href="http://my-site.com/" /></head><body></body></html>')
|
161
|
+
settings = {
|
162
|
+
'default_lang' => 'en',
|
163
|
+
'supported_langs' => %w[en ja vi],
|
164
|
+
'url_pattern' => 'path',
|
165
|
+
'translate_canonical_tag' => true
|
166
|
+
}
|
167
|
+
store, headers = store_headers_factory(settings, 'http://my-site.com/')
|
168
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
169
|
+
converter = HtmlConverter.new(dom, store, headers, url_lang_switcher)
|
170
|
+
translated_html = converter.build
|
171
|
+
|
172
|
+
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=path&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"canonical\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body></body></html>"
|
173
|
+
assert_equal(expected_html, translated_html)
|
174
|
+
end
|
175
|
+
|
176
|
+
test 'Transform HTML - canonical tag - default lang - query pattern - no need to translate' do
|
177
|
+
dom = get_dom('<html><head><link rel="canonical" href="http://my-site.com/" /></head><body></body></html>')
|
178
|
+
settings = {
|
179
|
+
'default_lang' => 'en',
|
180
|
+
'supported_langs' => %w[en ja vi],
|
181
|
+
'url_pattern' => 'query',
|
182
|
+
'translate_canonical_tag' => true
|
183
|
+
}
|
184
|
+
store, headers = store_headers_factory(settings, 'http://my-site.com/')
|
185
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
186
|
+
converter = HtmlConverter.new(dom, store, headers, url_lang_switcher)
|
187
|
+
translated_html = converter.build
|
188
|
+
|
189
|
+
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"canonical\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body></body></html>"
|
190
|
+
assert_equal(expected_html, translated_html)
|
191
|
+
end
|
192
|
+
|
193
|
+
test 'Transform HTML - canonical tag - default lang - has default lang alias - should use alias' do
|
194
|
+
dom = get_dom('<html><head><link rel="canonical" href="http://my-site.com/" /></head><body></body></html>')
|
195
|
+
settings = {
|
196
|
+
'default_lang' => 'en',
|
197
|
+
'supported_langs' => %w[en ja vi],
|
198
|
+
'url_pattern' => 'query',
|
199
|
+
'translate_canonical_tag' => true,
|
200
|
+
'custom_lang_aliases' => { 'en' => 'english' }
|
201
|
+
}
|
202
|
+
store, headers = store_headers_factory(settings, 'http://my-site.com/')
|
203
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
204
|
+
converter = HtmlConverter.new(dom, store, headers, url_lang_switcher)
|
205
|
+
translated_html = converter.build
|
206
|
+
|
207
|
+
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={"en":"english"}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"canonical\" href=\"http://my-site.com/?wovn=english\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body></body></html>"
|
208
|
+
assert_equal(expected_html, translated_html)
|
209
|
+
end
|
210
|
+
|
211
|
+
test 'Transform HTML - canonical tag - disabled - do not translate' do
|
212
|
+
dom = get_dom('<html><head><link rel="canonical" href="http://my-site.com/" /></head><body></body></html>')
|
213
|
+
settings = {
|
214
|
+
'default_lang' => 'en',
|
215
|
+
'supported_langs' => %w[en ja vi],
|
216
|
+
'url_pattern' => 'path',
|
217
|
+
'translate_canonical_tag' => false
|
218
|
+
}
|
219
|
+
store, headers = store_headers_factory(settings, 'http://my-site.com/vi/')
|
220
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
221
|
+
converter = HtmlConverter.new(dom, store, headers, url_lang_switcher)
|
222
|
+
translated_html = converter.build
|
223
|
+
|
224
|
+
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=vi&defaultLang=en&urlPattern=path&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"canonical\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body></body></html>"
|
225
|
+
assert_equal(expected_html, translated_html)
|
226
|
+
end
|
227
|
+
|
228
|
+
test 'Transform HTML - default lang - with path pattern and supported langs defined' do
|
142
229
|
dom = get_dom('<html>hello<a>world</a></html>')
|
143
230
|
settings = {
|
144
231
|
'default_lang' => 'en',
|
@@ -146,14 +233,15 @@ module Wovnrb
|
|
146
233
|
'url_pattern' => 'path'
|
147
234
|
}
|
148
235
|
store, headers = store_headers_factory(settings)
|
149
|
-
|
236
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
237
|
+
converter = HtmlConverter.new(dom, store, headers, url_lang_switcher)
|
150
238
|
translated_html = converter.build
|
151
239
|
|
152
240
|
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=path&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body>hello<a>world</a></body></html>"
|
153
241
|
assert_equal(expected_html, translated_html)
|
154
242
|
end
|
155
243
|
|
156
|
-
|
244
|
+
test 'replace_snippet' do
|
157
245
|
converter = prepare_html_converter('<html><head>
|
158
246
|
<script src="/a"></script>
|
159
247
|
<script src="//j.wovn.io/1" async="true">
|
@@ -161,21 +249,46 @@ module Wovnrb
|
|
161
249
|
<script src="https//cdn.wovn.io/" data-wovnio="key=2wpv0n async></script>
|
162
250
|
<script src="https://wovn.global.ssl.fastly.net/widget/abcdef></script>
|
163
251
|
</head></html>')
|
164
|
-
converter.
|
165
|
-
|
166
|
-
|
167
|
-
assert_equal(
|
252
|
+
translated_html = converter.build
|
253
|
+
dom = Helpers::NokogumboHelper.parse_html(translated_html)
|
254
|
+
scripts = dom.css('script')
|
255
|
+
assert_equal(2, scripts.length)
|
256
|
+
expected_wovn_script = "<script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script>"
|
257
|
+
assert_equal(expected_wovn_script, scripts.first.to_html)
|
168
258
|
end
|
169
259
|
|
170
|
-
|
260
|
+
test 'replace_hreflangs' do
|
171
261
|
converter = prepare_html_converter('<html><head><link rel="alternate" hreflang="en" href="https://wovn.io/en/"></head></html>')
|
172
|
-
converter.
|
173
|
-
|
174
|
-
|
175
|
-
assert_equal(
|
262
|
+
translated_html = converter.build
|
263
|
+
dom = Helpers::NokogumboHelper.parse_html(translated_html)
|
264
|
+
href_langs = dom.css('link[rel="alternate"]')
|
265
|
+
assert_equal(4, href_langs.length)
|
266
|
+
expected_href_langs = {
|
267
|
+
'en' =>
|
268
|
+
{
|
269
|
+
'href' => 'http://my-site.com/'
|
270
|
+
},
|
271
|
+
'fr' =>
|
272
|
+
{
|
273
|
+
'href' => 'http://my-site.com/?wovn=fr'
|
274
|
+
},
|
275
|
+
'ja' =>
|
276
|
+
{
|
277
|
+
'href' => 'http://my-site.com/?wovn=ja'
|
278
|
+
},
|
279
|
+
'vi' =>
|
280
|
+
{
|
281
|
+
'href' => 'http://my-site.com/?wovn=vi'
|
282
|
+
}
|
283
|
+
}
|
284
|
+
href_langs.each do |node|
|
285
|
+
assertions = expected_href_langs[node['hreflang']]
|
286
|
+
assert_not_nil(assertions)
|
287
|
+
assert_equal(assertions['href'], node['href'])
|
288
|
+
end
|
176
289
|
end
|
177
290
|
|
178
|
-
|
291
|
+
test 'inject_lang_html_tag - with no lang in HTML tag - should inject' do
|
179
292
|
settings = default_store_settings
|
180
293
|
store = Wovnrb::Store.instance
|
181
294
|
store.update_settings(settings)
|
@@ -184,13 +297,14 @@ module Wovnrb
|
|
184
297
|
Wovnrb.get_env('url' => 'http://my-site.com/'),
|
185
298
|
Wovnrb.get_settings(settings)
|
186
299
|
)
|
187
|
-
|
188
|
-
converter.
|
189
|
-
|
190
|
-
|
300
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
301
|
+
converter = HtmlConverter.new(get_dom('<html><body>hello</body></html>'), store, headers, url_lang_switcher)
|
302
|
+
translated_html = converter.build
|
303
|
+
dom = Helpers::NokogumboHelper.parse_html(translated_html)
|
304
|
+
assert_equal('en', dom.at_css('html')['lang'])
|
191
305
|
end
|
192
306
|
|
193
|
-
|
307
|
+
test 'inject_lang_html_tag - with lang in HTML tag - do not override' do
|
194
308
|
settings = default_store_settings
|
195
309
|
store = Wovnrb::Store.instance
|
196
310
|
store.update_settings(settings)
|
@@ -199,26 +313,85 @@ module Wovnrb
|
|
199
313
|
Wovnrb.get_env('url' => 'http://my-site.com/'),
|
200
314
|
Wovnrb.get_settings(settings)
|
201
315
|
)
|
202
|
-
|
203
|
-
converter.
|
204
|
-
|
205
|
-
|
316
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
317
|
+
converter = HtmlConverter.new(get_dom('<html lang="th"><body>hello</body></html>'), store, headers, url_lang_switcher)
|
318
|
+
translated_html = converter.build
|
319
|
+
dom = Helpers::NokogumboHelper.parse_html(translated_html)
|
320
|
+
assert_equal('th', dom.at_css('html')['lang'])
|
321
|
+
end
|
322
|
+
|
323
|
+
test 'translate_canonical_tag' do
|
324
|
+
settings = default_store_settings
|
325
|
+
store = Wovnrb::Store.instance
|
326
|
+
store.update_settings(settings)
|
327
|
+
|
328
|
+
headers = Wovnrb::Headers.new(
|
329
|
+
Wovnrb.get_env('url' => 'http://my-site.com/?wovn=fr'),
|
330
|
+
store.settings
|
331
|
+
)
|
332
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
333
|
+
converter = HtmlConverter.new(get_dom('<html lang="th"><head><link rel="canonical" href="http://my-site.com" /></head><body>hello</body></html>'), store, headers, url_lang_switcher)
|
334
|
+
translated_html = converter.build
|
335
|
+
dom = Helpers::NokogumboHelper.parse_html(translated_html)
|
336
|
+
canonical_tag = dom.at_css('link[rel="canonical"]')
|
337
|
+
assert_not_nil(canonical_tag)
|
338
|
+
assert_equal('http://my-site.com?wovn=fr', canonical_tag['href'])
|
339
|
+
end
|
340
|
+
|
341
|
+
test 'translate_canonical_tag - path pattern' do
|
342
|
+
settings = default_store_settings
|
343
|
+
settings['url_pattern'] = 'path'
|
344
|
+
store = Wovnrb::Store.instance
|
345
|
+
store.update_settings(settings)
|
346
|
+
|
347
|
+
headers = Wovnrb::Headers.new(
|
348
|
+
Wovnrb.get_env('url' => 'http://my-site.com/fr/'),
|
349
|
+
store.settings
|
350
|
+
)
|
351
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
352
|
+
converter = HtmlConverter.new(get_dom('<html lang="th"><head><link rel="canonical" href="http://my-site.com/" /></head><body>hello</body></html>'), store, headers, url_lang_switcher)
|
353
|
+
translated_html = converter.build
|
354
|
+
dom = Helpers::NokogumboHelper.parse_html(translated_html)
|
355
|
+
canonical_tag = dom.at_css('link[rel="canonical"]')
|
356
|
+
assert_not_nil(canonical_tag)
|
357
|
+
assert_equal('http://my-site.com/fr/', canonical_tag['href'])
|
358
|
+
end
|
359
|
+
|
360
|
+
test 'translate_canonical_tag - canonical tag is already translated' do
|
361
|
+
# NOTE: this behavior is not correct, but it is the same as html-swapper
|
362
|
+
settings = default_store_settings
|
363
|
+
settings['url_pattern'] = 'path'
|
364
|
+
store = Wovnrb::Store.instance
|
365
|
+
store.update_settings(settings)
|
366
|
+
|
367
|
+
headers = Wovnrb::Headers.new(
|
368
|
+
Wovnrb.get_env('url' => 'http://my-site.com/fr/'),
|
369
|
+
store.settings
|
370
|
+
)
|
371
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
372
|
+
converter = HtmlConverter.new(get_dom('<html lang="th"><head><link rel="canonical" href="http://my-site.com/fr/" /></head><body>hello</body></html>'), store, headers, url_lang_switcher)
|
373
|
+
translated_html = converter.build
|
374
|
+
dom = Helpers::NokogumboHelper.parse_html(translated_html)
|
375
|
+
canonical_tag = dom.at_css('link[rel="canonical"]')
|
376
|
+
assert_not_nil(canonical_tag)
|
377
|
+
assert_equal('http://my-site.com/fr/fr/', canonical_tag['href'])
|
206
378
|
end
|
207
379
|
|
208
380
|
private
|
209
381
|
|
210
382
|
def prepare_html_converter(input_html, store_options = {})
|
211
383
|
store, headers = store_headers_factory(store_options)
|
212
|
-
|
384
|
+
url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
|
385
|
+
HtmlConverter.new(get_dom(input_html), store, headers, url_lang_switcher)
|
213
386
|
end
|
214
387
|
|
215
|
-
def store_headers_factory(setting_opts = {})
|
388
|
+
def store_headers_factory(setting_opts = {}, url = 'http://my-site.com')
|
216
389
|
settings = default_store_settings.merge(setting_opts)
|
217
390
|
store = Wovnrb::Store.instance
|
218
391
|
store.update_settings(settings)
|
219
392
|
|
220
393
|
headers = Wovnrb::Headers.new(
|
221
|
-
Wovnrb.get_env('url' =>
|
394
|
+
Wovnrb.get_env('url' => url),
|
222
395
|
store.settings
|
223
396
|
)
|
224
397
|
|