wovnrb 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -0
  3. data/.gitignore +2 -0
  4. data/.rubocop.yml +1 -0
  5. data/.rubocop_todo.yml +308 -0
  6. data/Rakefile +13 -14
  7. data/lib/wovnrb.rb +43 -98
  8. data/lib/wovnrb/api_translator.rb +143 -0
  9. data/lib/wovnrb/headers.rb +78 -92
  10. data/lib/wovnrb/helpers/nokogumbo_helper.rb +1 -1
  11. data/lib/wovnrb/lang.rb +93 -125
  12. data/lib/wovnrb/railtie.rb +5 -7
  13. data/lib/wovnrb/services/glob.rb +3 -3
  14. data/lib/wovnrb/services/html_converter.rb +192 -0
  15. data/lib/wovnrb/services/html_replace_marker.rb +38 -0
  16. data/lib/wovnrb/services/wovn_logger.rb +8 -4
  17. data/lib/wovnrb/settings.rb +5 -3
  18. data/lib/wovnrb/store.rb +35 -26
  19. data/lib/wovnrb/text_caches/cache_base.rb +3 -2
  20. data/lib/wovnrb/text_caches/memory_cache.rb +2 -2
  21. data/lib/wovnrb/version.rb +1 -1
  22. data/test/fixtures/html/test.html +8 -0
  23. data/test/fixtures/html/test_translated.html +8 -0
  24. data/test/lib/api_translator_test.rb +109 -0
  25. data/test/lib/headers_test.rb +84 -55
  26. data/test/lib/lang_test.rb +157 -357
  27. data/test/lib/services/glob_test.rb +1 -1
  28. data/test/lib/services/html_converter_test.rb +166 -0
  29. data/test/lib/services/html_replace_marker_test.rb +75 -0
  30. data/test/lib/services/wovn_logger_test.rb +6 -6
  31. data/test/lib/store_test.rb +25 -69
  32. data/test/lib/text_caches/cache_base_test.rb +1 -1
  33. data/test/lib/text_caches/memory_cache_test.rb +10 -11
  34. data/test/lib/wovnrb_test.rb +77 -310
  35. data/test/test_helper.rb +22 -32
  36. data/wovnrb.gemspec +35 -44
  37. metadata +86 -205
  38. data/ext/dom/Makefile +0 -239
  39. data/lib/wovnrb/api_data.rb +0 -59
  40. data/lib/wovnrb/html_replacers/image_replacer.rb +0 -69
  41. data/lib/wovnrb/html_replacers/input_replacer.rb +0 -38
  42. data/lib/wovnrb/html_replacers/link_replacer.rb +0 -78
  43. data/lib/wovnrb/html_replacers/meta_replacer.rb +0 -28
  44. data/lib/wovnrb/html_replacers/replacer_base.rb +0 -49
  45. data/lib/wovnrb/html_replacers/script_replacer.rb +0 -39
  46. data/lib/wovnrb/html_replacers/text_replacer.rb +0 -21
  47. data/lib/wovnrb/html_replacers/unified_values/dst_swapping_targets_creator.rb +0 -76
  48. data/lib/wovnrb/html_replacers/unified_values/element_category.rb +0 -242
  49. data/lib/wovnrb/html_replacers/unified_values/node_swapping_targets_creator.rb +0 -134
  50. data/lib/wovnrb/html_replacers/unified_values/text_replacer.rb +0 -35
  51. data/lib/wovnrb/html_replacers/unified_values/text_scraper.rb +0 -152
  52. data/lib/wovnrb/html_replacers/unified_values/values_stack.rb +0 -65
  53. data/lib/wovnrb/services/url.rb +0 -12
  54. data/lib/wovnrb/services/value_agent.rb +0 -9
  55. data/test/fixtures/unified_values/site_html/simple_actual.html +0 -96
  56. data/test/fixtures/unified_values/site_html/simple_expected.json +0 -251
  57. data/test/fixtures/unified_values/site_html/wovn.io_actual.html +0 -686
  58. data/test/fixtures/unified_values/site_html/wovn.io_expected.json +0 -543
  59. data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_actual.html +0 -1024
  60. data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_expected.json +0 -3345
  61. data/test/fixtures/unified_values/small_html/block_inside_inline_actual.html +0 -12
  62. data/test/fixtures/unified_values/small_html/block_inside_inline_expected.json +0 -22
  63. data/test/fixtures/unified_values/small_html/br_tag_actual.html +0 -10
  64. data/test/fixtures/unified_values/small_html/br_tag_expected.json +0 -12
  65. data/test/fixtures/unified_values/small_html/comment_tag_actual.html +0 -12
  66. data/test/fixtures/unified_values/small_html/comment_tag_expected.json +0 -10
  67. data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_actual.html +0 -7
  68. data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_expected.json +0 -11
  69. data/test/fixtures/unified_values/small_html/deep_nested_block_actual.html +0 -14
  70. data/test/fixtures/unified_values/small_html/deep_nested_block_expected.json +0 -8
  71. data/test/fixtures/unified_values/small_html/deep_nested_inline_actual.html +0 -20
  72. data/test/fixtures/unified_values/small_html/deep_nested_inline_expected.json +0 -20
  73. data/test/fixtures/unified_values/small_html/empty_tag_actual.html +0 -10
  74. data/test/fixtures/unified_values/small_html/empty_tag_expected.json +0 -12
  75. data/test/fixtures/unified_values/small_html/empty_text_actual.html +0 -12
  76. data/test/fixtures/unified_values/small_html/empty_text_expected.json +0 -1
  77. data/test/fixtures/unified_values/small_html/ignore_tag_actual.html +0 -12
  78. data/test/fixtures/unified_values/small_html/ignore_tag_expected.json +0 -16
  79. data/test/fixtures/unified_values/small_html/ignored_class_actual.html +0 -10
  80. data/test/fixtures/unified_values/small_html/ignored_class_expected.json +0 -13
  81. data/test/fixtures/unified_values/small_html/img_actual.html +0 -12
  82. data/test/fixtures/unified_values/small_html/img_expected.json +0 -23
  83. data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_actual.html +0 -10
  84. data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_expected.json +0 -16
  85. data/test/fixtures/unified_values/small_html/nested_text_value_actual.html +0 -10
  86. data/test/fixtures/unified_values/small_html/nested_text_value_expected.json +0 -12
  87. data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_actual.html +0 -10
  88. data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_expected.json +0 -14
  89. data/test/fixtures/unified_values/small_html/option_tag_actual.html +0 -9
  90. data/test/fixtures/unified_values/small_html/option_tag_expected.json +0 -13
  91. data/test/fixtures/unified_values/small_html/text_different_inline_each_other_actual.html +0 -10
  92. data/test/fixtures/unified_values/small_html/text_different_inline_each_other_expected.json +0 -22
  93. data/test/fixtures/unified_values/small_html/text_in_svg_actual.html +0 -9
  94. data/test/fixtures/unified_values/small_html/text_in_svg_expected.json +0 -8
  95. data/test/fixtures/unified_values/small_html/text_with_html_entity_actual.html +0 -6
  96. data/test/fixtures/unified_values/small_html/text_with_html_entity_expected.json +0 -8
  97. data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_actual.html +0 -12
  98. data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_expected.json +0 -24
  99. data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_actual.html +0 -12
  100. data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_expected.json +0 -14
  101. data/test/fixtures/unified_values/small_html/wovn_ignore_actual.html +0 -10
  102. data/test/fixtures/unified_values/small_html/wovn_ignore_expected.json +0 -13
  103. data/test/lib/api_data_test.rb +0 -83
  104. data/test/lib/html_replacers/image_replacer_test.rb +0 -165
  105. data/test/lib/html_replacers/input_replacer_test.rb +0 -140
  106. data/test/lib/html_replacers/link_replacer_test.rb +0 -328
  107. data/test/lib/html_replacers/meta_replacer_test.rb +0 -157
  108. data/test/lib/html_replacers/replacer_base_test.rb +0 -128
  109. data/test/lib/html_replacers/script_replacer_test.rb +0 -139
  110. data/test/lib/html_replacers/text_replacer_test.rb +0 -99
  111. data/test/lib/html_replacers/unified_values/dst_swapping_targets_creator_test.rb +0 -137
  112. data/test/lib/html_replacers/unified_values/element_category_test.rb +0 -49
  113. data/test/lib/html_replacers/unified_values/node_swapping_targets_creator_test.rb +0 -137
  114. data/test/lib/html_replacers/unified_values/text_replacer_test.rb +0 -270
  115. data/test/lib/html_replacers/unified_values/text_scraper_test.rb +0 -121
  116. data/test/lib/html_replacers/unified_values/values_stack_test.rb +0 -122
  117. data/test/lib/services/url_test.rb +0 -9
  118. data/test/lib/services/value_agent_test.rb +0 -32
  119. data/test/services/url_test.rb +0 -163
  120. data/values/values +0 -1
