wovnrb 3.6.0 → 3.7.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -59,270 +59,5 @@ module Wovnrb
59
59
  def test_get_code_with_nil
60
60
  assert_nil(Wovnrb::Lang.get_code(nil))
61
61
  end
62
-
63
- def test_add_lang_code
64
- lang = Lang.new('zh-cht')
65
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
66
- assert_equal('http://www.facebook.com', lang.add_lang_code('http://www.facebook.com', 'subdomain', h))
67
- end
68
-
69
- def test_add_lang_code_relative_slash_href_url_with_path
70
- lang = Lang.new('fr')
71
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.wovn.io/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
72
- assert_equal('http://fr.wovn.io/topics/50', lang.add_lang_code('/topics/50', 'subdomain', h))
73
- end
74
-
75
- def test_add_lang_code_relative_dot_href_url_with_path
76
- lang = Lang.new('fr')
77
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.wovn.io/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
78
- assert_equal('http://fr.wovn.io/topics/44/topics/50', lang.add_lang_code('./topics/50', 'subdomain', h))
79
- end
80
-
81
- def test_add_lang_code_relative_two_dots_href_url_with_path
82
- lang = Lang.new('fr')
83
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.wovn.io/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
84
- assert_equal('http://fr.wovn.io/topics/50', lang.add_lang_code('../topics/50', 'subdomain', h))
85
- end
86
-
87
- def test_add_lang_code_trad_chinese
88
- lang = Lang.new('zh-cht')
89
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
90
- assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('http://wovn.io/topics/31', 'subdomain', h))
91
- end
92
-
93
- def test_add_lang_code_trad_chinese2
94
- lang = Lang.new('zh-cht')
95
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://zh-cht.wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
96
- assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('/topics/31', 'subdomain', h))
97
- end
98
-
99
- def test_add_lang_code_trad_chinese_lang_in_link_already
100
- lang = Lang.new('zh-cht')
101
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://zh-cht.wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
102
- assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('http://zh-cht.wovn.io/topics/31', 'subdomain', h))
103
- end
104
-
105
- def test_add_lang_code_no_protocol
106
- lang = Lang.new('zh-cht')
107
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'https://zh-cht.google.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
108
- assert_equal('//zh-cht.google.com', lang.add_lang_code('//google.com', 'subdomain', h))
109
- end
110
-
111
- def test_add_lang_code_no_protocol2
112
- lang = Lang.new('zh-cht')
113
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'https://zh-cht.wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
114
- assert_equal('//google.com', lang.add_lang_code('//google.com', 'subdomain', h))
115
- end
116
-
117
- def test_add_lang_code_invalid_url
118
- lang = Lang.new('zh-cht')
119
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
120
- assert_equal('http://www.facebook.com/sharer.php?u=http://wovn.io/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!', lang.add_lang_code('http://www.facebook.com/sharer.php?u=http://wovn.io/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!', 'subdomain', h))
121
- end
122
-
123
- def test_add_lang_code_path_only_with_slash
124
- lang = Lang.new('zh-cht')
125
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
126
- assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('/topics/31', 'subdomain', h))
127
- end
128
-
129
- def test_add_lang_code_path_only_no_slash
130
- lang = Lang.new('zh-cht')
131
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
132
- assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('topics/31', 'subdomain', h))
133
- end
134
-
135
- def test_add_lang_code_path_explicit_page_no_slash
136
- lang = Lang.new('zh-cht')
137
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
138
- assert_equal('http://zh-cht.wovn.io/topics/31.html', lang.add_lang_code('topics/31.html', 'subdomain', h))
139
- end
140
-
141
- def test_add_lang_code_path_explicit_page_with_slash
142
- lang = Lang.new('zh-cht')
143
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
144
- assert_equal('http://zh-cht.wovn.io/topics/31.html', lang.add_lang_code('/topics/31.html', 'subdomain', h))
145
- end
146
-
147
- def test_add_lang_code_no_protocol_with_path_explicit_page
148
- lang = Lang.new('zh-cht')
149
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
150
- assert_equal('//www.google.com/topics/31.php', lang.add_lang_code('//www.google.com/topics/31.php', 'subdomain', h))
151
- end
152
-
153
- def test_add_lang_code_protocol_with_path_explicit_page
154
- lang = Lang.new('zh-cht')
155
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
156
- assert_equal('http://www.google.com/topics/31.php', lang.add_lang_code('http://www.google.com/topics/31.php', 'subdomain', h))
157
- end
158
-
159
- def test_add_lang_code_relative_path_double_period
160
- lang = Lang.new('zh-cht')
161
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
162
- assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('../topics/31', 'subdomain', h))
163
- end
164
-
165
- def test_add_lang_code_relative_path_single_period
166
- lang = Lang.new('zh-cht')
167
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
168
- assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('./topics/31', 'subdomain', h))
169
- end
170
-
171
- def test_add_lang_code_empty_href
172
- lang = Lang.new('zh-cht')
173
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
174
- assert_equal('', lang.add_lang_code('', 'subdomain', h))
175
- end
176
-
177
- def test_add_lang_code_hash_href
178
- lang = Lang.new('zh-cht')
179
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
180
- assert_equal('#', lang.add_lang_code('#', 'subdomain', h))
181
- end
182
-
183
- def test_add_lang_code_nil_href
184
- lang = Lang.new('en')
185
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings)
186
- assert_nil(lang.add_lang_code(nil, 'path', h))
187
- end
188
-
189
- def test_add_lang_code_absolute_different_host
190
- lang = Lang.new('fr')
191
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
192
- assert_equal('http://yahoo.co.jp', lang.add_lang_code('http://yahoo.co.jp', 'path', h))
193
- end
194
-
195
- def test_add_lang_code_absolute_subdomain_no_subdomain
196
- lang = Lang.new('fr')
197
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
198
- assert_equal('http://fr.google.com', lang.add_lang_code('http://google.com', 'subdomain', h))
199
- end
200
-
201
- def test_add_lang_code_absolute_subdomain_with_subdomain
202
- lang = Lang.new('fr')
203
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://home.google.com'), Wovnrb.get_settings)
204
- assert_equal('http://fr.home.google.com', lang.add_lang_code('http://home.google.com', 'subdomain', headers))
205
- end
206
-
207
- def test_add_lang_code_with_query_and_lang_param_name
208
- Store.instance.update_settings('url_pattern_name' => 'query', 'lang_param_name' => 'lang')
209
-
210
- sut = Lang.new('fr')
211
- headers = Wovnrb::Headers.new(
212
- Wovnrb.get_env('url' => 'http://google.com'),
213
- Store.instance.settings
214
- )
215
-
216
- assert_equal('http://google.com?hey=yo&lang=fr', sut.add_lang_code('http://google.com?hey=yo', 'query', headers))
217
- end
218
-
219
- def test_add_lang_code_absolute_query_no_query
220
- lang = Lang.new('fr')
221
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
222
- assert_equal('http://google.com?wovn=fr', lang.add_lang_code('http://google.com', 'query', headers))
223
- end
224
-
225
- def test_add_lang_code_absolute_query_with_query
226
- lang = Lang.new('fr')
227
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
228
- assert_equal('http://google.com?hey=yo&wovn=fr', lang.add_lang_code('http://google.com?hey=yo', 'query', headers))
229
- end
230
-
231
- def test_add_lang_code_absolute_query_with_hash
232
- lang = Lang.new('fr')
233
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
234
- assert_equal('http://google.com?wovn=fr#test', lang.add_lang_code('http://google.com#test', 'query', headers))
235
- end
236
-
237
- def test_add_lang_code_absolute_path_no_pathname
238
- lang = Lang.new('fr')
239
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
240
- assert_equal('http://google.com/fr/', lang.add_lang_code('http://google.com', 'path', headers))
241
- end
242
-
243
- def test_add_lang_code_absolute_path_with_pathname
244
- lang = Lang.new('fr')
245
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
246
- assert_equal('http://google.com/fr/index.html', lang.add_lang_code('http://google.com/index.html', 'path', headers))
247
- end
248
-
249
- def test_add_lang_code_absolute_path_with_long_pathname
250
- lang = Lang.new('fr')
251
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
252
- assert_equal('http://google.com/fr/hello/long/path/index.html', lang.add_lang_code('http://google.com/hello/long/path/index.html', 'path', headers))
253
- end
254
-
255
- def test_add_lang_code_relative_subdomain_leading_slash
256
- lang = Lang.new('fr')
257
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
258
- assert_equal('http://fr.google.com/', lang.add_lang_code('/', 'subdomain', headers))
259
- end
260
-
261
- def test_add_lang_code_relative_subdomain_leading_slash_filename
262
- lang = Lang.new('fr')
263
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
264
- assert_equal('http://fr.google.com/index.html', lang.add_lang_code('/index.html', 'subdomain', headers))
265
- end
266
-
267
- def test_add_lang_code_relative_subdomain_no_leading_slash_filename
268
- lang = Lang.new('fr')
269
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
270
- assert_equal('http://fr.google.com/index.html', lang.add_lang_code('index.html', 'subdomain', headers))
271
- end
272
-
273
- def test_add_lang_code_relative_query_with_no_query
274
- lang = Lang.new('fr')
275
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
276
- assert_equal('/index.html?wovn=fr', lang.add_lang_code('/index.html', 'query', headers))
277
- end
278
-
279
- def test_add_lang_code_relative_query_with_query
280
- lang = Lang.new('fr')
281
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
282
- assert_equal('/index.html?hey=yo&wovn=fr', lang.add_lang_code('/index.html?hey=yo', 'query', headers))
283
- end
284
-
285
- def test_add_lang_code_relative_query_with_hash
286
- lang = Lang.new('fr')
287
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
288
- assert_equal('/index.html?hey=yo&wovn=fr', lang.add_lang_code('/index.html?hey=yo', 'query', headers))
289
- end
290
-
291
- def test_add_lang_code_relative_path_with_leading_slash
292
- lang = Lang.new('fr')
293
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
294
- assert_equal('/fr/index.html', lang.add_lang_code('/index.html', 'path', headers))
295
- end
296
-
297
- def test_add_lang_code_relative_path_without_leading_slash_different_pathname
298
- lang = Lang.new('fr')
299
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/hello/tab.html'), Wovnrb.get_settings)
300
- assert_equal('/fr/hello/index.html', lang.add_lang_code('index.html', 'path', headers))
301
- end
302
-
303
- def test_add_lang_code_relative_path_without_leading_slash_different_pathname2
304
- lang = Lang.new('fr')
305
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/hello/tab.html'), Wovnrb.get_settings)
306
- assert_equal('/fr/hello/hey/index.html', lang.add_lang_code('hey/index.html', 'path', headers))
307
- end
308
-
309
- def test_add_lang_code_relative_path_at_root
310
- lang = Lang.new('fr')
311
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
312
- assert_equal('/fr/index.html', lang.add_lang_code('index.html', 'path', headers))
313
- end
314
-
315
- def test_get_code_from_custom_lang
316
- store = Store.instance
317
- store.settings['custom_lang_aliases'] = { 'ja' => 'staging-ja' }
318
- assert_equal('ja', Wovnrb::Lang.get_code('staging-ja'))
319
- end
320
-
321
- def test_add_lang_code_with_custom_lang_aliases
322
- lang = Lang.new('fr')
323
- Store.instance.update_settings('custom_lang_aliases' => { 'fr' => 'staging-fr' })
324
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
325
- assert_equal('http://staging-fr.wovn.io/topics/50', lang.add_lang_code('/topics/50', 'subdomain', h))
326
- end
327
62
  end
