wovnrb 0.2.01 → 0.2.02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -6
  3. data/README.md +116 -12
  4. data/lib/wovnrb/api_data.rb +59 -0
  5. data/lib/wovnrb/headers.rb +30 -5
  6. data/lib/wovnrb/html_replacers/image_replacer.rb +44 -0
  7. data/lib/wovnrb/html_replacers/link_replacer.rb +18 -0
  8. data/lib/wovnrb/html_replacers/meta_replacer.rb +20 -0
  9. data/lib/wovnrb/html_replacers/replacer_base.rb +17 -0
  10. data/lib/wovnrb/html_replacers/script_replacer.rb +39 -0
  11. data/lib/wovnrb/html_replacers/text_replacer.rb +19 -0
  12. data/lib/wovnrb/lang.rb +133 -23
  13. data/lib/wovnrb/services/url.rb +2 -68
  14. data/lib/wovnrb/services/wovn_logger.rb +45 -0
  15. data/lib/wovnrb/store.rb +19 -38
  16. data/lib/wovnrb/text_caches/cache_base.rb +52 -0
  17. data/lib/wovnrb/text_caches/memory_cache.rb +52 -0
  18. data/lib/wovnrb/version.rb +1 -1
  19. data/lib/wovnrb.rb +19 -224
  20. data/test/lib/api_data_test.rb +62 -0
  21. data/test/lib/headers_test.rb +1221 -1212
  22. data/test/lib/html_replacers/image_replacer_test.rb +86 -0
  23. data/test/lib/html_replacers/link_replacer_test.rb +43 -0
  24. data/test/lib/html_replacers/meta_replacer_test.rb +105 -0
  25. data/test/lib/html_replacers/replacer_base_test.rb +31 -0
  26. data/test/lib/html_replacers/script_replacer_test.rb +90 -0
  27. data/test/lib/html_replacers/text_replacer_test.rb +57 -0
  28. data/test/lib/lang_test.rb +446 -33
  29. data/test/lib/services/wovn_logger_test.rb +40 -0
  30. data/test/lib/store_test.rb +39 -29
  31. data/test/lib/text_caches/cache_base_test.rb +31 -0
  32. data/test/lib/text_caches/memory_cache_test.rb +91 -0
  33. data/test/lib/wovnrb_test.rb +39 -886
  34. data/test/test_helper.rb +96 -1
  35. data/wovnrb.gemspec +4 -0
  36. metadata +89 -2
@@ -2,14 +2,14 @@
2
2
  require 'wovnrb'
3
3
  require 'wovnrb/headers'
4
4
  require 'minitest/autorun'
5
+ require 'webmock/minitest'
5
6
  require 'pry'
6
7
 
7
8
  class WovnrbTest < Minitest::Test
8
-
9
- def get_app
9
+ def setup
10
+ Wovnrb::Store.instance.reset
10
11
  end
11
12
 
12
-
13
13
  def test_initialize
14
14
  i = Wovnrb::Interceptor.new(get_app)
15
15
  refute_nil(i)
@@ -23,288 +23,44 @@ class WovnrbTest < Minitest::Test
23
23
  # def test_switch_lang(body, values, url, lang=STORE.settings['default_lang'], headers)
24
24
  # end
25
25
 
26
+ def test_api_call
27
+ settings = Wovnrb.get_settings
28
+ token = settings['user_token']
29
+ url = 'wovn.io/dashboard'
30
+ stub = stub_request(:get, "#{settings['api_url']}?token=#{token}&url=#{url}").
31
+ to_return(:body => '{"test_body": "a"}')
26
32
 
