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