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
@@ -32,4 +32,4 @@ module Wovnrb
32
32
  assert_equal(true, Glob.new('api/**?').match?('api/?'))
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -0,0 +1,166 @@
1
+ require 'test_helper'
2
+
3
+ module Wovnrb
4
+ class HtmlConverterTest < WovnMiniTest
5
+ def test_build_api_compatible_html
6
+ converter = prepare_html_converter('<html><body><a class="test">hello</a></body></html>', supported_langs: %w[en vi])
7
+ converted_html, = converter.build_api_compatible_html
8
+
9
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a class=\"test\">hello</a></body></html>"
10
+ assert_equal(expected_html, converted_html)
11
+ end
12
+
13
+ def test_build_api_compatible_html_not_fail_for_big_content
14
+ long_string = 'a' * 60_000
15
+ converter = prepare_html_converter('<html><body><p>' + long_string + '</p></body></html>', supported_langs: %w[en vi])
16
+ converted_html, = converter.build_api_compatible_html
17
+
18
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>" + long_string + '</p></body></html>'
19
+ assert_equal(expected_html, converted_html)
20
+ end
21
+
22
+ def test_build_api_compatible_html_ignored_content_should_not_be_sent
23
+ html = [
24
+ '<html><body>',
25
+ '<p>Hello <span wovn-ignore>WOVN</span><p>',
26
+ '<div><span class="ignore-me">should be ignored</span></div>',
27
+ '<span>Have a nice day!</span>',
28
+ '</body></html>'
29
+ ].join
30
+
31
+ converter = prepare_html_converter(html, ignore_class: ['ignore-me'])
32
+ converted_html, = converter.build_api_compatible_html
33
+
34
+ expected_convert_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>Hello <span wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-0 --></span></p><p></p><div><span class=\"ignore-me\"><!-- __wovn-backend-ignored-key-1 --></span></div><span>Have a nice day!</span></body></html>"
35
+ assert_equal(expected_convert_html, converted_html)
36
+ end
37
+
38
+ def test_transform_html
39
+ converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: %w[en vi])
40
+ translated_html = converter.build
41
+
42
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
43
+ assert_equal(expected_html, translated_html)
44
+ end
45
+
46
+ def test_transform_html_with_empty_supported_langs
47
+ converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: [])
48
+ translated_html = converter.build
49
+
50
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body><a>hello</a></body></html>"
51
+ assert_equal(expected_html, translated_html)
52
+ end
53
+
54
+ def test_transform_html_with_head_tag
55
+ converter = prepare_html_converter('<html><head><title>TITLE</title></head><body><a>hello</a></body></html>', supported_langs: %w[en vi])
56
+ translated_html = converter.build
57
+
58
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><title>TITLE</title><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
59
+ assert_equal(expected_html, translated_html)
60
+ end
61
+
62
+ def test_transform_html_without_body
63
+ converter = prepare_html_converter('<html>hello<a>world</a></html>', supported_langs: [])
64
+ translated_html = converter.build
65
+
66
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body>hello<a>world</a></body></html>"
67
+ assert_equal(expected_html, translated_html)
68
+ end
69
+
70
+ def test_transform_html_on_default_lang_with_query_pattern_and_supported_lang
71
+ dom = get_dom('<html>hello<a>world</a></html>')
72
+ settings = {
73
+ 'default_lang' => 'en',
74
+ 'supported_langs' => %w[en ja vi],
75
+ 'url_pattern' => 'query'
76
+ }
77
+ store, headers = store_headers_factory(settings)
78
+ converter = HtmlConverter.new(dom, store, headers)
79
+ translated_html = converter.build
80
+
81
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body>hello<a>world</a></body></html>"
82
+ assert_equal(expected_html, translated_html)
83
+ end
84
+
85
+ def test_transform_html_on_default_lang_with_path_pattern_and_supported_lang
86
+ dom = get_dom('<html>hello<a>world</a></html>')
87
+ settings = {
88
+ 'default_lang' => 'en',
89
+ 'supported_langs' => %w[en ja vi],
90
+ 'url_pattern' => 'path'
91
+ }
92
+ store, headers = store_headers_factory(settings)
93
+ converter = HtmlConverter.new(dom, store, headers)
94
+ translated_html = converter.build
95
+
96
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=path&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body>hello<a>world</a></body></html>"
97
+ assert_equal(expected_html, translated_html)
98
+ end
99
+
100
+ def test_replace_snippet
101
+ converter = prepare_html_converter('<html><head><script src="/a"></script><script src="//j.wovn.io/1" async="true"</head></html>')
102
+ converter.send(:replace_snippet)
103
+
104
+ expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;amp;backend=true&amp;amp;currentLang=en&amp;amp;defaultLang=en&amp;amp;urlPattern=query&amp;amp;langCodeAliases={}&amp;amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><script src=\"/a\"></script></head><body></body></html>"
105
+ assert_equal(expected_html, converter.send(:html))
106
+ end
107
+
108
+ def test_replace_hreflangs
109
+ converter = prepare_html_converter('<html><head><link rel="alternate" hreflang="en" href="https://wovn.io/en/"></head></html>')
110
+ converter.send(:replace_hreflangs)
111
+
112
+ expected_html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="alternate" hreflang="en" href="http://my-site.com/"><link rel="alternate" hreflang="fr" href="http://my-site.com/?wovn=fr"><link rel="alternate" hreflang="ja" href="http://my-site.com/?wovn=ja"><link rel="alternate" hreflang="vi" href="http://my-site.com/?wovn=vi"></head><body></body></html>'
113
+ assert_equal(expected_html, converter.send(:html))
114
+ end
115
+
116
+ def test_inject_lang_html_tag
117
+ settings = default_store_settings
118
+ store = Wovnrb::Store.instance
119
+ store.update_settings(settings)
120
+
121
+ headers = Wovnrb::Headers.new(
122
+ Wovnrb.get_env('url' => 'http://my-site.com/?wovn=ja'),
123
+ Wovnrb.get_settings(settings)
124
+ )
125
+ converter = HtmlConverter.new(get_dom('<html><body>hello</body></html>'), store, headers)
126
+ converter.send(:inject_lang_html_tag)
127
+ expected_html = '<html lang="ja"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>hello</body></html>'
128
+ assert_equal(expected_html, converter.send(:html))
129
+ end
130
+
131
+ private
132
+
133
+ def prepare_html_converter(input_html, store_options = {})
134
+ store, headers = store_headers_factory(store_options)
135
+ HtmlConverter.new(get_dom(input_html), store, headers)
136
+ end
137
+
138
+ def store_headers_factory(setting_opts = {})
139
+ settings = default_store_settings.merge(setting_opts)
140
+ store = Wovnrb::Store.instance
141
+ store.update_settings(settings)
142
+
143
+ headers = Wovnrb::Headers.new(
144
+ Wovnrb.get_env('url' => 'http://my-site.com'),
145
+ Wovnrb.get_settings(settings)
146
+ )
147
+
148
+ [store, headers]
149
+ end
150
+
151
+ def default_store_settings
152
+ {
153
+ 'project_token' => '123456',
154
+ 'custom_lang_aliases' => {},
155
+ 'default_lang' => 'en',
156
+ 'url_pattern' => 'query',
157
+ 'url_pattern_reg' => '((\?.*&)|\?)wovn=(?<lang>[^&]+)(&|)',
158
+ 'supported_langs' => %w[en fr ja vi]
159
+ }
160
+ end
161
+
162
+ def get_dom(html)
163
+ Helpers::NokogumboHelper.parse_html(html)
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,75 @@
1
+ require 'test_helper'
2
+
3
+ module Wovnrb
4
+ class HtmlReplaceMarkerTest < WovnMiniTest
5
+ def test_add_comment_value
6
+ marker = HtmlReplaceMarker.new
7
+ assert_equal('<!-- __wovn-backend-ignored-key-0 -->', marker.add_comment_value('hello'))
8
+ end
9
+
10
+ def test_add_comment_value_multiple_times
11
+ maker = HtmlReplaceMarker.new
12
+ assert_equal('<!-- __wovn-backend-ignored-key-0 -->', maker.add_comment_value('hello'))
13
+ assert_equal('<!-- __wovn-backend-ignored-key-1 -->', maker.add_comment_value('hello'))
14
+ assert_equal('<!-- __wovn-backend-ignored-key-2 -->', maker.add_comment_value('hello'))
15
+ assert_equal('<!-- __wovn-backend-ignored-key-3 -->', maker.add_comment_value('hello'))
16
+ end
17
+
18
+ def test_add_same_comment_value_multiple_times
19
+ marker = HtmlReplaceMarker.new
20
+
21
+ 25.times do |i|
22
+ assert_equal("<!-- __wovn-backend-ignored-key-#{i} -->", marker.add_comment_value('hello'))
23
+ end
24
+ end
25
+
26
+ def test_revert
27
+ marker = HtmlReplaceMarker.new
28
+ original_html = '<html><body>hello<a> replacement </a>world </body></html>'
29
+ key = marker.add_comment_value('hello')
30
+ new_html = original_html.sub('hello', key)
31
+ assert_equal("<html><body>#{key}<a> replacement </a>world </body></html>", new_html)
32
+ assert_equal(original_html, marker.revert(new_html))
33
+ end
34
+
35
+ def test_revert_multiple_values
36
+ marker = HtmlReplaceMarker.new
37
+ original_html = '<html><body>hello<a> replacement </a>world </body></html>'
38
+ key1 = marker.add_comment_value('hello')
39
+ key2 = marker.add_comment_value('replacement')
40
+ key3 = marker.add_comment_value('world')
41
+ new_html = original_html.sub('hello', key1)
42
+ new_html = new_html.sub('replacement', key2).sub('world', key3)
43
+ assert_equal("<html><body>#{key1}<a> #{key2} </a>#{key3} </body></html>", new_html)
44
+ assert_equal(original_html, marker.revert(new_html))
45
+ end
46
+
47
+ def test_revert_multiple_similar_values
48
+ marker = HtmlReplaceMarker.new
49
+ original_html = '<html><body>'
50
+ 25.times { |i| original_html += "<a>hello_#{i}</a>" }
51
+ original_html += '</body></html>'
52
+
53
+ new_html = original_html
54
+ keys = []
55
+ 25.times do |i|
56
+ key = marker.add_comment_value("hello_#{i}")
57
+ keys << key
58
+ new_html = new_html.sub("hello_#{i}", key)
59
+ end
60
+
61
+ assert_equal(false, new_html.include?('hello'))
62
+ assert_equal(original_html, marker.revert(new_html))
63
+ end
64
+
65
+ def test_revert_same_value
66
+ marker = HtmlReplaceMarker.new
67
+ original_html = '<html><body>hello<a>hello</a>hello</body></html>'
68
+ key1 = marker.add_comment_value('hello')
69
+ key2 = marker.add_comment_value('hello')
70
+ key3 = marker.add_comment_value('hello')
71
+ new_html = "<html><body>#{key1}<a>#{key2}</a>#{key3}</body></html>"
72
+ assert_equal(original_html, marker.revert(new_html))
73
+ end
74
+ end
75
+ end
@@ -9,24 +9,24 @@ module Wovnrb
9
9
 