@@ -1,328 +0,0 @@
1
- require 'test_helper'
2
- require 'webmock/minitest'
3
-
4
- module Wovnrb
5
- class ReplacerBaseTest < WovnMiniTest
6
- def test_replace
7
- store = Store.instance
8
- replacer = LinkReplacer.new(store, 'query', get_header)
9
- dom = Wovnrb.get_dom('<a href="/index.html">link text</a>')
10
- replacer.replace(dom, Lang.new('en'))
11
-
12
- link = dom.xpath('//a')[0].get_attribute('href')
13
- assert_equal('/index.html?wovn=en', link)
14
- end
15
-
16
- def test_replace_multiple
17
- store = Store.instance
18
- replacer = LinkReplacer.new(store, 'query', get_header)
19
- dom = Wovnrb.get_dom('<a href="/index.html">link text</a><div>aaa</div><a href="/index2.html">link text</a>')
20
- replacer.replace(dom, Lang.new('en'))
21
-
22
- link = dom.xpath('//a')[0].get_attribute('href')
23
- link2 = dom.xpath('//a')[1].get_attribute('href')
24
-
25
- assert_equal('/index.html?wovn=en', link)
26
- assert_equal('/index2.html?wovn=en', link2)
27
- end
28
-
29
- def test_replace_ignore
30
- store = Store.instance
31
- replacer = LinkReplacer.new(store, 'query', get_header)
32
- dom = Wovnrb.get_dom('<a wovn-ignore href="/index.html">link text</a>')
33
- replacer.replace(dom, Lang.new('en'))
34
-
35
- link = dom.xpath('//a')[0].get_attribute('href')
36
- assert_equal('/index.html', link)
37
- end
38
-
39
- def test_replace_empty_javascript_link_query
40
- store = Store.instance
41
- replacer = LinkReplacer.new(store, 'query', get_header)
42
- dom = Wovnrb.get_dom('<a href="javascript:void(0);">link text</a>')
43
- replacer.replace(dom, Lang.new('en'))
44
-
45
- link = dom.xpath('//a')[0].get_attribute('href')
46
- assert_equal('javascript:void(0);', link)
47
- end
48
-
49
- def test_replace_javascript_code_link_query
50
- store = Store.instance
51
- replacer = LinkReplacer.new(store, 'query', get_header)
52
- dom = Wovnrb.get_dom('<a href="javascript:onclick($(\'.any\').slideToggle());">link text</a>')
53
- replacer.replace(dom, Lang.new('en'))
54
-
55
- link = dom.xpath('//a')[0].get_attribute('href')
56
- assert_equal('javascript:onclick($(\'.any\').slideToggle());', link)
57
- end
58
-
59
- def test_replace_uppercased_javascript_code_link_query
60
- store = Store.instance
61
- replacer = LinkReplacer.new(store, 'query', get_header)
62
- dom = Wovnrb.get_dom('<a href="JAVASCRIPT:onclick($(\'.any\').slideToggle());">link text</a>')
63
- replacer.replace(dom, Lang.new('en'))
64
-
65
- link = dom.xpath('//a')[0].get_attribute('href')
66
- assert_equal('JAVASCRIPT:onclick($(\'.any\').slideToggle());', link)
67
- end
68
-
69
- def test_replace_empty_javascript_link_path
70
- store = Store.instance
71
- replacer = LinkReplacer.new(store, 'path', get_header)
72
- dom = Wovnrb.get_dom('<a href="javascript:void(0);">link text</a>')
73
- replacer.replace(dom, Lang.new('en'))
74
-
75
- link = dom.xpath('//a')[0].get_attribute('href')
76
- assert_equal('javascript:void(0);', link)
77
- end
78
-
79
- def test_replace_javascript_code_link_path
80
- store = Store.instance
81
- replacer = LinkReplacer.new(store, 'path', get_header)
82
- dom = Wovnrb.get_dom('<a href="javascript:onclick($(\'.any\').slideToggle());">link text</a>')
83
- replacer.replace(dom, Lang.new('en'))
84
-
85
- link = dom.xpath('//a')[0].get_attribute('href')
86
- assert_equal('javascript:onclick($(\'.any\').slideToggle());', link)
87
- end
88
-
89
- def test_replace_uppercased_javascript_code_link_path
90
- store = Store.instance
91
- replacer = LinkReplacer.new(store, 'path', get_header)
92
- dom = Wovnrb.get_dom('<a href="JAVASCRIPT:onclick($(\'.any\').slideToggle());">link text</a>')
93
- replacer.replace(dom, Lang.new('en'))
94
-
95
- link = dom.xpath('//a')[0].get_attribute('href')
96
- assert_equal('JAVASCRIPT:onclick($(\'.any\').slideToggle());', link)
97
- end
98
-
99
- def test_replace_link_path
100
- store = Store.instance
101
- replacer = LinkReplacer.new(store, 'path', get_header)
102
- dom = Wovnrb.get_dom('<a href="/index.html">link text</a>')
103
- replacer.replace(dom, Lang.new('en'))
104
-
105
- link = dom.xpath('//a')[0].get_attribute('href')
106
- assert_equal('/en/index.html', link)
107
- end
108
-
109
- def test_replace_link_path_with_canonical
110
- store = Store.instance
111
- replacer = LinkReplacer.new(store, 'path', get_header)
112
- dom = Wovnrb.get_dom('<html><head><link rel="canonical" href="http://wovn.io/hello/index.html"></head><body>hello</body></html>')
113
- replacer.replace(dom, Lang.new('en'))
114
- canonical_href = dom.xpath('//link').find { |d| d.attributes['rel'].value == 'canonical' }.attributes['href'].value
115
- assert_equal('http://wovn.io/en/hello/index.html', canonical_href)
116
- end
117
-
118
- def test_replace_link_with_style
119
- store = Store.instance
120
- replacer = LinkReplacer.new(store, 'path', get_header)
121
- dom = Wovnrb.get_dom('<html><head><link rel="stylesheet" type="text/css" href="http://wovn.io/hello/index.css"></head><body>hello</body></html>')
122
- replacer.replace(dom, Lang.new('en'))
123
- href = dom.xpath('//link').find { |d| d.attributes['rel'].value == 'stylesheet' }.attributes['href'].value
124
- assert_equal('http://wovn.io/hello/index.css', href, 'Should not change the href')
125
- end
126
-
127
- def test_replace_img_link_path
128
- store = Store.instance
129
- replacer = LinkReplacer.new(store, 'path', get_header)
130
- dom = Wovnrb.get_dom('<a href="http://wovn.io/index.jpg">link text</a>')
131
- replacer.replace(dom, Lang.new('ja'))
132
-
133
- link = dom.xpath('//a')[0].get_attribute('href')
134
- assert_equal('http://wovn.io/index.jpg', link)
135
- end
136
-
137
- def test_replace_img_link_path_with_query_or_hash
138
- store = Store.instance
139
- replacer = LinkReplacer.new(store, 'path', get_header)
140
- dom = Wovnrb.get_dom('<a href="http://wovn.io/index.jpg?test=1">link text</a>')
141
- replacer.replace(dom, Lang.new('ja'))
142
-
143
- link = dom.xpath('//a')[0].get_attribute('href')
144
- assert_equal('http://wovn.io/index.jpg?test=1', link)
145
-
146
- dom = Wovnrb.get_dom('<a href="http://wovn.io/index.jpg#test=1">link text</a>')
147
- replacer.replace(dom, Lang.new('ja'))
148
-
149
- link = dom.xpath('//a')[0].get_attribute('href')
150
- assert_equal('http://wovn.io/index.jpg#test=1', link)
151
- end
152
-
153
- def test_replace_audio_link_path
154
- store = Store.instance
155
- replacer = LinkReplacer.new(store, 'path', get_header)
156
- dom = Wovnrb.get_dom('<a href="/index.mp3">link text</a>')
157
- replacer.replace(dom, Lang.new('ja'))
158
-
159
- link = dom.xpath('//a')[0].get_attribute('href')
160
- assert_equal('/index.mp3', link)
161
- end
162
-
163
- def test_replace_audio_link_path_with_query_or_hash
164
- store = Store.instance
165
- replacer = LinkReplacer.new(store, 'path', get_header)
166
- dom = Wovnrb.get_dom('<a href="/index.mp3?test=1">link text</a>')
167
- replacer.replace(dom, Lang.new('ja'))
168
-
169
- link = dom.xpath('//a')[0].get_attribute('href')
170
- assert_equal('/index.mp3?test=1', link)
171
-
172
- dom = Wovnrb.get_dom('<a href="/index.mp3#test=1">link text</a>')
173
- replacer.replace(dom, Lang.new('ja'))
174
-
175
- link = dom.xpath('//a')[0].get_attribute('href')
176
- assert_equal('/index.mp3#test=1', link)
177
- end
178
-
179
- def test_replace_video_link_path
180
- store = Store.instance
181
- replacer = LinkReplacer.new(store, 'path', get_header)
182
- dom = Wovnrb.get_dom('<a href="/index.mpeg">link text</a>')
183
- replacer.replace(dom, Lang.new('ja'))
184
-
185
- link = dom.xpath('//a')[0].get_attribute('href')
186
- assert_equal('/index.mpeg', link)
187
- end
188
-
189
- def test_replace_video_link_path_with_query_or_hash
190
- store = Store.instance
191
- replacer = LinkReplacer.new(store, 'path', get_header)
192
- dom = Wovnrb.get_dom('<a href="/index.mp4?test=1">link text</a>')
193
- replacer.replace(dom, Lang.new('ja'))
194
-
195
- link = dom.xpath('//a')[0].get_attribute('href')
196
- assert_equal('/index.mp4?test=1', link)
197
-
198
- dom = Wovnrb.get_dom('<a href="/index.mp4#test=1">link text</a>')
199
- replacer.replace(dom, Lang.new('ja'))
200
-
201
- link = dom.xpath('//a')[0].get_attribute('href')
202
- assert_equal('/index.mp4#test=1', link)
203
- end
204
-
205
- def test_replace_doc_link_path
206
- store = Store.instance
207
- replacer = LinkReplacer.new(store, 'path', get_header)
208
- dom = Wovnrb.get_dom('<a href="/index.pptx">link text</a>')
209
- replacer.replace(dom, Lang.new('ja'))
210
-
211
- link = dom.xpath('//a')[0].get_attribute('href')
212
- assert_equal('/index.pptx', link)
213
- end
214
-
215
- def test_replace_doc_link_path_with_query_or_hash
216
- store = Store.instance
217
- replacer = LinkReplacer.new(store, 'path', get_header)
218
- dom = Wovnrb.get_dom('<a href="/index.pptx?test=1">link text</a>')
219
- replacer.replace(dom, Lang.new('ja'))
220
-
221
- link = dom.xpath('//a')[0].get_attribute('href')
222
- assert_equal('/index.pptx?test=1', link)
223
-
224
- dom = Wovnrb.get_dom('<a href="/index.pptx#test=1">link text</a>')
225
- replacer.replace(dom, Lang.new('ja'))
226
-
227
- link = dom.xpath('//a')[0].get_attribute('href')
228
- assert_equal('/index.pptx#test=1', link)
229
- end
230
-
231
- def test_replace_javascript_link_subdomain
232
- store = Store.instance
233
- replacer = LinkReplacer.new(store, 'subdomain', get_header)
234
- dom = Wovnrb.get_dom('<a href="javascript:void(0);">link text</a>')
235
- replacer.replace(dom, Lang.new('en'))
236
-
237
- link = dom.xpath('//a')[0].get_attribute('href')
238
- assert_equal('javascript:void(0);', link)
239
- end
240
-
241
- def test_replace_mustache
242
- store = Store.instance
243
- replacer = LinkReplacer.new(store, 'query', get_header)
244
- dom = Wovnrb.get_dom('<a href="{{hello}}">link text</a>')
245
- replacer.replace(dom, Lang.new('en'))
246
-
247
- link = dom.xpath('//a')[0].get_attribute('href')
248
- assert_equal('{{hello}}', link)
249
-
250
- dom = Wovnrb.get_dom('<a href=" {{hello}} ">link text</a>')
251
- replacer.replace(dom, Lang.new('en'))
252
-
253
- link = dom.xpath('//a')[0].get_attribute('href')
254
- assert_equal(' {{hello}} ', link)
255
- end
256
-
257
- def test_with_base_as_previous_directory
258
- dom, replacer = create_dom_by_base(base: '../', href: 'm/css/iphone.css')
259
- replacer.replace(dom, Lang.new('en'))
260
- assert_link(dom, '/en/sp/entry2017/m/css/iphone.css')
261
- end
262
-
263
- def test_with_base_as_different_host
264
- dom, replacer = create_dom_by_base(base: 'http://test.com', href: 'm/css/iphone.css')
265
- replacer.replace(dom, Lang.new('en'))
266
- assert_link(dom, 'http://test.com/m/css/iphone.css')
267
- end
268
-
269
- def test_with_base_as_different_host_without_protocol
270
- dom, replacer = create_dom_by_base(base: '//test.com', href: 'm/css/iphone.css')
271
- replacer.replace(dom, Lang.new('en'))
272
- assert_link(dom, '//test.com/m/css/iphone.css')
273
- end
274
-
275
- def test_with_base_as_relative_path
276
- dom, replacer = create_dom_by_base(base: '/test', href: 'm/css/iphone.css')
277
- replacer.replace(dom, Lang.new('en'))
278
- assert_link(dom, '/en/test/m/css/iphone.css')
279
- end
280
-
281
- def test_with_base_as_relative_path_without_starting_slash
282
- dom, replacer = create_dom_by_base(base: 'test/', href: 'm/css/iphone.css')
283
- replacer.replace(dom, Lang.new('en'))
284
- assert_link(dom, '/en/sp/entry2017/m/test/m/css/iphone.css')
285
- end
286
-
287
- def test_base_href
288
- store = Store.instance
289
- tests = [
290
- { pathname: '/dirname/index.php', base: '/absolute/path', expected_href: '/absolute/path' },
291
- { pathname: '/dirname/index.php', base: 'relative/path', expected_href: '/dirname/relative/path' },
292
- { pathname: '/dirname/index.php', base: './dot/path', expected_href: '/dirname/dot/path' },
293
- { pathname: '/dirname/index.php', base: '../doubledot/path', expected_href: '/doubledot/path' },
294
- { pathname: '/', base: '../errordots/path', expected_href: '/errordots/path' },
295
- { pathname: '/dirname/deep/index.php', base: './../.././../../../many/dots', expected_href: '/many/dots' },
296
- { pathname: 'index.php', base: 'no/dir/path', expected_href: '/no/dir/path' },
297
- { pathname: 'index.php', base: '/trailing/slash/', expected_href: '/trailing/slash/' },
298
- { pathname: 'index.php', base: '', expected_href: '/' }
299
- ]
300
-
301
- tests.each do |test|
302
- replacer = LinkReplacer.new(store, 'path', get_header(url_pattern: 'path', pathname: test[:pathname]))
303
- dom = Wovnrb.get_dom("<base target=\"_blank\" href=\"#{test[:base]}\"><a href=\"/not_matter\">link text</a>")
304
- assert_equal(test[:expected_href], replacer.send(:base_href, dom))
305
- end
306
- end
307
-
308
- def get_header(url_pattern: 'query', pathname: nil)
309
- Wovnrb::Headers.new(
310
- Wovnrb.get_env('url' => "http://wovn.io#{pathname}"),
311
- Wovnrb.get_settings('url_pattern' => url_pattern, 'url_pattern_reg' => '^(?<lang>[^.]+).')
312
- )
313
- end
314
-
315
- def create_dom_by_base(base:, href:)
316
- store = Store.instance
317
- replacer = LinkReplacer.new(store, 'path', get_header(url_pattern: 'path', pathname: '/sp/entry2017/m/index.php'))
318
- dom = Wovnrb.get_dom("<base target=\"_blank\" href=\"#{base}\"><a href=\"#{href}\">link text</a>")
319
-
320
- [dom, replacer]
321
- end
322
-
323
- def assert_link(dom, expected)
324
- link = dom.xpath('//a')[0].get_attribute('href')
325
- assert_equal(expected, link)
326
- end
327
- end
328
- end
@@ -1,157 +0,0 @@
1
- # -*- encoding: UTF-8 -*-
2
- require 'test_helper'
3
- require 'webmock/minitest'
4
-
5
- module Wovnrb
6
- class MetaReplacerTest < WovnMiniTest
7
- def test_replace_description
8
- store = Store.instance
9
- replacer = MetaReplacer.new(store, {
10
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
11
- })
12
-
13
- dom = Wovnrb.get_dom('<meta name="description" content="Hello">')
14
- replacer.replace(dom, Lang.new('ja'))
15
-
16
- content = dom.xpath('//meta')[0].get_attribute('content')
17
- assert_equal('こんにちは', content)
18
- end
19
-
20
- def test_replace_description_in_fragment
21
- store = Store.instance
22
- replacer = MetaReplacer.new(store, {
23
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
24
- })
25
-
26
- dom = Helpers::NokogumboHelper::parse_fragment('<meta name="description" content="Hello">')
27
- replacer.replace(dom, Lang.new('ja'))
28
-
29
- content = dom.xpath('.//meta')[0].get_attribute('content')
30
- assert_equal('こんにちは', content)
31
- end
32
-
33
- def test_replace_og_description
34
- store = Store.instance
35
- replacer = MetaReplacer.new(store, {
36
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
37
- })
38
-
39
- dom = Wovnrb.get_dom('<meta property="og:description" content="Hello">')
40
- replacer.replace(dom, Lang.new('ja'))
41
-
42
- content = dom.xpath('//meta')[0].get_attribute('content')
43
- assert_equal('こんにちは', content)
44
- end
45
-
46
- def test_replace_og_title
47
- store = Store.instance
48
- replacer = MetaReplacer.new(store, {
49
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
50
- })
51
-
52
- dom = Wovnrb.get_dom('<meta property="og:title" content="Hello">')
53
- replacer.replace(dom, Lang.new('ja'))
54
-
55
- content = dom.xpath('//meta')[0].get_attribute('content')
56
- assert_equal('こんにちは', content)
57
- end
58
-
59
- def test_replace_twitter_title
60
- store = Store.instance
61
- replacer = MetaReplacer.new(store, {
62
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
63
- })
64
-
65
- dom = Wovnrb.get_dom('<meta property="twitter:title" content="Hello">')
66
- replacer.replace(dom, Lang.new('ja'))
67
-
68
- content = dom.xpath('//meta')[0].get_attribute('content')
69
- assert_equal('こんにちは', content)
70
- end
71
-
72
- def test_replace_twitter_description
73
- store = Store.instance
74
- replacer = MetaReplacer.new(store, {
75
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
76
- })
77
-
78
- dom = Wovnrb.get_dom('<meta property="twitter:description" content="Hello">')
79
- replacer.replace(dom, Lang.new('ja'))
80
-
81
- content = dom.xpath('//meta')[0].get_attribute('content')
82
- assert_equal('こんにちは', content)
83
- end
84
-
85
- def test_replace_multi
86
- store = Store.instance
87
- replacer = MetaReplacer.new(store, {
88
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
89
- 'Bye' => {'ja' => [{'data' => 'さようなら'}]}
90
- })
91
-
92
- dom = Wovnrb.get_dom('<meta property="title" content="Hello"><meta property="title" content="Bye">')
93
- replacer.replace(dom, Lang.new('ja'))
94
-
95
- content = dom.xpath('//meta')[0].get_attribute('content')
96
- content2 = dom.xpath('//meta')[1].get_attribute('content')
97
- assert_equal('こんにちは', content)
98
- assert_equal('さようなら', content2)
99
- end
100
-
101
- def test_replace_multi_in_fragment
102
- store = Store.instance
103
- replacer = MetaReplacer.new(store, {
104
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
105
- 'Bye' => {'ja' => [{'data' => 'さようなら'}]}
106
- })
107
-
108
- dom = Helpers::NokogumboHelper::parse_fragment('<meta property="title" content="Hello"><meta property="title" content="Bye">')
109
- replacer.replace(dom, Lang.new('ja'))
110
-
111
- content = dom.xpath('.//meta')[0].get_attribute('content')
112
- content2 = dom.xpath('.//meta')[1].get_attribute('content')
113
- assert_equal('こんにちは', content)
114
- assert_equal('さようなら', content2)
115
- end
116
-
117
- def test_replace_wovn_ignore
118
- store = Store.instance
119
- replacer = MetaReplacer.new(store, {
120
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
121
- })
122
-
123
- dom = Wovnrb.get_dom('<meta wovn-ignore property="title" content="Hello">')
124
- replacer.replace(dom, Lang.new('ja'))
125
-
126
- content = dom.xpath('//meta')[0].get_attribute('content')
127
- assert_equal('Hello', content)
128
- end
129
-
130
- def test_replace_wovn_ignore_on_fragment
131
- store = Store.instance
132
- replacer = MetaReplacer.new(store, {
133
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
134
- })
135
-
136
- dom = Helpers::NokogumboHelper::parse_fragment('<meta wovn-ignore property="title" content="Hello">')
137
- replacer.replace(dom, Lang.new('ja'))
138
-
139
- content = dom.xpath('.//meta')[0].get_attribute('content')
140
- assert_equal('Hello', content)
141
- end
142
-
143
- def test_replace_wovn_ignore_og
144
- store = Store.instance
145
- headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'https://test.com'), Wovnrb.get_settings)
146
- replacer = MetaReplacer.new(store, {
147
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
148
- }, 'path', headers)
149
-
150
- dom = Wovnrb.get_dom('<meta property="og:url" content="https://test.com">')
151
- replacer.replace(dom, Lang.new('ja'))
152
-
153
- content = dom.xpath('//meta')[0].get_attribute('content')
154
- assert_equal('https://test.com/ja/', content)
155
- end
156
- end
157
- end