language_test.rb 1.68 KB
require_relative "test_helper"

class LanguageTest < Minitest::Test
  def setup
    skip unless ENV["LANGUAGE"]

    Song.destroy_all
  end

  def test_chinese
    # requires https://github.com/medcl/elasticsearch-analysis-ik
    with_options(Song, language: "chinese") do
      store_names ["中华人民共和国国歌"], Song
      assert_language_search "中华人民共和国", ["中华人民共和国国歌"]
      assert_language_search "国歌", ["中华人民共和国国歌"]
      assert_language_search "人", []
    end
  end

  def test_japanese
    # requires https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-kuromoji.html
    with_options(Song, language: "japanese") do
      store_names ["JR新宿駅の近くにビールを飲みに行こうか"], Song
      assert_language_search "飲む", ["JR新宿駅の近くにビールを飲みに行こうか"]
      assert_language_search "jr", ["JR新宿駅の近くにビールを飲みに行こうか"]
      assert_language_search "新", []
    end
  end

  def test_polish
    # requires https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-stempel.html
    with_options(Song, language: "polish") do
      store_names ["polski"], Song
      assert_language_search "polskimi", ["polski"]
    end
  end

  def test_ukrainian
    # requires https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-ukrainian.html
    with_options(Song, language: "ukrainian") do
      store_names ["ресторани"], Song
      assert_language_search "ресторан", ["ресторани"]
    end
  end

  def assert_language_search(term, expected)
    assert_search term, expected, {misspellings: false}, Song
  end
end