10
10
  def test_initialize
11
11
  log_file_name = 'test_tmp.log'
12
- Store.instance.update_settings({'log_path' => log_file_name})
12
+ Store.instance.update_settings('log_path' => log_file_name)
13
13
  WovnLogger.instance
14
- assert(File.exists?(log_file_name))
14
+ assert(File.exist?(log_file_name))
15
15
  File.delete(log_file_name)
16
16
  end
17
17
 
18
18
  def test_initialize_without_path
19
- Store.instance.update_settings({'log_path' => nil})
19
+ Store.instance.update_settings('log_path' => nil)
20
20
  WovnLogger.instance
21
21
  assert_equal($stderr, WovnLogger.instance.instance_variable_get(:@logger))
22
22
  end
23
23
 
24
24
  def test_initialize_with_invalid_path
25
25
  log_file_name = 'in/val/id/test_tmp.log'
26
- Store.instance.update_settings({'log_path' => log_file_name})
26
+ Store.instance.update_settings('log_path' => log_file_name)
27
27
  WovnLogger.instance
28
- assert_equal(false, File.exists?(log_file_name))
29
- assert_equal(true, File.exists?('wovn_error.log'))
28
+ assert_equal(false, File.exist?(log_file_name))
29
+ assert_equal(true, File.exist?('wovn_error.log'))
30
30
  File.delete('wovn_error.log')