328
63
  end
@@ -295,7 +295,8 @@ module Wovnrb
295
295
 
296
296
  headers = Wovnrb::Headers.new(
297
297
  Wovnrb.get_env('url' => 'http://my-site.com/'),
298
- Wovnrb.get_settings(settings)
298
+ Wovnrb.get_settings(settings),
299
+ UrlLanguageSwitcher.new(store)
299
300
  )
300
301
  url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
301
302
  converter = HtmlConverter.new(get_dom('<html><body>hello</body></html>'), store, headers, url_lang_switcher)
@@ -311,7 +312,8 @@ module Wovnrb
311
312
 
312
313
  headers = Wovnrb::Headers.new(
313
314
  Wovnrb.get_env('url' => 'http://my-site.com/'),
314
- Wovnrb.get_settings(settings)
315
+ Wovnrb.get_settings(settings),
316
+ UrlLanguageSwitcher.new(store)
315
317
  )
316
318
  url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
317
319
  converter = HtmlConverter.new(get_dom('<html lang="th"><body>hello</body></html>'), store, headers, url_lang_switcher)
@@ -327,7 +329,8 @@ module Wovnrb
327
329
 
328
330
  headers = Wovnrb::Headers.new(
329
331
  Wovnrb.get_env('url' => 'http://my-site.com/?wovn=fr'),
330
- store.settings
332
+ store.settings,
333
+ UrlLanguageSwitcher.new(store)
331
334
  )
