wovnrb 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +1 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +308 -0
- data/Rakefile +13 -14
- data/lib/wovnrb.rb +43 -98
- data/lib/wovnrb/api_translator.rb +143 -0
- data/lib/wovnrb/headers.rb +78 -92
- data/lib/wovnrb/helpers/nokogumbo_helper.rb +1 -1
- data/lib/wovnrb/lang.rb +93 -125
- data/lib/wovnrb/railtie.rb +5 -7
- data/lib/wovnrb/services/glob.rb +3 -3
- data/lib/wovnrb/services/html_converter.rb +192 -0
- data/lib/wovnrb/services/html_replace_marker.rb +38 -0
- data/lib/wovnrb/services/wovn_logger.rb +8 -4
- data/lib/wovnrb/settings.rb +5 -3
- data/lib/wovnrb/store.rb +35 -26
- data/lib/wovnrb/text_caches/cache_base.rb +3 -2
- data/lib/wovnrb/text_caches/memory_cache.rb +2 -2
- data/lib/wovnrb/version.rb +1 -1
- data/test/fixtures/html/test.html +8 -0
- data/test/fixtures/html/test_translated.html +8 -0
- data/test/lib/api_translator_test.rb +109 -0
- data/test/lib/headers_test.rb +84 -55
- data/test/lib/lang_test.rb +157 -357
- data/test/lib/services/glob_test.rb +1 -1
- data/test/lib/services/html_converter_test.rb +166 -0
- data/test/lib/services/html_replace_marker_test.rb +75 -0
- data/test/lib/services/wovn_logger_test.rb +6 -6
- data/test/lib/store_test.rb +25 -69
- data/test/lib/text_caches/cache_base_test.rb +1 -1
- data/test/lib/text_caches/memory_cache_test.rb +10 -11
- data/test/lib/wovnrb_test.rb +77 -310
- data/test/test_helper.rb +22 -32
- data/wovnrb.gemspec +35 -44
- metadata +86 -205
- data/ext/dom/Makefile +0 -239
- data/lib/wovnrb/api_data.rb +0 -59
- data/lib/wovnrb/html_replacers/image_replacer.rb +0 -69
- data/lib/wovnrb/html_replacers/input_replacer.rb +0 -38
- data/lib/wovnrb/html_replacers/link_replacer.rb +0 -78
- data/lib/wovnrb/html_replacers/meta_replacer.rb +0 -28
- data/lib/wovnrb/html_replacers/replacer_base.rb +0 -49
- data/lib/wovnrb/html_replacers/script_replacer.rb +0 -39
- data/lib/wovnrb/html_replacers/text_replacer.rb +0 -21
- data/lib/wovnrb/html_replacers/unified_values/dst_swapping_targets_creator.rb +0 -76
- data/lib/wovnrb/html_replacers/unified_values/element_category.rb +0 -242
- data/lib/wovnrb/html_replacers/unified_values/node_swapping_targets_creator.rb +0 -134
- data/lib/wovnrb/html_replacers/unified_values/text_replacer.rb +0 -35
- data/lib/wovnrb/html_replacers/unified_values/text_scraper.rb +0 -152
- data/lib/wovnrb/html_replacers/unified_values/values_stack.rb +0 -65
- data/lib/wovnrb/services/url.rb +0 -12
- data/lib/wovnrb/services/value_agent.rb +0 -9
- data/test/fixtures/unified_values/site_html/simple_actual.html +0 -96
- data/test/fixtures/unified_values/site_html/simple_expected.json +0 -251
- data/test/fixtures/unified_values/site_html/wovn.io_actual.html +0 -686
- data/test/fixtures/unified_values/site_html/wovn.io_expected.json +0 -543
- data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_actual.html +0 -1024
- data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_expected.json +0 -3345
- data/test/fixtures/unified_values/small_html/block_inside_inline_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/block_inside_inline_expected.json +0 -22
- data/test/fixtures/unified_values/small_html/br_tag_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/br_tag_expected.json +0 -12
- data/test/fixtures/unified_values/small_html/comment_tag_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/comment_tag_expected.json +0 -10
- data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_actual.html +0 -7
- data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_expected.json +0 -11
- data/test/fixtures/unified_values/small_html/deep_nested_block_actual.html +0 -14
- data/test/fixtures/unified_values/small_html/deep_nested_block_expected.json +0 -8
- data/test/fixtures/unified_values/small_html/deep_nested_inline_actual.html +0 -20
- data/test/fixtures/unified_values/small_html/deep_nested_inline_expected.json +0 -20
- data/test/fixtures/unified_values/small_html/empty_tag_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/empty_tag_expected.json +0 -12
- data/test/fixtures/unified_values/small_html/empty_text_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/empty_text_expected.json +0 -1
- data/test/fixtures/unified_values/small_html/ignore_tag_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/ignore_tag_expected.json +0 -16
- data/test/fixtures/unified_values/small_html/ignored_class_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/ignored_class_expected.json +0 -13
- data/test/fixtures/unified_values/small_html/img_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/img_expected.json +0 -23
- data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_expected.json +0 -16
- data/test/fixtures/unified_values/small_html/nested_text_value_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/nested_text_value_expected.json +0 -12
- data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_expected.json +0 -14
- data/test/fixtures/unified_values/small_html/option_tag_actual.html +0 -9
- data/test/fixtures/unified_values/small_html/option_tag_expected.json +0 -13
- data/test/fixtures/unified_values/small_html/text_different_inline_each_other_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/text_different_inline_each_other_expected.json +0 -22
- data/test/fixtures/unified_values/small_html/text_in_svg_actual.html +0 -9
- data/test/fixtures/unified_values/small_html/text_in_svg_expected.json +0 -8
- data/test/fixtures/unified_values/small_html/text_with_html_entity_actual.html +0 -6
- data/test/fixtures/unified_values/small_html/text_with_html_entity_expected.json +0 -8
- data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_expected.json +0 -24
- data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_expected.json +0 -14
- data/test/fixtures/unified_values/small_html/wovn_ignore_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/wovn_ignore_expected.json +0 -13
- data/test/lib/api_data_test.rb +0 -83
- data/test/lib/html_replacers/image_replacer_test.rb +0 -165
- data/test/lib/html_replacers/input_replacer_test.rb +0 -140
- data/test/lib/html_replacers/link_replacer_test.rb +0 -328
- data/test/lib/html_replacers/meta_replacer_test.rb +0 -157
- data/test/lib/html_replacers/replacer_base_test.rb +0 -128
- data/test/lib/html_replacers/script_replacer_test.rb +0 -139
- data/test/lib/html_replacers/text_replacer_test.rb +0 -99
- data/test/lib/html_replacers/unified_values/dst_swapping_targets_creator_test.rb +0 -137
- data/test/lib/html_replacers/unified_values/element_category_test.rb +0 -49
- data/test/lib/html_replacers/unified_values/node_swapping_targets_creator_test.rb +0 -137
- data/test/lib/html_replacers/unified_values/text_replacer_test.rb +0 -270
- data/test/lib/html_replacers/unified_values/text_scraper_test.rb +0 -121
- data/test/lib/html_replacers/unified_values/values_stack_test.rb +0 -122
- data/test/lib/services/url_test.rb +0 -9
- data/test/lib/services/value_agent_test.rb +0 -32
- data/test/services/url_test.rb +0 -163
- data/values/values +0 -1
@@ -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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&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;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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(
|
12
|
+
Store.instance.update_settings('log_path' => log_file_name)
|
13
13
|
WovnLogger.instance
|
14
|
-
assert(File.
|
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(
|
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(
|
26
|
+
Store.instance.update_settings('log_path' => log_file_name)
|
27
27
|
WovnLogger.instance
|
28
|
-
assert_equal(false, File.
|
29
|
-
assert_equal(true, File.
|
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
|
|
data/test/lib/store_test.rb
CHANGED
@@ -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(
|
19
|
+
s.update_settings('user_token' => 'aaaaa')
|
20
20
|
assert_equal('aaaaa', s.settings['project_token'])
|
21
|
-
assert(!s.settings.
|
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(
|
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(
|
32
|
+
s.update_settings('project_token' => 'bbbbbb', 'user_token' => 'aaaaa')
|
33
33
|
assert_equal('bbbbbb', s.settings['project_token'])
|
34
|
-
assert(!s.settings.
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
102
|
-
s.update_settings(
|
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(
|
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(
|
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(
|
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(
|
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
|