31
31
  end
32
32
 
@@ -16,41 +16,41 @@ module Wovnrb
16
16
 
17
17
  def test_settings_user_token_retro_compatibility
18
18
  s = Wovnrb::Store.instance
19
- s.update_settings({'user_token' => 'aaaaa'})
19
+ s.update_settings('user_token' => 'aaaaa')
20
20
  assert_equal('aaaaa', s.settings['project_token'])
21
- assert(!s.settings.has_key?('user_token'))
21
+ assert(!s.settings.key?('user_token'))
22
22
  end
23
23
 
24
24
  def test_settings_project_token_set
25
25
  s = Wovnrb::Store.instance
26
- s.update_settings({'project_token' => 'bbbbbb'})
26
+ s.update_settings('project_token' => 'bbbbbb')
27
27
  assert_equal('bbbbbb', s.settings['project_token'])
28
28
  end
29
29
 
30
30
  def test_settings_project_token_set_without_retro_compatibility
31
31
  s = Wovnrb::Store.instance
32
- s.update_settings({'project_token' => 'bbbbbb', 'user_token' => 'aaaaa'})
32
+ s.update_settings('project_token' => 'bbbbbb', 'user_token' => 'aaaaa')
33
33
  assert_equal('bbbbbb', s.settings['project_token'])