332
335
  url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
333
336
  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)
@@ -346,7 +349,8 @@ module Wovnrb
346
349
 
347
350
  headers = Wovnrb::Headers.new(
348
351
  Wovnrb.get_env('url' => 'http://my-site.com/fr/'),
349
- store.settings
352
+ store.settings,
353
+ UrlLanguageSwitcher.new(store)
350
354
  )
351
355
  url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
352
356
  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)
@@ -366,7 +370,8 @@ module Wovnrb
366
370
 
367
371
  headers = Wovnrb::Headers.new(
368
372
  Wovnrb.get_env('url' => 'http://my-site.com/fr/'),
369
- store.settings
373
+ store.settings,
374
+ UrlLanguageSwitcher.new(store)
370
375
  )
371
376
  url_lang_switcher = Wovnrb::UrlLanguageSwitcher.new(store)
372
377
  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)
@@ -392,7 +397,8 @@ module Wovnrb
392
397
 
393
398
  headers = Wovnrb::Headers.new(
394
399
  Wovnrb.get_env('url' => url),
395
- store.settings
400
+ store.settings,
401
+ UrlLanguageSwitcher.new(store)
396
402
  )
397
403
 
398
404
  [store, headers]
@@ -44,7 +44,7 @@ module Wovnrb
44
44
  def test_settings_url_pattern_subdomain
