wovnrb 3.5.0 → 3.6.0

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.en.md +30 -13
  3. data/build.sh +7 -0
  4. data/docker/nginx/Dockerfile +18 -0
  5. data/docker/nginx/README.md +13 -0
  6. data/docker/nginx/build.sh +8 -0
  7. data/docker/nginx/scripts/configure_sshd.sh +25 -0
  8. data/docker/nginx/scripts/startup.sh +10 -0
  9. data/docker/nginx/wovnrb.conf +19 -0
  10. data/docker/rails/Dockerfile +9 -0
  11. data/docker/rails/Dockerfile.ECS +17 -0
  12. data/docker/rails/TestSite/Gemfile +0 -2
  13. data/docker/rails/TestSite/app/controllers/custom_response_controller.rb +1 -1
  14. data/docker/rails/TestSite/config/environments/development.rb +2 -0
  15. data/docker/rails/TestSite/config/environments/production.rb +2 -0
  16. data/docker/rails/TestSite/config/environments/test.rb +2 -0
  17. data/docker/rails/TestSite/public/index.html +1 -1
  18. data/docker/rails/TestSite/start.sh +2 -11
  19. data/docker/rails/TestSite/start_rails.sh +9 -0
  20. data/docker/rails/TestSite/yarn.lock +3 -3
  21. data/docker/scripts/jenkins/build.sh +45 -0
  22. data/docker/scripts/jenkins/tag_and_push_image.sh +30 -0
  23. data/docker/scripts/jenkins/taskdef.json +104 -0
  24. data/docker/scripts/jenkins/taskdef.json.bak +99 -0
  25. data/lib/wovnrb/api_translator.rb +6 -1
  26. data/lib/wovnrb/headers.rb +19 -2
  27. data/lib/wovnrb/services/html_converter.rb +17 -1
  28. data/lib/wovnrb/services/url.rb +136 -0
  29. data/lib/wovnrb/store.rb +8 -2
  30. data/lib/wovnrb/url_language_switcher.rb +124 -0
  31. data/lib/wovnrb/version.rb +1 -1
  32. data/lib/wovnrb.rb +3 -1
  33. data/test/lib/api_translator_test.rb +44 -0
  34. data/test/lib/services/html_converter_test.rb +210 -37
  35. data/test/lib/services/url_test.rb +308 -0
  36. data/test/lib/url_language_switcher_test.rb +798 -0
  37. data/test/lib/wovnrb_test.rb +2 -1
  38. data/test/test_helper.rb +4 -1
  39. metadata +22 -3