34
- assert(!s.settings.has_key?('user_token'))
34
+ assert(!s.settings.key?('user_token'))
35
35
  end
36
36
 
37
37
  def test_settings_url_pattern_path
38
38
  s = Wovnrb::Store.instance
39
- s.update_settings({'url_pattern' => 'path'})
39
+ s.update_settings('url_pattern' => 'path')
40
40
  assert_equal('path', s.settings['url_pattern'])
41
41
  assert_equal('/(?<lang>[^/.?]+)', s.settings['url_pattern_reg'])
42
42
  end
43
43
 
44
44
  def test_settings_url_pattern_subdomain
45
45
  s = Wovnrb::Store.instance
46
- s.update_settings({'url_pattern' => 'subdomain'})
46
+ s.update_settings('url_pattern' => 'subdomain')
47
47
  assert_equal("^(?<lang>[^.]+)\.", s.settings['url_pattern_reg'])
48
48
  assert_equal('subdomain', s.settings['url_pattern'])
49
49
  end
50
50
 
51
51
  def test_settings_url_pattern_query
52
52
  s = Wovnrb::Store.instance
53
- s.update_settings({'url_pattern' => 'query'})
53
+ s.update_settings('url_pattern' => 'query')
54
54
  assert_equal('((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)', s.settings['url_pattern_reg'])
55
55
  assert_equal('query', s.settings['url_pattern'])
56
56
  end
@@ -66,7 +66,7 @@ module Wovnrb
66
66
 
67
67
  def test_settings_ignore_paths
68
68
  s = Wovnrb::Store.instance
69
- s.update_settings({'ignore_paths' => ['/api/**']})
69
+ s.update_settings('ignore_paths' => ['/api/**'])
70
70
  assert_equal(1, s.settings['ignore_globs'].size)
71
71
  assert_equal(true, s.settings['ignore_globs'].first.match?('/api/a/b'))
72
72
  assert_equal(false, s.settings['ignore_globs'].first.match?('/a/b'))
@@ -74,23 +74,23 @@ module Wovnrb
74
74
 
75
75
  def test_settings_ignore_paths_multiple
76
76
  s = Wovnrb::Store.instance
77
- s.update_settings({'ignore_paths' => ['/api/a/**', '/api/b/**']})
77
+ s.update_settings('ignore_paths' => ['/api/a/**', '/api/b/**'])
78
78
  assert_equal(2, s.settings['ignore_globs'].size)
79
- assert_equal(true, s.settings['ignore_globs'].any?{|g| g.match?('/api/a')})
80
- assert_equal(true, s.settings['ignore_globs'].any?{|g| g.match?('/api/b')})
81
- assert_equal(false, s.settings['ignore_globs'].any?{|g| g.match?('/api/c')})
79
+ assert_equal(true, s.settings['ignore_globs'].any? { |g| g.match?('/api/a') })
80
+ assert_equal(true, s.settings['ignore_globs'].any? { |g| g.match?('/api/b') })
81
+ assert_equal(false, s.settings['ignore_globs'].any? { |g| g.match?('/api/c') })
82
82
  end
83
83
 
84
84
  def test_settings_ignore_paths_empty
85
85
  s = Wovnrb::Store.instance
86
- s.update_settings({'ignore_paths' => []})
86
+ s.update_settings('ignore_paths' => [])
87
87
  assert_equal([], s.settings['ignore_globs'])
88
88
  end
89
89
 
90
90
  def test_settings_invalid_ignore_paths
91
91
  mock = LogMock.mock_log
92
92
  store = Wovnrb::Store.instance
93
- store.update_settings({'ignore_paths' => 'aaaa'})
93
+ store.update_settings('ignore_paths' => 'aaaa')
94
94
 
95
95
  assert_equal(false, store.valid_settings?)
96
96
  assert_equal(['Project token is not valid.', 'Ignore Paths aaaa should be Array.'], mock.errors)
@@ -98,8 +98,8 @@ module Wovnrb
98
98
 
99
99
  def test_settings_ignore_glob_injection
100
100
  s = Wovnrb::Store.instance
101
- s.update_settings({'ignore_paths' => nil})
102
- s.update_settings({'ignore_globs' => [1, 2]})
101
+ s.update_settings('ignore_paths' => nil)
102
+ s.update_settings('ignore_globs' => [1, 2])
103
103
 
104
104
  assert_equal([], s.settings['ignore_globs'])