45
45
  s = Wovnrb::Store.instance
46
46
  s.update_settings('url_pattern' => 'subdomain')
47
- assert_equal("^(?<lang>[^.]+)\.", s.settings['url_pattern_reg'])
47
+ assert_equal('^(?<lang>[^.]+)\.', s.settings['url_pattern_reg'])
48
48
  assert_equal('subdomain', s.settings['url_pattern'])
49
49
  end
50
50
 
@@ -771,14 +771,165 @@ module Wovnrb
771
771
  assert_equal('/th/', url_lang_switcher.add_lang_code(href_trailing_slash, 'th', headers))
772
772
  end
773
773
 
774
+ def test_remove_lang_query_with_lang_param_name
775
+ settings = Wovnrb.get_settings('url_pattern' => 'query', 'lang_param_name' => 'lang')
776
+ store = Wovnrb.get_store(settings)
777
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
778
+
779
+ keys = Wovnrb::Lang::LANG.keys
780
+ assert_equal(77, keys.size)
781
+
782
+ keys.each do |key|
783
+ uri_without_custom_lang_param = "wovn.io/?wovn=#{key}"
784
+ unchanged_uri = url_lang_switcher.remove_lang_from_uri_component(uri_without_custom_lang_param, key)
785
+ assert_equal(uri_without_custom_lang_param, unchanged_uri)
786
+
787
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component("wovn.io/?lang=#{key}", key)
788
+ assert_equal('wovn.io/', uri_without_scheme)
789
+
790
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component("https://wovn.io?lang=#{key}", key)
791
+ assert_equal('https://wovn.io', uri_with_scheme)
792
+ end
793
+ end
794
+
795
+ def test_remove_lang_query_with_nil_lang
796
+ settings = Wovnrb.get_settings('url_pattern' => 'query')
797
+ store = Wovnrb.get_store(settings)
798
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
799
+
800
+ keys = Wovnrb::Lang::LANG.keys
801
+ assert_equal(77, keys.size)
802
+
803
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component('wovn.io', nil)
804
+ assert_equal('wovn.io', uri_without_scheme)
805
+
806
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component('https://wovn.io/', nil)
807
+ assert_equal('https://wovn.io/', uri_with_scheme)
808
+ end
809
+
810
+ def test_remove_lang_query_with_empty_lang
811
+ settings = Wovnrb.get_settings('url_pattern' => 'query')
812
+ store = Wovnrb.get_store(settings)
813
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
814
+
815
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component('wovn.io', '')
816
+ assert_equal('wovn.io', uri_without_scheme)
817
+
818
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component('https://wovn.io/', '')
819
+ assert_equal('https://wovn.io/', uri_with_scheme)
820
+ end
821
+
822
+ def test_remove_lang_subdomain
823
+ settings = Wovnrb.get_settings('url_pattern' => 'subdomain')
824
+ store = Wovnrb.get_store(settings)
825
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
826
+
827
+ keys = Wovnrb::Lang::LANG.keys
828
+ assert_equal(77, keys.size)
829
+
830
+ keys.each do |key|
831
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component("#{key.downcase}.wovn.io/", key)
832
+ assert_equal('wovn.io/', uri_without_scheme)
833
+
834
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component("https://#{key.downcase}.wovn.io", key)
835
+ assert_equal('https://wovn.io', uri_with_scheme)
836
+ end
837
+ end
838
+
839
+ def test_remove_lang_subdomain_with_nil_lang
840
+ settings = Wovnrb.get_settings('url_pattern' => 'subdomain')
841
+ store = Wovnrb.get_store(settings)
842
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
843
+ keys = Wovnrb::Lang::LANG.keys
844
+ assert_equal(77, keys.size)
845
+
846
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component('wovn.io', nil)
847
+ assert_equal('wovn.io', uri_without_scheme)
848
+
849
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component('https://wovn.io/', nil)
850
+ assert_equal('https://wovn.io/', uri_with_scheme)
851
+ end
852
+
853
+ def test_remove_lang_subdomain_with_empty_lang
854
+ settings = Wovnrb.get_settings('url_pattern' => 'subdomain')
855
+ store = Wovnrb.get_store(settings)
856
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
857
+
858
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component('wovn.io', '')
859
+ assert_equal('wovn.io', uri_without_scheme)
860
+
861
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component('https://wovn.io/', '')
862
+ assert_equal('https://wovn.io/', uri_with_scheme)
863
+ end
864
+
865
+ def test_remove_lang_subdomain_with_custom_lang_alias
866
+ Store.instance.update_settings('custom_lang_aliases' => { 'fr' => 'staging-fr' }, 'url_pattern' => 'subdomain')
867
+ url_lang_switcher = UrlLanguageSwitcher.new(Store.instance)
868
+
869
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component('staging-fr.wovn.io/', 'fr')
870
+ assert_equal('wovn.io/', uri_without_scheme)
871
+
872
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component('https://staging-fr.wovn.io', 'fr')
873
+ assert_equal('https://wovn.io', uri_with_scheme)
874
+ end
875
+
876
+ def test_remove_lang_path
877
+ settings = Wovnrb.get_settings
878
+ store = Wovnrb.get_store(settings)
879
+ sut = UrlLanguageSwitcher.new(store)
880
+
881
+ keys = Wovnrb::Lang::LANG.keys
882
+ assert_equal(77, keys.size)
883
+
884
+ keys.each do |key|
885
+ assert_equal('/', sut.remove_lang_from_uri_component("/#{key}", key))
886
+ assert_equal("/dir/#{key}/page.html", sut.remove_lang_from_uri_component("/#{key}/dir/#{key}/page.html", key))
887
+ assert_equal('?query', sut.remove_lang_from_uri_component('?query', key))
888
+ assert_equal('wovn.io/', sut.remove_lang_from_uri_component("wovn.io/#{key}", key))
889
+ assert_equal("wovn.io/dir/#{key}/page.html", sut.remove_lang_from_uri_component("wovn.io/#{key}/dir/#{key}/page.html", key))
890
+ assert_equal("wovn.io:5000/dir/#{key}/page.html", sut.remove_lang_from_uri_component("wovn.io:5000/#{key}/dir/#{key}/page.html", key))
891
+ assert_equal('https://wovn.io/', sut.remove_lang_from_uri_component("https://wovn.io/#{key}/", key))
892
+ assert_equal("https://wovn.io/dir/#{key}/page.html", sut.remove_lang_from_uri_component("https://wovn.io/#{key}/dir/#{key}/page.html", key))
893
+ end
894
+ end
895
+
896
+ def test_remove_lang_path_with_nil_lang
897
+ settings = Wovnrb.get_settings
898
+ store = Wovnrb.get_store(settings)
899
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
900
+
901
+ keys = Wovnrb::Lang::LANG.keys
902
+ assert_equal(77, keys.size)
903
+
904
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component('wovn.io', nil)
905
+ assert_equal('wovn.io', uri_without_scheme)
906
+
907
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component('https://wovn.io/', nil)
908
+ assert_equal('https://wovn.io/', uri_with_scheme)
909
+ end
910
+
911
+ def test_remove_lang_path_with_empty_lang
912
+ settings = Wovnrb.get_settings
913
+ store = Wovnrb.get_store(settings)
914
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
915
+
916
+ uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component('wovn.io', '')
917
+ assert_equal('wovn.io', uri_without_scheme)
918
+
919
+ uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component('https://wovn.io/', '')
920
+ assert_equal('https://wovn.io/', uri_with_scheme)
921
+ end
922
+
774
923
  def store_headers_factory(setting_opts = {}, url = 'http://my-site.com')