@@ -0,0 +1,308 @@
1
+ require 'test_helper'
2
+
3
+ module Wovnrb
4
+ class URLTest < WovnMiniTest
5
+ def test_normalize_url
6
+ assert_equal('http://domain.com', Wovnrb::URL.normalize_url('http://domain.com'))
7
+ assert_equal('http://domain.com', Wovnrb::URL.normalize_url('http://domain.com '))
8
+ assert_equal('http://domain.com', Wovnrb::URL.normalize_url(' http://domain.com'))
9
+ assert_equal('http://domain.com', Wovnrb::URL.normalize_url("\u200b http://domain.com"))
10
+ assert_equal('http://domain.com', Wovnrb::URL.normalize_url(" http:\u200b//domain.com\u200b"))
11
+ end
12
+
13
+ def test_resolve_absolute_uri
14
+ assert_equal('http://domain.com', Wovnrb::URL.resolve_absolute_uri('http://domain.com', '').to_s)
15
+ assert_equal('http://domain.com/', Wovnrb::URL.resolve_absolute_uri('http://domain.com', '/').to_s)
16
+ assert_equal('http://domain.com/some/path', Wovnrb::URL.resolve_absolute_uri('http://domain.com', '/some/path').to_s)
17
+ assert_equal('http://domain.com/some/path', Wovnrb::URL.resolve_absolute_uri('http://domain.com/', '/some/path').to_s)
18
+ assert_equal('http://domain.com/some/path/', Wovnrb::URL.resolve_absolute_uri('http://domain.com/', '/some/path/').to_s)
19
+ assert_equal('http://domain.com/garbage_relative_path/', Wovnrb::URL.resolve_absolute_uri('http://domain.com/', '/../../garbage_relative_path/').to_s)
20
+ assert_equal('http://domain.com/root.html', Wovnrb::URL.resolve_absolute_uri('http://domain.com/dir1/dir2/page.html', '/.././../root.html').to_s)
21
+ assert_equal('http://domain.com/root.html?baz=123', Wovnrb::URL.resolve_absolute_uri('http://domain.com/dir1/dir2/page.html?foo=bar', '/.././../root.html?baz=123').to_s)
22
+ assert_equal('http://domain.com/some/path', Wovnrb::URL.resolve_absolute_uri('http://domain.com?foo=bar', '/some/path').to_s)
23
+ assert_equal('http://another_absolute_url.com/dir/', Wovnrb::URL.resolve_absolute_uri('http://domain.com?foo=bar', 'http://another_absolute_url.com/dir/').to_s)
24
+ assert_equal('http://another_absolute_url.com/dir/page', Wovnrb::URL.resolve_absolute_uri('http://domain.com?foo=bar', 'http://another_absolute_url.com/dir/../dir/page').to_s)
25
+ end
26
+
27
+ def test_resolve_absolute_path
28
+ assert_equal('', Wovnrb::URL.resolve_absolute_path('http://domain.com', ''))
29
+ assert_equal('/', Wovnrb::URL.resolve_absolute_path('http://domain.com/', ''))
30
+ assert_equal('/', Wovnrb::URL.resolve_absolute_path('http://domain.com', '/'))
31
+ assert_equal('/foo/bar', Wovnrb::URL.resolve_absolute_path('http://domain.com', '/foo/bar'))
32
+ assert_equal('/foo/bar', Wovnrb::URL.resolve_absolute_path('http://domain.com', 'foo/bar'))
33
+ assert_equal('/dir/foo/bar', Wovnrb::URL.resolve_absolute_path('http://domain.com/dir/', 'foo/bar'))
34
+ assert_equal('/dir/bar', Wovnrb::URL.resolve_absolute_path('http://domain.com/dir/', 'foo/../bar'))
35
+ assert_equal('/dir/bar?query=123#hash', Wovnrb::URL.resolve_absolute_path('http://domain.com/dir/', 'foo/../bar?query=123#hash'))
36
+ assert_equal('/fr/wovn_aaa/news/', Wovnrb::URL.resolve_absolute_path('https://pre.avex.jp/wovn_aaa/news/', '/fr/wovn_aaa/news/../news/'))
37
+ end
38
+
39
+ def test_absolute_url
40
+ assert(Wovnrb::URL.absolute_url?('//foo.com'))
41
+ assert(Wovnrb::URL.absolute_url?('http://foo.com'))
42
+ assert(Wovnrb::URL.absolute_url?('https://foo.com'))
43
+ assert_not(Wovnrb::URL.absolute_url?('ftp://foo.com'))
44
+ assert_not(Wovnrb::URL.absolute_url?('foo'))
45
+ assert_not(Wovnrb::URL.absolute_url?('/foo'))
46
+ assert_not(Wovnrb::URL.absolute_url?('../foo'))
47
+ end
48
+
49
+ def test_join_paths
50
+ assert_equal('', Wovnrb::URL.join_paths('', ''))
51
+ assert_equal('/', Wovnrb::URL.join_paths('', '/'))
52
+ assert_equal('/foo', Wovnrb::URL.join_paths('', '/foo'))
53
+ assert_equal('/foo/', Wovnrb::URL.join_paths('', '/foo/'))
54
+
55
+ assert_equal('/', Wovnrb::URL.join_paths('/', ''))
56
+ assert_equal('/foo', Wovnrb::URL.join_paths('/foo', ''))
57
+ assert_equal('/foo/', Wovnrb::URL.join_paths('/foo/', ''))
58
+
59
+ assert_equal('/foo/', Wovnrb::URL.join_paths('/foo/', ''))
60
+ assert_equal('/foo/bar', Wovnrb::URL.join_paths('/foo', 'bar'))
61
+ assert_equal('/foo/bar', Wovnrb::URL.join_paths('/foo/', 'bar'))
62
+ assert_equal('/foo/bar', Wovnrb::URL.join_paths('/foo/', '/bar'))
63
+ assert_equal('/foo/bar/', Wovnrb::URL.join_paths('/foo/', 'bar/'))
64
+ assert_equal('/foo/bar/', Wovnrb::URL.join_paths('/foo/', '/bar/'))
65
+ assert_equal('/foo/bar/', Wovnrb::URL.join_paths('/foo', 'bar/'))
66
+ end
67
+
68
+ def test_absolute_path
69
+ assert_not(Wovnrb::URL.absolute_path?('http://foo.com'))
70
+ assert_not(Wovnrb::URL.absolute_path?('https://foo.com'))
71
+ assert_not(Wovnrb::URL.absolute_path?('foo'))
72
+ assert_not(Wovnrb::URL.absolute_path?('../foo'))
73
+ assert(Wovnrb::URL.absolute_path?('/foo'))
74
+ end
75
+
76
+ def test_relative_path
77
+ assert_not(Wovnrb::URL.relative_path?('http://foo.com'))
78
+ assert_not(Wovnrb::URL.relative_path?('https://foo.com'))
79
+ assert(Wovnrb::URL.relative_path?('foo'))
80
+ assert(Wovnrb::URL.relative_path?('../foo'))
81
+ assert(Wovnrb::URL.relative_path?('./foo'))
82
+ assert_not(Wovnrb::URL.relative_path?('/foo'))
83
+ end
84
+
85
+ def test_prepend_path
86
+ assert_equal('http://www.google.com/new_dir/test/', Wovnrb::URL.prepend_path('http://www.google.com/test/', 'new_dir'))
87
+ end
88
+
89
+ def test_prepend_path_long_path
90
+ assert_equal('http://www.google.com/new_dir/test/try/again/', Wovnrb::URL.prepend_path('http://www.google.com/test/try/again/', 'new_dir'))
91
+ end
92
+
93
+ def test_prepend_path_no_trailing_slash
94
+ assert_equal('http://www.google.com/new_dir/test', Wovnrb::URL.prepend_path('http://www.google.com/test', 'new_dir'))
95
+ end
96
+
97
+ def test_prepend_path_long_path_no_trailing_slash
98
+ assert_equal('http://www.google.com/new_dir/test/try/again', Wovnrb::URL.prepend_path('http://www.google.com/test/try/again', 'new_dir'))
99
+ end
100
+
101
+ def test_prepend_path_no_path
102
+ assert_equal('http://www.google.com/new_dir/', Wovnrb::URL.prepend_path('http://www.google.com/', 'new_dir'))
103
+ end
104
+
105
+ def test_prepend_path_no_path_no_trailing_slash
106
+ assert_equal('http://www.google.com/new_dir', Wovnrb::URL.prepend_path('http://www.google.com', 'new_dir'))
107
+ end
108
+
109
+ def test_prepend_path_no_host
110
+ assert_equal('http://google.com/new_dir/test/', Wovnrb::URL.prepend_path('http://google.com/test/', 'new_dir'))
111
+ end
112
+
113
+ def test_prepend_path_no_host_long_path
114
+ assert_equal('http://google.com/new_dir/test/try/again/', Wovnrb::URL.prepend_path('http://google.com/test/try/again/', 'new_dir'))
115
+ end
116
+
117
+ def test_prepend_path_no_host_no_trailing_slash
118
+ assert_equal('http://google.com/new_dir/test', Wovnrb::URL.prepend_path('http://google.com/test', 'new_dir'))
119
+ end
120
+
121
+ def test_prepend_path_no_host_long_path_no_trailing_slash
122
+ assert_equal('http://google.com/new_dir/test/try/again', Wovnrb::URL.prepend_path('http://google.com/test/try/again', 'new_dir'))
123
+ end
124
+
125
+ def test_prepend_path_no_host_no_path
126
+ assert_equal('http://google.com/new_dir/', Wovnrb::URL.prepend_path('http://google.com/', 'new_dir'))
127
+ end
128
+
129
+ def test_prepend_path_no_host_no_path_no_trailing_slash
130
+ assert_equal('http://google.com/new_dir', Wovnrb::URL.prepend_path('http://google.com', 'new_dir'))
131
+ end
132
+
133
+ def test_prepend_path_no_protocol
134
+ assert_equal('www.facebook.com/dir/test/', Wovnrb::URL.prepend_path('www.facebook.com/test/', 'dir'))
135
+ end
136
+
137
+ def test_prepend_path_no_protocol_long_path
138
+ assert_equal('www.facebook.com/dir/test/try/again/', Wovnrb::URL.prepend_path('www.facebook.com/test/try/again/', 'dir'))
139
+ end
140
+
141
+ def test_prepend_path_no_protocol_no_trailing_slash
142
+ assert_equal('www.facebook.com/dir/test', Wovnrb::URL.prepend_path('www.facebook.com/test', 'dir'))
143
+ end
144
+
145
+ def test_prepend_path_no_protocol_long_path_no_trailing_slash
146
+ assert_equal('www.facebook.com/dir/test/try/again', Wovnrb::URL.prepend_path('www.facebook.com/test/try/again', 'dir'))
147
+ end
148
+
149
+ def test_prepend_path_no_protocol_no_path
150
+ assert_equal('www.facebook.com/dir/', Wovnrb::URL.prepend_path('www.facebook.com/', 'dir'))
151
+ end
152
+
153
+ def test_prepend_path_no_protocol_no_path_no_trailing_slash
154
+ assert_equal('www.facebook.com/dir', Wovnrb::URL.prepend_path('www.facebook.com', 'dir'))
155
+ end
156
+
157
+ def test_prepend_path_no_protocoli_no_host
158
+ assert_equal('facebook.com/dir/test/', Wovnrb::URL.prepend_path('facebook.com/test/', 'dir'))
159
+ end
160
+
161
+ def test_prepend_path_no_protocol_no_host_long_path
162
+ assert_equal('facebook.com/dir/test/try/again/', Wovnrb::URL.prepend_path('facebook.com/test/try/again/', 'dir'))
163
+ end
164
+
165
+ def test_prepend_path_no_protocol_no_host_no_trailing_slash
166
+ assert_equal('facebook.com/dir/test', Wovnrb::URL.prepend_path('facebook.com/test', 'dir'))
167
+ end
168
+
169
+ def test_prepend_path_no_protocol_no_host_long_path_no_trailing_slash
170
+ assert_equal('facebook.com/dir/test/try/again', Wovnrb::URL.prepend_path('facebook.com/test/try/again', 'dir'))
171
+ end
172
+
173
+ def test_prepend_path_no_protocol_no_host_no_path
174
+ assert_equal('facebook.com/dir/', Wovnrb::URL.prepend_path('facebook.com/', 'dir'))
175
+ end
176
+
177
+ def test_prepend_path_no_protocol_no_host_no_path_no_trailing_slash
178
+ assert_equal('facebook.com/dir', Wovnrb::URL.prepend_path('facebook.com', 'dir'))
179
+ end
180
+
181
+ def test_prepend_path_no_protocol_with_double_slash
182
+ assert_equal('//www.yahoo.com/dir/test/', Wovnrb::URL.prepend_path('//www.yahoo.com/test/', 'dir'))
183
+ end
184
+
185
+ def test_prepend_path_no_protocol_long_path_with_double_slash
186
+ assert_equal('//www.yahoo.com/dir/test/try/again/', Wovnrb::URL.prepend_path('//www.yahoo.com/test/try/again/', 'dir'))
187
+ end
188
+
189
+ def test_prepend_path_no_protocol_no_trailing_slash_with_double_slash
190
+ assert_equal('//www.yahoo.com/dir/test', Wovnrb::URL.prepend_path('//www.yahoo.com/test', 'dir'))
191
+ end
192
+
193
+ def test_prepend_path_no_protocol_long_path_no_trailing_slash_with_double_slash
194
+ assert_equal('//www.yahoo.com/dir/test/try/again', Wovnrb::URL.prepend_path('//www.yahoo.com/test/try/again', 'dir'))
195
+ end
196
+
197
+ def test_prepend_path_no_protocol_no_path_with_double_slash
198
+ assert_equal('//www.yahoo.com/dir/', Wovnrb::URL.prepend_path('//www.yahoo.com/', 'dir'))
199
+ end
200
+
201
+ def test_prepend_path_no_protocol_no_path_no_trailing_slash_with_double_slash
202
+ assert_equal('//www.yahoo.com/dir', Wovnrb::URL.prepend_path('//www.yahoo.com', 'dir'))
203
+ end
204
+
205
+ def test_prepend_path_no_protocol_no_host_with_double_slash
206
+ assert_equal('//yahoo.com/dir/test/', Wovnrb::URL.prepend_path('//yahoo.com/test/', 'dir'))
207
+ end
208
+
209
+ def test_prepend_path_no_protocol_no_host_long_path_with_double_slash
210
+ assert_equal('//yahoo.com/dir/test/try/again/', Wovnrb::URL.prepend_path('//yahoo.com/test/try/again/', 'dir'))
211
+ end
212
+
213
+ def test_prepend_path_no_protocol_no_host_no_trailing_slash_with_double_slash
214
+ assert_equal('//yahoo.com/dir/test', Wovnrb::URL.prepend_path('//yahoo.com/test', 'dir'))
215
+ end
216
+
217
+ def test_prepend_path_no_protocol_no_host_long_path_no_trailing_slash_with_double_slash
218
+ assert_equal('//yahoo.com/dir/test/try/again', Wovnrb::URL.prepend_path('//yahoo.com/test/try/again', 'dir'))
219
+ end
220
+
221
+ def test_prepend_path_no_protocol_no_host_no_path_with_double_slash
222
+ assert_equal('//yahoo.com/dir/', Wovnrb::URL.prepend_path('//yahoo.com/', 'dir'))
223
+ end
224
+
225
+ def test_prepend_path_no_protocol_no_host_no_path_no_trailing_slash_with_double_slash
226
+ assert_equal('//yahoo.com/dir', Wovnrb::URL.prepend_path('//yahoo.com', 'dir'))
227
+ end
228
+
229
+ def test_valid_protocol?
230
+ assert_equal(true, Wovnrb::URL.valid_protocol?('http://foo.com'))
231
+ assert_equal(true, Wovnrb::URL.valid_protocol?('https://foo.com/index.html'))
232
+ assert_equal(false, Wovnrb::URL.valid_protocol?('data:;base64,iVBORw0KGgo='))
233
+ assert_equal(false, Wovnrb::URL.valid_protocol?('tel:+817044446666'))
234
+ assert_equal(false, Wovnrb::URL.valid_protocol?('ftp://site.com:8000/cat.png'))
235
+
236
+ assert_equal(true, Wovnrb::URL.valid_protocol?('site.com:8000/index.html'))
237
+ assert_equal(true, Wovnrb::URL.valid_protocol?('/page/index.html?user=tom'))
238
+ assert_equal(true, Wovnrb::URL.valid_protocol?('../index.html'))
239
+ end
240
+
241
+ def test_file?
242
+ assert_equal(false, Wovnrb::URL.file?(''))
243
+ assert_equal(false, Wovnrb::URL.file?('example.com'))
244
+ assert_equal(false, Wovnrb::URL.file?('Download rain.mp3 for background noise'))
245
+ assert_equal(false, Wovnrb::URL.file?('http://example.com?q=dog.png'))
246
+ assert_equal(false, Wovnrb::URL.file?('https://site.jp'))
247
+ assert_equal(false, Wovnrb::URL.file?('https://site.jp/'))
248
+ assert_equal(false, Wovnrb::URL.file?('https://site.jp?user=tom'))
249
+ assert_equal(false, Wovnrb::URL.file?('https://site.jp/?user=tom'))
250
+ assert_equal(false, Wovnrb::URL.file?('https://site.jp#top'))
251
+ assert_equal(false, Wovnrb::URL.file?('https://site.jp/#top'))
252
+ assert_equal(false, Wovnrb::URL.file?('https://site.jp/index.html'))
253
+
254
+ assert_equal(true, Wovnrb::URL.file?('https://example.com/images/baloon.png'))
255
+ assert_equal(true, Wovnrb::URL.file?('/new/stan.mp3'))
256
+ assert_equal(true, Wovnrb::URL.file?('https://box.com/user/chad/beef_stew.zip'))
257
+ assert_equal(true, Wovnrb::URL.file?('https://site.jp/beef_stew.zip'))
258
+ assert_equal(true, Wovnrb::URL.file?('/dir/some.pdf'))
259
+ assert_equal(true, Wovnrb::URL.file?('/dir/some.doc'))
260
+ assert_equal(true, Wovnrb::URL.file?('/dir/some.docx'))
261
+ assert_equal(true, Wovnrb::URL.file?('/dir/some.xls'))
262
+ assert_equal(true, Wovnrb::URL.file?('/dir/some.xlsx'))
263
+ assert_equal(true, Wovnrb::URL.file?('/dir/some.xlsm'))
264
+ end
265
+
266
+ def test_path_and_query
267
+ assert_equal('', Wovnrb::URL.path_and_query(Addressable::URI.parse('http://domain.com')))
268
+ assert_equal('?foo=bar', Wovnrb::URL.path_and_query(Addressable::URI.parse('http://domain.com?foo=bar')))
269
+ assert_equal('?', Wovnrb::URL.path_and_query(Addressable::URI.parse('http://domain.com?')))
270
+
271
+ assert_equal('/', Wovnrb::URL.path_and_query(Addressable::URI.parse('http://domain.com/')))
272
+ assert_equal('/?foo=bar', Wovnrb::URL.path_and_query(Addressable::URI.parse('http://domain.com/?foo=bar')))
273
+
274
+ assert_equal('/dir/path', Wovnrb::URL.path_and_query(Addressable::URI.parse('http://domain.com/dir/path')))
275
+ assert_equal('/dir/path?foo=bar', Wovnrb::URL.path_and_query(Addressable::URI.parse('http://domain.com/dir/path?foo=bar')))
276
+ end
277
+
278
+ def test_path_and_query_and_hash
279
+ assert_equal('', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com')))
280
+ assert_equal('?', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com?')))
281
+ assert_equal('?foo=bar', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com?foo=bar')))
282
+ assert_equal('#fragment', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com#fragment')))
283
+ assert_equal('/', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com/')))
284
+ assert_equal('/#fragment', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com/#fragment')))
285
+ assert_equal('/?foo=bar', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com/?foo=bar')))
286
+ assert_equal('/?foo=bar#fragment', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com/?foo=bar#fragment')))
287
+ assert_equal('/dir/path', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com/dir/path')))
288
+ assert_equal('/dir/path#fragment', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com/dir/path#fragment')))
289
+ assert_equal('/dir/path?foo=bar', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com/dir/path?foo=bar')))
290
+ assert_equal('/dir/path?foo=bar#fragment', Wovnrb::URL.path_and_query_and_hash(Addressable::URI.parse('http://domain.com/dir/path?foo=bar#fragment')))
291
+ end
292
+
293
+ def test_change_protocol
294
+ assert_equal('https://domain.com', Wovnrb::URL.change_protocol(Addressable::URI.parse('http://domain.com'), 'https').to_s)
295
+ assert_equal('http://domain.com', Wovnrb::URL.change_protocol(Addressable::URI.parse('https://domain.com'), 'http').to_s)
296
+ assert_equal('//domain.com', Wovnrb::URL.change_protocol(Addressable::URI.parse('https://domain.com'), nil).to_s)
297
+ assert_equal('http://domain.com', Wovnrb::URL.change_protocol(Addressable::URI.parse('//domain.com'), 'http').to_s)
298
+ end
299
+
300
+ def test_normalize_path_slash
301
+ assert_equal('/en/dir1/dir2/', Wovnrb::URL.normalize_path_slash('/dir1/dir2/', '/en/dir1/dir2/'))
302
+ assert_equal('/en/dir1/dir2', Wovnrb::URL.normalize_path_slash('/dir1/dir2', '/en/dir1/dir2/'))
303
+ assert_equal('/en/dir1/dir2/', Wovnrb::URL.normalize_path_slash('/dir1/dir2/', '/en/dir1/dir2'))
304
+ assert_equal('/', Wovnrb::URL.normalize_path_slash('/', '/'))
305
+ assert_equal('', Wovnrb::URL.normalize_path_slash('', '/'))
306
+ end
307
+ end
308
+ end