105
105
  end
@@ -121,7 +121,7 @@ module Wovnrb
121
121
  def test_invalid_token_nil
122
122
  mock = LogMock.mock_log
123
123
  store = Wovnrb::Store.instance
124
- settings = {'not_a_token' => '12345'}
124
+ settings = { 'not_a_token' => '12345' }
125
125
 
126
126
  assert_equal(false, store.valid_token?(settings['token']))
127
127
  end
@@ -142,74 +142,30 @@ module Wovnrb
142
142
 
143
143
  def test_add_custom_lang_aliases_empty
144
144
  s = Wovnrb::Store.instance
145
- s.update_settings({'custom_lang_aliases' => {}})
145
+ s.update_settings('custom_lang_aliases' => {})
146
146
 
147
147
  assert_equal({}, s.settings['custom_lang_aliases'])
148
148
  end
149
149
 
150
150
  def test_add_custom_lang_aliases_single_value
151
151
  s = Wovnrb::Store.instance
152
- s.update_settings({'custom_lang_aliases' => {'ja' => 'staging-ja'}})
152
+ s.update_settings('custom_lang_aliases' => { 'ja' => 'staging-ja' })
153
153
 
154
- assert_equal({'ja' => 'staging-ja'}, s.settings['custom_lang_aliases'])
154
+ assert_equal({ 'ja' => 'staging-ja' }, s.settings['custom_lang_aliases'])
155
155
  end
156
156
 
157
157
  def test_add_custom_lang_aliases_multiple_values
158
158
  s = Wovnrb::Store.instance
159
- s.update_settings({'custom_lang_aliases' => {'ja' => 'staging-ja', 'en' => 'staging-en'}})
159
+ s.update_settings('custom_lang_aliases' => { 'ja' => 'staging-ja', 'en' => 'staging-en' })
160
160
 
161
- assert_equal({'ja' => 'staging-ja', 'en' => 'staging-en'}, s.settings['custom_lang_aliases'])
161
+ assert_equal({ 'ja' => 'staging-ja', 'en' => 'staging-en' }, s.settings['custom_lang_aliases'])
162
162
  end
163
163
 
164
164
  def test_add_custom_lang_aliases_using_symbols
165
165
  s = Wovnrb::Store.instance
166
- s.update_settings({'custom_lang_aliases' => {ja: 'staging-ja', en: 'staging-en'}})
166
+ s.update_settings('custom_lang_aliases' => { ja: 'staging-ja', en: 'staging-en' })
167
167
 
168
- assert_equal({'ja' => 'staging-ja', 'en' => 'staging-en'}, s.settings['custom_lang_aliases'])
169
- end
170
-
171
- def test_wovn_dev_mode_on
172
- s = Wovnrb::Store.instance
173
- s.update_settings({'wovn_dev_mode' => true})
174
-
175
- assert(s.settings['wovn_dev_mode'])
176
- assert(s.wovn_dev_mode?)
177
- end
178
-
179
- def test_wovn_dev_mode_off_by_default
180
- s = Wovnrb::Store.instance
181
- s.reset
182
-
183
- assert(!s.settings['wovn_dev_mode'])
184
- assert(!s.wovn_dev_mode?)
185
- end
186
-
187
- def test_default_api_url_with_wovn_dev_mode_on
188
- s = Wovnrb::Store.instance
189
- s.update_settings({'wovn_dev_mode' => true})
190
-
191
- assert_equal('http://api.dev-wovn.io:3000/v0/values', s.settings['api_url'])
192
- end
193
-
194
- def test_default_api_url_with_wovn_dev_mode_off
195
- s = Wovnrb::Store.instance
196
- s.update_settings({'wovn_dev_mode' => false})
197
-
198
- assert_equal('https://api.wovn.io/v0/values', s.settings['api_url'])
199
- end
200
-
201
- def test_custom_api_url_not_changed_with_wovn_dev_mode_on
202
- s = Wovnrb::Store.instance
203
- s.update_settings({'api_url' => 'test-api.io', 'wovn_dev_mode' => true})
204
-
205
- assert_equal('test-api.io', s.settings['api_url'])
206
- end
207
-
208
- def test_custom_api_url_not_changed_with_wovn_dev_mode_off
209
- s = Wovnrb::Store.instance
210
- s.update_settings({'api_url' => 'test-api.io', 'wovn_dev_mode' => false})
211
-
212
- assert_equal('test-api.io', s.settings['api_url'])
168
+ assert_equal({ 'ja' => 'staging-ja', 'en' => 'staging-en' }, s.settings['custom_lang_aliases'])
213
169
  end
214
170
  end
215
171
  end