775
924
  settings = default_store_settings.merge(setting_opts)
776
925
  store = Wovnrb::Store.instance
777
926
  store.update_settings(settings)
927
+ url_lang_switcher = UrlLanguageSwitcher.new(store)
778
928
 
779
929
  headers = Wovnrb::Headers.new(
780
930
  Wovnrb.get_env('url' => url),
781
- store.settings
931
+ store.settings,
932
+ url_lang_switcher
782
933
  )
783
934
 
784
935
  [store, headers]
@@ -148,6 +148,8 @@ HTML
148
148
  'rack.input' => '',
149
149
  'rack.request.query_string' => '',
150
150
  'rack.request.query_hash' => {},
151
+ 'rack.request.form_input' => '',
152
+ 'rack.request.form_hash' => {},
151
153
  'HTTP_HOST' => 'test.com',
152
154
  'REQUEST_URI' => '/en/not_ignored',
153
155
  'PATH_INFO' => '/en/not_ignored'
@@ -168,6 +170,8 @@ HTML
168
170
  'rack.input' => '',
169
171
  'rack.request.query_string' => '',
170
172
  'rack.request.query_hash' => {},
173
+ 'rack.request.form_input' => '',
174
+ 'rack.request.form_hash' => {},
171
175
  'HTTP_HOST' => 'test.com',