27
- # def test_get_langs(values)
28
- # end
29
-
30
- def test_add_lang_code
31
- i = Wovnrb::Interceptor.new(get_app)
32
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
33
- assert_equal("http://www.facebook.com", i.add_lang_code("http://www.facebook.com", 'subdomain', 'zh-cht', h))
34
- end
35
-
36
- def test_add_lang_code_relative_slash_href_url_with_path
37
- i = Wovnrb::Interceptor.new(get_app)
38
- h = Wovnrb::Headers.new(get_env('url' => 'http://fr.favy.tips/topics/44'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
39
- assert_equal("http://fr.favy.tips/topics/50", i.add_lang_code("/topics/50", 'subdomain', 'fr', h))
40
- end
41
-
42
- def test_add_lang_code_relative_dot_href_url_with_path
43
- i = Wovnrb::Interceptor.new(get_app)
44
- h = Wovnrb::Headers.new(get_env('url' => 'http://fr.favy.tips/topics/44'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
45
- assert_equal("http://fr.favy.tips/topics/44/topics/50", i.add_lang_code("./topics/50", 'subdomain', 'fr', h))
46
- end
47
-
48
- def test_add_lang_code_relative_two_dots_href_url_with_path
49
- i = Wovnrb::Interceptor.new(get_app)
50
- h = Wovnrb::Headers.new(get_env('url' => 'http://fr.favy.tips/topics/44'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
51
- assert_equal("http://fr.favy.tips/topics/50", i.add_lang_code("../topics/50", 'subdomain', 'fr', h))
52
- end
53
-
54
- def test_add_lang_code_trad_chinese
55
- i = Wovnrb::Interceptor.new(get_app)
56
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
57
- assert_equal("http://zh-cht.favy.tips/topics/31", i.add_lang_code("http://favy.tips/topics/31", 'subdomain', 'zh-cht', h))
58
- end
59
-
60
- def test_add_lang_code_trad_chinese_2
61
- i = Wovnrb::Interceptor.new(get_app)
62
- h = Wovnrb::Headers.new(get_env('url' => 'http://zh-cht.favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
63
- assert_equal("http://zh-cht.favy.tips/topics/31", i.add_lang_code("/topics/31", 'subdomain', 'zh-cht', h))
64
- end
65
-
66
- def test_add_lang_code_trad_chinese_lang_in_link_already
67
- i = Wovnrb::Interceptor.new(get_app)
68
- h = Wovnrb::Headers.new(get_env('url' => 'http://zh-cht.favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
69
- assert_equal("http://zh-cht.favy.tips/topics/31", i.add_lang_code("http://zh-cht.favy.tips/topics/31", 'subdomain', 'zh-cht', h))
70
- end
33
+ i = Wovnrb::Interceptor.new(get_app, settings)
71
34
 
72
- def test_add_lang_code_no_protocol
73
- i = Wovnrb::Interceptor.new(get_app)
74
- h = Wovnrb::Headers.new(get_env('url' => 'https://zh-cht.google.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
75
- assert_equal("//zh-cht.google.com", i.add_lang_code("//google.com", 'subdomain', 'zh-cht', h))
35
+ i.call(Wovnrb.get_env)
36
+ assert_requested(stub, :times => 1)
76
37
  end
77
38
 
78
- def test_add_lang_code_no_protocol_2
79
- i = Wovnrb::Interceptor.new(get_app)
80
- h = Wovnrb::Headers.new(get_env('url' => 'https://zh-cht.favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
81
- assert_equal("//google.com", i.add_lang_code("//google.com", 'subdomain', 'zh-cht', h))
82
- end
39
+ def test_api_call_with_cache
40
+ settings = Wovnrb.get_settings
41
+ token = settings['user_token']
42
+ url = 'wovn.io/dashboard'
43
+ stub = stub_request(:get, "#{settings['api_url']}?token=#{token}&url=#{url}").
44
+ to_return(:body => '{"test_body": "a"}')
83
45
 
84
- def test_add_lang_code_invalid_url
85
- i = Wovnrb::Interceptor.new(get_app)
86
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
87
- assert_equal("http://www.facebook.com/sharer.php?u=http://favy.tips/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!", i.add_lang_code("http://www.facebook.com/sharer.php?u=http://favy.tips/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!", 'subdomain', 'zh-cht', h))
88
- end
46
+ i = Wovnrb::Interceptor.new(RackMock.new, settings)
89
47
 
90
- def test_add_lang_code_path_only_with_slash
91
- i = Wovnrb::Interceptor.new(get_app)
92
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
93
- assert_equal("http://zh-cht.favy.tips/topics/31", i.add_lang_code("/topics/31", 'subdomain', 'zh-cht', h))
48
+ i.call(Wovnrb.get_env)
49
+ i.call(Wovnrb.get_env)
50
+ assert_requested(stub, :times => 1)
94
51
  end
95
52
 
96
- def test_add_lang_code_path_only_no_slash
97
- i = Wovnrb::Interceptor.new(get_app)
98
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
99
- assert_equal("http://zh-cht.favy.tips/topics/31", i.add_lang_code("topics/31", 'subdomain', 'zh-cht', h))
100
- end
101
-
102
- def test_add_lang_code_path_explicit_page_no_slash
103
- i = Wovnrb::Interceptor.new(get_app)
104
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
105
- assert_equal("http://zh-cht.favy.tips/topics/31.html", i.add_lang_code("topics/31.html", 'subdomain', 'zh-cht', h))
106
- end
107
-
108
- def test_add_lang_code_path_explicit_page_with_slash
109
- i = Wovnrb::Interceptor.new(get_app)
110
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
111
- assert_equal("http://zh-cht.favy.tips/topics/31.html", i.add_lang_code("/topics/31.html", 'subdomain', 'zh-cht', h))
112
- end
113
-
114
- def test_add_lang_code_no_protocol_with_path_explicit_page
115
- i = Wovnrb::Interceptor.new(get_app)
116
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
117
- assert_equal("//www.google.com/topics/31.php", i.add_lang_code("//www.google.com/topics/31.php", 'subdomain', 'zh-cht', h))
118
- end
119
-
120
- def test_add_lang_code_protocol_with_path_explicit_page
121
- i = Wovnrb::Interceptor.new(get_app)
122
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
123
- assert_equal("http://www.google.com/topics/31.php", i.add_lang_code("http://www.google.com/topics/31.php", 'subdomain', 'zh-cht', h))
124
- end
125
-
126
- def test_add_lang_code_relative_path_double_period
127
- i = Wovnrb::Interceptor.new(get_app)
128
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
129
- assert_equal("http://zh-cht.favy.tips/topics/31", i.add_lang_code("../topics/31", 'subdomain', 'zh-cht', h))
130
- end
131
-
132
- def test_add_lang_code_relative_path_single_period
133
- i = Wovnrb::Interceptor.new(get_app)
134
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
135
- assert_equal("http://zh-cht.favy.tips/topics/31", i.add_lang_code("./topics/31", 'subdomain', 'zh-cht', h))
136
- end
137
-
138
- def test_add_lang_code_empty_href
139
- i = Wovnrb::Interceptor.new(get_app)
140
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
141
- assert_equal("", i.add_lang_code("", 'subdomain', 'zh-cht', h))
142
- end
143
-
144
- def test_add_lang_code_hash_href
53
+ def test_switch_lang
145
54
  i = Wovnrb::Interceptor.new(get_app)
146
- h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
147
- assert_equal("#", i.add_lang_code("#", 'subdomain', 'zh-cht', h))
148
- end
149
-
150
- # def test_add_lang_code_nil_href
151
- # i = Wovnrb::Interceptor.new(get_app)
152
- # assert_equal(nil, i.add_lang_code(nil,'path', 'en', nil))
153
- # end
154
- # def test_add_lang_code_absolute_different_host
155
- # i = Wovnrb::Interceptor.new(get_app)
156
- # headers = stub
157
- # headers.expects(:host).returns('google.com')
158
- # assert_equal('http://yahoo.co.jp', i.add_lang_code('http://yahoo.co.jp', 'path', 'fr', headers))
159
- # end
160
- #
161
- # def test_add_lang_code_absolute_subdomain_no_subdomain
162
- # i = Wovnrb::Interceptor.new(get_app)
163
- # headers = stub
164
- # headers.expects(:host).returns('google.com')
165
- # assert_equal('http://fr.google.com', i.add_lang_code('http://google.com', 'subdomain', 'fr', headers))
166
- # end
167
- #
168
- # def test_add_lang_code_absolute_subdomain_with_subdomain
169
- # i = Wovnrb::Interceptor.new(get_app)
170
- # headers = stub
171
- # headers.expects(:host).returns('home.google.com')
172
- # assert_equal('http://fr.home.google.com', i.add_lang_code('http://home.google.com', 'subdomain', 'fr', headers))
173
- # end
174
- #
175
- # def test_add_lang_code_absolute_query_no_query
176
- # i = Wovnrb::Interceptor.new(get_app)
177
- # headers = stub
178
- # headers.expects(:host).returns('google.com')
179
- # assert_equal('http://google.com?wovn=fr', i.add_lang_code('http://google.com', 'query', 'fr', headers))
180
- # end
181
- #
182
- # def test_add_lang_code_absolute_query_with_query
183
- # i = Wovnrb::Interceptor.new(get_app)
184
- # headers = stub
185
- # headers.expects(:host).returns('google.com')
186
- # assert_equal('http://google.com?hey=yo&wovn=fr', i.add_lang_code('http://google.com?hey=yo', 'query', 'fr', headers))
187
- # end
188
- #
189
- # def test_add_lang_code_absolute_path_no_pathname
190
- # i = Wovnrb::Interceptor.new(get_app)
191
- # headers = stub
192
- # headers.expects(:host).returns('google.com')
193
- # assert_equal('http://google.com/fr/', i.add_lang_code('http://google.com', 'path', 'fr', headers))
194
- # end
195
- #
196
- # def test_add_lang_code_absolute_path_with_pathname
197
- # i = Wovnrb::Interceptor.new(get_app)
198
- # headers = stub
199
- # headers.expects(:host).returns('google.com')
200
- # assert_equal('http://google.com/fr/index.html', i.add_lang_code('http://google.com/index.html', 'path', 'fr', headers))
201
- # end
202
- #
203
- # def test_add_lang_code_absolute_path_with_long_pathname
204
- # i = Wovnrb::Interceptor.new(get_app)
205
- # headers = stub
206
- # headers.expects(:host).returns('google.com')
207
- # assert_equal('http://google.com/fr/hello/long/path/index.html', i.add_lang_code('http://google.com/hello/long/path/index.html', 'path', 'fr', headers))
208
- # end
209
- #
210
- # def test_add_lang_code_relative_subdomain_leading_slash
211
- # i = Wovnrb::Interceptor.new(get_app)
212
- # headers = stub
213
- # headers.expects(:protocol).returns('http')
214
- # headers.expects(:host).returns('google.com')
215
- # assert_equal('http://fr.google.com/', i.add_lang_code('/', 'subdomain', 'fr', headers))
216
- # end
217
- #
218
- # def test_add_lang_code_relative_subdomain_leading_slash_filename
219
- # i = Wovnrb::Interceptor.new(get_app)
220
- # headers = stub
221
- # headers.expects(:protocol).returns('http')
222
- # headers.expects(:host).returns('google.com')
223
- # assert_equal('http://fr.google.com/index.html', i.add_lang_code('/index.html', 'subdomain', 'fr', headers))
224
- # end
225
- #
226
- # def test_add_lang_code_relative_subdomain_no_leading_slash_filename
227
- # i = Wovnrb::Interceptor.new(get_app)
228
- # headers = stub
229
- # headers.expects(:protocol).returns('http')
230
- # headers.expects(:host).returns('google.com')
231
- # headers.expects(:pathname).returns('/')
232
- # assert_equal('http://fr.google.com/index.html', i.add_lang_code('index.html', 'subdomain', 'fr', headers))
233
- # end
234
- #
235
- # def test_add_lang_code_relative_subdomain_dot_filename
236
- # i = Wovnrb::Interceptor.new(get_app)
237
- # headers = stub
238
- # headers.expects(:protocol).returns('http')
239
- # headers.expects(:host).returns('google.com')
240
- # headers.expects(:pathname).returns('/')
241
- # assert_equal('http://fr.google.com/./index.html', i.add_lang_code('./index.html', 'subdomain', 'fr', headers))
242
- # end
243
- #
244
- # def test_add_lang_code_relative_subdomain_two_dots_filename_long_pathname
245
- # i = Wovnrb::Interceptor.new(get_app)
246
- # headers = stub
247
- # headers.expects(:protocol).returns('http')
248
- # headers.expects(:host).returns('google.com')
249
- # headers.expects(:pathname).returns('/home/hey/index.html')
250
- # assert_equal('http://fr.google.com/home/hey/../index.html', i.add_lang_code('../index.html', 'subdomain', 'fr', headers))
251
- # end
252
- #
253
- # def test_add_lang_code_relative_query_with_no_query
254
- # i = Wovnrb::Interceptor.new(get_app)
255
- # headers = stub
256
- # assert_equal('/index.html?wovn=fr', i.add_lang_code('/index.html', 'query', 'fr', headers))
257
- # end
258
- #
259
- # def test_add_lang_code_relative_query_with_query
260
- # i = Wovnrb::Interceptor.new(get_app)
261
- # headers = stub
262
- # assert_equal('/index.html?hey=yo&wovn=fr', i.add_lang_code('/index.html?hey=yo', 'query', 'fr', headers))
263
- # end
264
- #
265
- # def test_add_lang_code_relative_path_with_leading_slash
266
- # i = Wovnrb::Interceptor.new(get_app)
267
- # headers = stub
268
- # assert_equal('/fr/index.html', i.add_lang_code('/index.html', 'path', 'fr', headers))
269
- # end
270
- #
271
- # def test_add_lang_code_relative_path_without_leading_slash_different_pathname
272
- # i = Wovnrb::Interceptor.new(get_app)
273
- # headers = stub
274
- # headers.expects(:pathname).returns('/hello/tab.html')
275
- # assert_equal('/fr/hello/index.html', i.add_lang_code('index.html', 'path', 'fr', headers))
276
- # end
277
- #
278
- # def test_add_lang_code_relative_path_without_leading_slash_different_pathname2
279
- # i = Wovnrb::Interceptor.new(get_app)
280
- # headers = stub
281
- # headers.expects(:pathname).returns('/hello/tab.html')
282
- # assert_equal('/fr/hello/hey/index.html', i.add_lang_code('hey/index.html', 'path', 'fr', headers))
283
- # end
284
- def generate_body(param = "")
285
- case param
286
- when "ignore_parent"
287
- body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
288
- <div wovn-ignore><p>Hello</p></div>
289
- </body></html>"
290
- when "ignore_everything"
291
- body = "<html><body wovn-ignore><h1>Mr. Belvedere Fan Club</h1>
55
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
56
+ body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
292
57
  <div><p>Hello</p></div>
293
58
  </body></html>"
294
- when "ignore_parent_translated_in_japanese"
295
- body = "<html lang=\"ja\">
296
- <head>
297
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
298
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">
299
- </head>
300
- <body>
301
- <h1>ベルベデアさんファンクラブ</h1>
302
- <div wovn-ignore=\"\"><p>Hello</p></div>
303
- </body>
304
- </html>
305
- "
306
- when "translated_in_japanese"
307
- body = "<html lang=\"ja\">
59
+ values = generate_values
60
+ url = h.url
61
+ swapped_body = i.switch_lang([body], values, url, 'ja', h)
62
+
63
+ expected_body = "<html lang=\"ja\">
308
64
  <head>
309
65
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
310
66
  <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
@@ -315,626 +71,23 @@ class WovnrbTest < Minitest::Test
315
71
  </body>
316
72
  </html>
317
73
  "
318
- when "ignore_everything_translated"
319
- body = "<html lang=\"ja\">
320
- <head>
321
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
322
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">
323
- </head>
324
- <body wovn-ignore=\"\">
325
- <h1>Mr. Belvedere Fan Club</h1>
326
- <div><p>Hello</p></div>
327
- </body>
328
- </html>
329
- "
330
- when "empty"
331
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore><p>Hello</p></div></body></html>"
332
- when "empty_single_quote"
333
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=''><p>Hello</p></div></body></html>"
334
- when "empty_double_quote"
335
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=""><p>Hello</p></div></body></html>"
336
- when "value_single_quote"
337
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore='value'><p>Hello</p></div></body></html>"
338
- when "value_double_quote"
339
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"value\"><p>Hello</p></div></body></html>"
340
- when "empty_translated"
341
- body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
342
- when "empty_single_quote_translated"
343
- body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
344
- when "empty_double_quote_translated"
345
- body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
346
- when "value_single_quote_translated"
347
- body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"value\"><p>Hello</p></div>\n</body>\n</html>\n"
348
- when "value_double_quote_translated"
349
- body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"value\"><p>Hello</p></div>\n</body>\n</html>\n"
350
- when "meta_img_alt_tags_translated"
351
- body = "<html lang=\"ja\">\n<head>\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<meta name=\"description\" content=\"こんにちは\">\n<meta name=\"title\" content=\"こんにちは\">\n<meta property=\"og:title\" content=\"こんにちは\">\n<meta property=\"og:description\" content=\"こんにちは\">\n<meta property=\"twitter:title\" content=\"こんにちは\">\n<meta property=\"twitter:description\" content=\"こんにちは\">\n<link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">\n</head>\n<body>\n<h1>ベルベデアさんファンクラブ</h1>\n<div><p>こんにちは</p></div>\n<img src=\"http://example.com/photo.png\" alt=\"こんにちは\">\n</body>\n</html>\n"
352
- when "meta_img_alt_tags"
353
- body = "<html><head><meta name =\"description\" content=\"Hello\">\n<meta name=\"title\" content=\"Hello\">\n<meta property=\"og:title\" content=\"Hello\">\n<meta property=\"og:description\" content=\"Hello\">\n<meta property=\"twitter:title\" content=\"Hello\">\n<meta property=\"twitter:description\" content=\"Hello\"></head>
354
- <body><h1>Mr. Belvedere Fan Club</h1>
355
- <div><p>Hello</p></div>
356
- <img src=\"http://example.com/photo.png\" alt=\"Hello\">
357
- </body></html>"
358
- else # "" case
359
- body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
360
- <div><p>Hello</p></div>
361
- </body></html>"
362
- end
363
- return [body]
74
+ assert_equal([expected_body], swapped_body)
75
+ end
76
+
77
+ def get_app
78
+ RackMock.new
364
79
  end
365
80
 
366
81
  def generate_values
367
82
  values = {}
368
83
  values['text_vals'] = {'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
369
- 'Mr. Belvedere Fan Club' => {'ja' => [{'data' => 'ベルベデアさんファンクラブ'}]}}
84
+ 'Mr. Belvedere Fan Club' => {'ja' => [{'data' => 'ベルベデアさんファンクラブ'}]}}
370
85
  return values
371
86
  end
372
87
 
373
- def test_switch_lang
374
- i = Wovnrb::Interceptor.new(get_app)
375
- h = Wovnrb::Headers.new(get_env('url' => 'http://page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
376
- body = generate_body()
377
- values = generate_values
378
- url = h.url
379
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
380
- assert_equal(generate_body('translated_in_japanese'), swapped_body)
381
- end
382
-
383
- def test_switch_lang_meta_img_alt_tags
384
- i = Wovnrb::Interceptor.new(get_app)
385
- h = Wovnrb::Headers.new(get_env('url' => 'http://page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
386
- body = generate_body('meta_img_alt_tags')
387
- values = generate_values
388
- url = h.url
389
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
390
- assert_equal(generate_body('meta_img_alt_tags_translated'), swapped_body)
391
- end
392
-
393
- def test_switch_lang_wovn_ignore
394
- i = Wovnrb::Interceptor.new(get_app)
395
- h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
396
- body = generate_body('ignore_parent')
397
- values = generate_values
398
- url = h.url
399
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
400
- assert_equal(generate_body('ignore_parent_translated_in_japanese'), swapped_body)
401
- end
402
-
403
- def test_switch_lang_wovn_ignore_everything
404
- i = Wovnrb::Interceptor.new(get_app)
405
- h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
406
- body = generate_body('ignore_everything')
407
- values = generate_values
408
- url = h.url
409
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
410
- assert_equal(generate_body('ignore_everything_translated'), swapped_body)
411
- end
412
-
413
- def test_switch_lang_wovn_ignore_empty
414
- i = Wovnrb::Interceptor.new(get_app)
415
- h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
416
- body = generate_body('empty')
417
- values = generate_values
418
- url = h.url
419
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
420
- assert_equal(generate_body('empty_translated'), swapped_body)
421
- end
422
-
423
- def test_switch_lang_wovn_ignore_empty_single_quote
424
- i = Wovnrb::Interceptor.new(get_app)
425
- h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
426
- body = generate_body('empty_single_quote')
427
- values = generate_values
428
- url = h.url
429
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
430
- assert_equal(generate_body('empty_single_quote_translated'), swapped_body)
431
- end
432
-
433
- def test_switch_lang_wovn_ignore_empty_double_quote
434
- i = Wovnrb::Interceptor.new(get_app)
435
- h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
436
- body = generate_body('empty_double_quote')
437
- values = generate_values
438
- url = h.url
439
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
440
- assert_equal(generate_body('empty_double_quote_translated'), swapped_body)
441
- end
442
-
443
- def test_switch_lang_wovn_ignore_value_single_quote
444
- i = Wovnrb::Interceptor.new(get_app)
445
- h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
446
- body = generate_body('value_single_quote')
447
- values = generate_values
448
- url = h.url
449
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
450
- assert_equal(generate_body('value_single_quote_translated'), swapped_body)
451
- end
452
-
453
- def test_switch_lang_wovn_ignore_value_double_quote
454
- i = Wovnrb::Interceptor.new(get_app)
455
- h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
456
- body = generate_body('value_double_quote')
457
- values = generate_values
458
- url = h.url
459
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
460
- assert_equal(generate_body('value_double_quote_translated'), swapped_body)
461
- end
462
-
463
- def test_switch_lang_add_lang_code_path_from_action_no_method
464
- i = Wovnrb::Interceptor.new(get_app, get_settings)
465
- h = Wovnrb::Headers.new(get_env('url' => 'https://google.com'), get_settings)
466
- body = <<"BODY"
467
- <html>
468
- <head><title>Hey</title></head>
469
- <body>
470
- <h1>Mr. Belvedere Fan Club</h1>
471
- <div><p>Hello</p></div>
472
- <a href="https://google.com/hello.html">TOP</a>
473
- <form action="/form.php">
474
- <input type="text" name="name" value="wovn.io" />
475
- </form>
476
- </body>
477
- </html>
478
- BODY
479
- expected = <<"EXPECTED"
480
- <html lang=\"ja\">
481
- <head>
482
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
483
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=0.2\"> </script><title>Hey</title>
484
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://google.com/ja/\">
485
- </head>
486
- <body>
487
- <h1>ベルベデアさんファンクラブ</h1>
488
- <div><p>こんにちは</p></div>
489
- <a href=\"https://google.com/ja/hello.html\">TOP</a>
490
- <form action=\"/ja/form.php\">
491
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
492
- </form>
493
-
494
-
495
-
496
- </body>
497
- </html>
498
- EXPECTED
499
- body = [body]
500
- expected = [expected]
501
- values = generate_values
502
- url = h.url
503
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
504
- assert_equal(expected, swapped_body)
505
- end
506
-
507
- def test_switch_lang_add_lang_code_path_from_action_get_method
508
- i = Wovnrb::Interceptor.new(get_app, get_settings)
509
- h = Wovnrb::Headers.new(get_env('url' => 'https://google.com'), get_settings)
510
- body = <<"BODY"
511
- <html>
512
- <head><title>Hey</title></head>
513
- <body>
514
- <h1>Mr. Belvedere Fan Club</h1>
515
- <div><p>Hello</p></div>
516
- <a href="https://google.com/hello.html">TOP</a>
517
- <form action="/form.php" method="GET">
518
- <input type="text" name="name" value="wovn.io" />
519
- </form>
520
- </body>
521
- </html>
522
- BODY
523
- expected = <<"EXPECTED"
524
- <html lang=\"ja\">
525
- <head>
526
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
527
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=0.2\"> </script><title>Hey</title>
528
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://google.com/ja/\">
529
- </head>
530
- <body>
531
- <h1>ベルベデアさんファンクラブ</h1>
532
- <div><p>こんにちは</p></div>
533
- <a href=\"https://google.com/ja/hello.html\">TOP</a>
534
- <form action=\"/ja/form.php\" method="GET">
535
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
536
- </form>
537
-
538
-
539
-
540
- </body>
541
- </html>
542
- EXPECTED
543
- body = [body]
544
- expected = [expected]
545
- values = generate_values
546
- url = h.url
547
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
548
- assert_equal(expected, swapped_body)
549
- end
550
-
551
- def test_switch_lang_add_lang_code_path_from_action_post_method
552
- i = Wovnrb::Interceptor.new(get_app, get_settings)
553
- h = Wovnrb::Headers.new(get_env('url' => 'https://google.com'), get_settings)
554
- body = <<"BODY"
555
- <html>
556
- <head><title>Hey</title></head>
557
- <body>
558
- <h1>Mr. Belvedere Fan Club</h1>
559
- <div><p>Hello</p></div>
560
- <a href="https://google.com/hello.html">TOP</a>
561
- <form action="/form.php" method="POST">
562
- <input type="text" name="name" value="wovn.io" />
563
- </form>
564
- </body>
565
- </html>
566
- BODY
567
- expected = <<"EXPECTED"
568
- <html lang=\"ja\">
569
- <head>
570
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
571
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=0.2\"> </script><title>Hey</title>
572
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://google.com/ja/\">
573
- </head>
574
- <body>
575
- <h1>ベルベデアさんファンクラブ</h1>
576
- <div><p>こんにちは</p></div>
577
- <a href=\"https://google.com/ja/hello.html\">TOP</a>
578
- <form action=\"/ja/form.php\" method="POST">
579
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
580
- </form>
581
-
582
-
583
-
584
- </body>
585
- </html>
586
- EXPECTED
587
- body = [body]
588
- expected = [expected]
589
- values = generate_values
590
- url = h.url
591
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
592
- assert_equal(expected, swapped_body)
593
- end
594
-
595
- def test_switch_lang_add_lang_code_subdomain_from_action_no_method
596
- i = Wovnrb::Interceptor.new(
597
- get_app,
598
- get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => "^(?<lang>[^.]+)\."),
599
- )
600
- h = Wovnrb::Headers.new(
601
- get_env('url' => 'https://google.com'),
602
- get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => "^(?<lang>[^.]+)\."),
603
- )
604
- body = <<"BODY"
605
- <html>
606
- <head><title>Hey</title></head>
607
- <body>
608
- <h1>Mr. Belvedere Fan Club</h1>
609
- <div><p>Hello</p></div>
610
- <a href="https://google.com/hello.html">TOP</a>
611
- <form action="/form.php">
612
- <input type="text" name="name" value="wovn.io" />
613
- </form>
614
- </body>
615
- </html>
616
- BODY
617
- expected = <<"EXPECTED"
618
- <html lang=\"ja\">
619
- <head>
620
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
621
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=subdomain&amp;version=0.2\"> </script><title>Hey</title>
622
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://ja.google.com/\">
623
- </head>
624
- <body>
625
- <h1>ベルベデアさんファンクラブ</h1>
626
- <div><p>こんにちは</p></div>
627
- <a href=\"https://ja.google.com/hello.html\">TOP</a>
628
- <form action=\"https://ja.google.com/form.php\">
629
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
630
- </form>
631
-
632
-
633
-
634
- </body>
635
- </html>
636
- EXPECTED
637
- body = [body]
638
- expected = [expected]
639
- values = generate_values
640
- url = h.url
641
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
642
- assert_equal(expected, swapped_body)
643
- end
644
-
645
- def test_switch_lang_add_lang_code_subdomain_from_action_get_method
646
- i = Wovnrb::Interceptor.new(
647
- get_app,
648
- get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => "^(?<lang>[^.]+)\."),
649
- )
650
- h = Wovnrb::Headers.new(
651
- get_env('url' => 'https://google.com'),
652
- get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => "^(?<lang>[^.]+)\."),
653
- )
654
- body = <<"BODY"
655
- <html>
656
- <head><title>Hey</title></head>
657
- <body>
658
- <h1>Mr. Belvedere Fan Club</h1>
659
- <div><p>Hello</p></div>
660
- <a href="https://google.com/hello.html">TOP</a>
661
- <form action="/form.php" method="GET">
662
- <input type="text" name="name" value="wovn.io" />
663
- </form>
664
- </body>
665
- </html>
666
- BODY
667
- expected = <<"EXPECTED"
668
- <html lang=\"ja\">
669
- <head>
670
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
671
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=subdomain&amp;version=0.2\"> </script><title>Hey</title>
672
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://ja.google.com/\">
673
- </head>
674
- <body>
675
- <h1>ベルベデアさんファンクラブ</h1>
676
- <div><p>こんにちは</p></div>
677
- <a href=\"https://ja.google.com/hello.html\">TOP</a>
678
- <form action=\"https://ja.google.com/form.php\" method="GET">
679
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
680
- </form>
681
-
682
-
683
-
684
- </body>
685
- </html>
686
- EXPECTED
687
- body = [body]
688
- expected = [expected]
689
- values = generate_values
690
- url = h.url
691
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
692
- assert_equal(expected, swapped_body)
693
- end
694
-
695
- def test_switch_lang_add_lang_code_subdomain_from_action_post_method
696
- i = Wovnrb::Interceptor.new(
697
- get_app,
698
- get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => "^(?<lang>[^.]+)\."),
699
- )
700
- h = Wovnrb::Headers.new(
701
- get_env('url' => 'https://google.com'),
702
- get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => "^(?<lang>[^.]+)\."),
703
- )
704
- body = <<"BODY"
705
- <html>
706
- <head><title>Hey</title></head>
707
- <body>
708
- <h1>Mr. Belvedere Fan Club</h1>
709
- <div><p>Hello</p></div>
710
- <a href="https://google.com/hello.html">TOP</a>
711
- <form action="/form.php" method="POST">
712
- <input type="text" name="name" value="wovn.io" />
713
- </form>
714
- </body>
715
- </html>
716
- BODY
717
- expected = <<"EXPECTED"
718
- <html lang=\"ja\">
719
- <head>
720
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
721
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=subdomain&amp;version=0.2\"> </script><title>Hey</title>
722
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://ja.google.com/\">
723
- </head>
724
- <body>
725
- <h1>ベルベデアさんファンクラブ</h1>
726
- <div><p>こんにちは</p></div>
727
- <a href=\"https://ja.google.com/hello.html\">TOP</a>
728
- <form action=\"https://ja.google.com/form.php\" method="POST">
729
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
730
- </form>
731
-
732
-
733
-
734
- </body>
735
- </html>
736
- EXPECTED
737
- body = [body]
738
- expected = [expected]
739
- values = generate_values
740
- url = h.url
741
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
742
- assert_equal(expected, swapped_body)
743
- end
744
-
745
- def test_switch_lang_add_lang_code_query_form_action_no_method
746
- i = Wovnrb::Interceptor.new(
747
- get_app,
748
- get_settings('url_pattern' => 'query', 'url_pattern_reg' => "((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)"),
749
- )
750
- h = Wovnrb::Headers.new(
751
- get_env('url' => 'https://google.com'),
752
- get_settings('url_pattern' => 'query', 'url_pattern_reg' => "((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)"),
753
- )
754
- body = <<"BODY"
755
- <html>
756
- <head><title>Hey</title></head>
757
- <body>
758
- <h1>Mr. Belvedere Fan Club</h1>
759
- <div><p>Hello</p></div>
760
- <a href="https://google.com/hello.html">TOP</a>
761
- <form action="/form.php">
762
- <input type="text" name="name" value="wovn.io" />
763
- </form>
764
- </body>
765
- </html>
766
- BODY
767
- expected = <<"EXPECTED"
768
- <html lang=\"ja\">
769
- <head>
770
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
771
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=query&amp;version=0.2\"> </script><title>Hey</title>
772
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://google.com/?wovn=ja\">
773
- </head>
774
- <body>
775
- <h1>ベルベデアさんファンクラブ</h1>
776
- <div><p>こんにちは</p></div>
777
- <a href=\"https://google.com/hello.html?wovn=ja\">TOP</a>
778
- <form action=\"/form.php\">
779
- <input type=\"hidden\" name=\"wovn\" value=\"ja\">
780
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
781
- </form>
782
-
783
-
784
-
785
- </body>
786
- </html>
787
- EXPECTED
788
- body = [body]
789
- expected = [expected]
790
- values = generate_values
791
- url = h.url
792
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
793
- assert_equal(expected, swapped_body)
794
- end
795
-
796
- def test_switch_lang_add_lang_code_query_form_action_get_method
797
- i = Wovnrb::Interceptor.new(
798
- get_app,
799
- get_settings('url_pattern' => 'query', 'url_pattern_reg' => "((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)"),
800
- )
801
- h = Wovnrb::Headers.new(
802
- get_env('url' => 'https://google.com'),
803
- get_settings('url_pattern' => 'query', 'url_pattern_reg' => "((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)"),
804
- )
805
- body = <<"BODY"
806
- <html>
807
- <head><title>Hey</title></head>
808
- <body>
809
- <h1>Mr. Belvedere Fan Club</h1>
810
- <div><p>Hello</p></div>
811
- <a href="https://google.com/hello.html">TOP</a>
812
- <form action="/form.php" method="GET">
813
- <input type="text" name="name" value="wovn.io" />
814
- </form>
815
- </body>
816
- </html>
817
- BODY
818
- expected = <<"EXPECTED"
819
- <html lang=\"ja\">
820
- <head>
821
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
822
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=query&amp;version=0.2\"> </script><title>Hey</title>
823
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://google.com/?wovn=ja\">
824
- </head>
825
- <body>
826
- <h1>ベルベデアさんファンクラブ</h1>
827
- <div><p>こんにちは</p></div>
828
- <a href=\"https://google.com/hello.html?wovn=ja\">TOP</a>
829
- <form action=\"/form.php\" method="GET">
830
- <input type=\"hidden\" name=\"wovn\" value=\"ja\">
831
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
832
- </form>
833
-
834
-
835
-
836
- </body>
837
- </html>
838
- EXPECTED
839
- body = [body]
840
- expected = [expected]
841
- values = generate_values
842
- url = h.url
843
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
844
- assert_equal(expected, swapped_body)
845
- end
846
-
847
- def test_switch_lang_add_lang_code_query_form_action_post_method
848
- i = Wovnrb::Interceptor.new(
849
- get_app,
850
- get_settings('url_pattern' => 'query', 'url_pattern_reg' => "((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)"),
851
- )
852
- h = Wovnrb::Headers.new(
853
- get_env('url' => 'https://google.com'),
854
- get_settings('url_pattern' => 'query', 'url_pattern_reg' => "((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)"),
855
- )
856
- body = <<"BODY"
857
- <html>
858
- <head><title>Hey</title></head>
859
- <body>
860
- <h1>Mr. Belvedere Fan Club</h1>
861
- <div><p>Hello</p></div>
862
- <a href="https://google.com/hello.html">TOP</a>
863
- <form action="/form.php" method="POST">
864
- <input type="text" name="name" value="wovn.io" />
865
- </form>
866
- </body>
867
- </html>
868
- BODY
869
- expected = <<"EXPECTED"
870
- <html lang=\"ja\">
871
- <head>
872
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
873
- <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=OHYx9&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=query&amp;version=0.2\"> </script><title>Hey</title>
874
- <link rel=\"alternate\" hreflang=\"ja\" href=\"https://google.com/?wovn=ja\">
875
- </head>
876
- <body>
877
- <h1>ベルベデアさんファンクラブ</h1>
878
- <div><p>こんにちは</p></div>
879
- <a href=\"https://google.com/hello.html?wovn=ja\">TOP</a>
880
- <form action=\"/form.php?wovn=ja\" method="POST">
881
- <input type=\"text\" name=\"name\" value=\"wovn.io\">
882
- </form>
883
-
884
-
885
-
886
- </body>
887
- </html>
888
- EXPECTED
889
- body = [body]
890
- expected = [expected]
891
- values = generate_values
892
- url = h.url
893
- swapped_body = i.switch_lang(body, values, url, 'ja', h)
894
- assert_equal(expected, swapped_body)
895
- end
896
-
897
- def get_settings(options={})
898
- settings = {}
899
- settings['user_token'] = 'OHYx9'
900
- settings['url_pattern'] = 'path'
901
- settings['url_pattern_reg'] = "/(?<lang>[^/.?]+)"
902
- settings['query'] = []
903
- settings['api_url'] = 'http://localhost/v0/values'
904
- settings['default_lang'] = 'en'
905
- settings['supported_langs'] = []
906
- settings['secret_key'] = ''
907
- return settings.merge(options)
908
- end
909
-
910
- def get_env(options={})
911
- env = {}
912
- env['rack.url_scheme'] = 'http'
913
- env['HTTP_HOST'] = 'wovn.io'
914
- env['REQUEST_URI'] = '/dashboard?param=val&hey=you'
915
- env['SERVER_NAME'] = 'wovn.io'
916
- env['HTTP_COOKIE'] = "olfsk=olfsk021093478426337242; hblid=KB8AAMzxzu2DSxnB4X7BJ26rBGVeF0yJ; optimizelyEndUserId=oeu1426233718869r0.5398541854228824; __zlcmid=UFeZqrVo6Mv3Yl; wovn_selected_lang=en; optimizelySegments=%7B%7D; optimizelyBuckets=%7B%7D; _equalizer_session=eDFwM3M2QUZJZFhoby9JZlArckcvSUJwNFRINXhUeUxtNnltQXZhV0tqdGhZQjJMZ01URnZTK05ydFVWYmM3U0dtMVN0M0Z0UnNDVG8vdUNDTUtPc21jY0FHREgrZ05CUnBTb0hyUlkvYlBWQVhQR3RZdnhjMWsrRW5rOVp1Z3V3bkgyd3NpSlRZQWU1dlZvNmM1THp6aUZVeE83Y1pWWENRNTBUVFIrV05WeTdDMlFlem1tUzdxaEtndFZBd2dtUjU2ak5EUmJPa3RWWmMyT1pSVWdMTm8zOVZhUWhHdGQ3L1c5bm91RmNSdFRrcC90Tml4N2t3ZWlBaDRya2lLT1I0S0J2TURhUWl6Uk5rOTQ4Y1MwM3VKYnlLMUYraEt5clhRdFd1eGdEWXdZd3pFbWQvdE9vQndhdDVQbXNLcHBURm9CbnZKenU2YnNXRFdqRVl0MVV3bmRyYjhvMDExcGtUVU9tK1lqUGswM3p6M05tbVRnTjE3TUl5cEdpTTZ4a2gray8xK0FvTC9wUDVka1JSeE5GM1prZmRjWDdyVzRhWW5uS2Mxc1BxOEVVTTZFS3N5bTlVN2p5eE5YSjNZWGI2UHd3Vzc0bDM5QjIwL0l5Mm85NmQyWFAwdVQ3ZzJYYk1QOHY2NVJpY2c9LS1KNU96eHVycVJxSDJMbEc4Rm9KVXpBPT0%3D--17e47555d692fb9cde20ef78a09a5eabbf805bb3; mp_a0452663eb7abb7dfa9c94007ebb0090_mixpanel=%7B%22distinct_id%22%3A%20%2253ed9ffa4a65662e37000000%22%2C%22%24initial_referrer%22%3A%20%22http%3A%2F%2Fp.dev-wovn.io%3A8080%2Fhttp%3A%2F%2Fdev-wovn.io%3A3000%22%2C%22%24initial_referring_domain%22%3A%20%22p.dev-wovn.io%3A8080%22%2C%22__mps%22%3A%20%7B%7D%2C%22__mpso%22%3A%20%7B%7D%2C%22__mpa%22%3A%20%7B%7D%2C%22__mpu%22%3A%20%7B%7D%2C%22__mpap%22%3A%20%5B%5D%7D"
917
- env['HTTP_ACCEPT_LANGUAGE'] = 'ja,en-US;q=0.8,en;q=0.6'
918
- env['QUERY_STRING'] = 'param=val&hey=you'
919
- env['ORIGINAL_FULLPATH'] = '/dashboard?param=val&hey=you'
920
- #env['HTTP_REFERER'] =
921
- env['REQUEST_PATH'] = '/dashboard'
922
- env['PATH_INFO'] = '/dashboard'
923
-
924
- if options['url']
925
- url = URI.parse(options['url'])
926
- env['rack.url_scheme'] = url.scheme
927
- env['HTTP_HOST'] = url.host
928
- if (url.scheme == 'http' && url.port != 80) || (url.scheme == 'https' && url.port != 443)
929
- env['HTTP_HOST'] += ":#{url.port}"
930
- end
931
- env['SERVER_NAME'] = url.host
932
- env['REQUEST_URI'] = url.request_uri
933
- env['ORIGINAL_FULLPATH'] = url.request_uri
934
- env['QUERY_STRING'] = url.query
935
- env['REQUEST_PATH'] = url.path
936
- env['PATH_INFO'] = url.path
88
+ class RackMock
89
+ def call(env)
90
+ [200, {'Content-Type' => 'text/html'}, ['']]
937
91
  end
938
- return env.merge(options)
939
92
  end
940
93
  end