require 'test_helper'
module Wovnrb
class HtmlConverterTest < WovnMiniTest
def test_build_api_compatible_html
converter = prepare_html_converter('
hello', supported_langs: %w[en vi])
converted_html, = converter.build_api_compatible_html
expected_html = "hello"
assert_equal(expected_html, converted_html)
end
def test_build_api_compatible_html_with_custom_lang_param_name
settings = {
supported_langs: %w[en vi],
url_lang_pattern: 'query',
lang_param_name: 'lang'
}
converter = prepare_html_converter('hello', settings)
converted_html, = converter.build_api_compatible_html
expected_html = "hello"
assert_equal(expected_html, converted_html)
end
def test_build_api_compatible_html_not_fail_for_big_content
long_string = 'a' * 60_000
converter = prepare_html_converter("#{long_string}
", supported_langs: %w[en vi])
converted_html, = converter.build_api_compatible_html
expected_html = "#{long_string}
"
assert_equal(expected_html, converted_html)
end
def test_build_api_compatible_html_ignored_content_should_not_be_sent
html = [
'',
'Hello WOVN
',
'
Hello WOVN
',
'
should be ignored
',
'Have a nice day!',
''
].join
converter = prepare_html_converter(html, ignore_class: ['ignore-me'])
converted_html, = converter.build_api_compatible_html
expected_convert_html = "Hello
Hello
Have a nice day!"
assert_equal(expected_convert_html, converted_html)
end
def test_build_api_compatible_html_form_should_not_be_sent
html = [
'',
'',
''
].join
converter = prepare_html_converter(html, ignore_class: [])
converted_html, = converter.build_api_compatible_html
expected_convert_html = ""
assert_equal(expected_convert_html, converted_html)
end
def test_build_api_compatible_html_hidden_input_should_not_be_sent
html = [
'',
'',
'',
'',
'',
''
].join
converter = prepare_html_converter(html, ignore_class: [])
converted_html, = converter.build_api_compatible_html
expected_convert_html = [
'',
"",
'',
'',
'',
'',
''
].join
assert_equal(expected_convert_html, converted_html)
end
def test_transform_html
converter = prepare_html_converter('hello', supported_langs: %w[en vi])
translated_html = converter.build
expected_html = "hello"
assert_equal(expected_html, translated_html)
end
def test_transform_html_with_empty_supported_langs
converter = prepare_html_converter('hello', supported_langs: [])
translated_html = converter.build
expected_html = "hello"
assert_equal(expected_html, translated_html)
end
def test_transform_html_with_head_tag
converter = prepare_html_converter('TITLEhello', supported_langs: %w[en vi])
translated_html = converter.build
expected_html = "TITLEhello"
assert_equal(expected_html, translated_html)
end
def test_transform_html_without_body
converter = prepare_html_converter('helloworld', supported_langs: [])
translated_html = converter.build
expected_html = "helloworld"
assert_equal(expected_html, translated_html)
end
def test_transform_html_on_default_lang_with_query_pattern_and_supported_lang
dom = get_dom('helloworld')
settings = {
'default_lang' => 'en',
'supported_langs' => %w[en ja vi],
'url_pattern' => 'query'
}
store, headers = store_headers_factory(settings)
converter = HtmlConverter.new(dom, store, headers)
translated_html = converter.build
expected_html = "helloworld"
assert_equal(expected_html, translated_html)
end
def test_transform_html_on_default_lang_with_path_pattern_and_supported_lang
dom = get_dom('helloworld')
settings = {
'default_lang' => 'en',
'supported_langs' => %w[en ja vi],
'url_pattern' => 'path'
}
store, headers = store_headers_factory(settings)
converter = HtmlConverter.new(dom, store, headers)
translated_html = converter.build
expected_html = "helloworld"
assert_equal(expected_html, translated_html)
end
def test_replace_snippet
converter = prepare_html_converter('
')
converter.send(:replace_snippet)
expected_html = ""
assert_equal(expected_html.gsub(/\s+/, ''), converter.send(:html).gsub(/\s+/, ''))
end
def test_replace_hreflangs
converter = prepare_html_converter('')
converter.send(:replace_hreflangs)
expected_html = ''
assert_equal(expected_html, converter.send(:html))
end
def test_inject_lang_html_tag_with_no_lang_in_html_tag
settings = default_store_settings
store = Wovnrb::Store.instance
store.update_settings(settings)
headers = Wovnrb::Headers.new(
Wovnrb.get_env('url' => 'http://my-site.com/'),
Wovnrb.get_settings(settings)
)
converter = HtmlConverter.new(get_dom('hello'), store, headers)
converter.send(:inject_lang_html_tag)
expected_html = 'hello'
assert_equal(expected_html, converter.send(:html))
end
def test_inject_lang_html_tag_with_lang_in_html_tag
settings = default_store_settings
store = Wovnrb::Store.instance
store.update_settings(settings)
headers = Wovnrb::Headers.new(
Wovnrb.get_env('url' => 'http://my-site.com/'),
Wovnrb.get_settings(settings)
)
converter = HtmlConverter.new(get_dom('hello'), store, headers)
converter.send(:inject_lang_html_tag)
expected_html = 'hello'
assert_equal(expected_html, converter.send(:html))
end
private
def prepare_html_converter(input_html, store_options = {})
store, headers = store_headers_factory(store_options)
HtmlConverter.new(get_dom(input_html), store, headers)
end
def store_headers_factory(setting_opts = {})
settings = default_store_settings.merge(setting_opts)
store = Wovnrb::Store.instance
store.update_settings(settings)
headers = Wovnrb::Headers.new(
Wovnrb.get_env('url' => 'http://my-site.com'),
store.settings
)
[store, headers]
end
def default_store_settings
{
'project_token' => '123456',
'custom_lang_aliases' => {},
'default_lang' => 'en',
'url_pattern' => 'query',
'url_pattern_reg' => '((\?.*&)|\?)wovn=(?[^&]+)(&|)',
'supported_langs' => %w[en fr ja vi]
}
end
def get_dom(html)
Helpers::NokogumboHelper.parse_html(html)
end
end
end