172
176
  'REQUEST_URI' => '/ignored',
173
177
  'PATH_INFO' => '/ignored'
@@ -188,6 +192,8 @@ HTML
188
192
  'rack.input' => '',
189
193
  'rack.request.query_string' => '',
190
194
  'rack.request.query_hash' => {},
195
+ 'rack.request.form_input' => '',
196
+ 'rack.request.form_hash' => {},
191
197
  'HTTP_HOST' => 'test.com',
192
198
  'REQUEST_URI' => '/en/ignored',
193
199
  'PATH_INFO' => '/en/ignored'
@@ -208,6 +214,8 @@ HTML
208
214
  'rack.input' => '',
209
215
  'rack.request.query_string' => '',
210
216
  'rack.request.query_hash' => {},
217
+ 'rack.request.form_input' => '',
218
+ 'rack.request.form_hash' => {},
211
219
  'HTTP_HOST' => 'test.com',
212
220
  'REQUEST_URI' => '/ignored',
213
221
  'PATH_INFO' => '/ignored'
@@ -228,6 +236,8 @@ HTML
228
236
  'rack.input' => '',
229
237
  'rack.request.query_string' => '',
230
238
  'rack.request.query_hash' => {},
239
+ 'rack.request.form_input' => '',
240
+ 'rack.request.form_hash' => {},
231
241
  'HTTP_HOST' => 'test.com',
232
242
  'REQUEST_URI' => '/en/ignored',
233
243
  'PATH_INFO' => '/en/ignored'
@@ -273,7 +283,7 @@ HTML
273
283
  'custom_lang_aliases' => {},
274
284
  'default_lang' => original_lang,
275
285
  'url_pattern' => 'subdomain',
276
- 'url_pattern_reg' => '^(?<lang>[^.]+).'
286
+ 'url_pattern_reg' => '^(?<lang>[^.]+)\.'
277
287
  }
278
288
 
279
289
  store = Wovnrb::Store.instance
@@ -281,7 +291,8 @@ HTML
281
291
 
282
292
  headers = Wovnrb::Headers.new(
283
293
  Wovnrb.get_env('url' => "http://#{subdomain}page.com"),
284
- Wovnrb.get_settings(settings)
294
+ Wovnrb.get_settings(settings),
295
+ Wovnrb::UrlLanguageSwitcher.new(store)
285
296
  )
286
297
 
287
298
  [store, headers]
data/test/test_helper.rb CHANGED
@@ -2,8 +2,9 @@ require 'simplecov'
2
2
  require 'pry'
3
3
 
4
4
  # save to CircleCI's artifacts directory if we're on CircleCI
5
- if ENV['CIRCLE_ARTIFACTS']
6
- dir = File.join(ENV['CIRCLE_ARTIFACTS'], 'coverage')
5
+ circle_artifacts = ENV.fetch('CIRCLE_ARTIFACTS', nil)
6
+ if circle_artifacts
7
+ dir = File.join(circle_artifacts, 'coverage')
7
8
  SimpleCov.coverage_dir(dir)
8
9
  end
9
10
 
@@ -75,6 +76,13 @@ module Wovnrb
75
76
  Wovnrb::Settings.new.merge(settings.merge(options))
76
77
  end
77
78
 
79
+ def get_store(options = {})
80
+ settings = get_settings(options)
81
+ store = Store.instance
82
+ store.update_settings(settings)
83
+ store
84
+ end
85
+
78
86
  def get_env(options = {})
79
87
  env = {}
80
88
  env['rack.url_scheme'] = 'http'
@@ -116,7 +124,7 @@ module Wovnrb
116
124
  to_dom("<html><body>#{inner_html}</body></html>")
117
125
  end
118
126
 
119
- module_function :get_env, :get_settings, :to_dom, :get_dom
127
+ module_function :get_env, :get_settings, :to_dom, :get_dom, :get_store
120
128
 
121
129
  def build_api_data(custom_page_values: {}, custom_project_data: {})
122
130
  page_values = default_page_values.merge(custom_page_values)
data/wovnrb.gemspec CHANGED
@@ -18,7 +18,6 @@ Gem::Specification.new do |spec|
18
18
  files.delete('BEFORE_PUSHING')
19
19
  spec.files = files
20
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
21
  spec.require_paths = ['lib']
23
22
 
24
23
  spec.add_dependency 'activesupport'