From a5dfd1020299cb09c3f213ef516808c3a993e984 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Sat, 20 Jun 2020 05:17:37 -0700 Subject: [PATCH] More test reorg [skip ci] --- test/exclude_test.rb | 44 ++++++++++++++++++++++++++++++++++++++++++++ test/match_test.rb | 91 ++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------- test/query_test.rb | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test/search_options_test.rb | 100 ---------------------------------------------------------------------------------------------------- 4 files changed, 145 insertions(+), 143 deletions(-) create mode 100644 test/exclude_test.rb delete mode 100644 test/search_options_test.rb diff --git a/test/exclude_test.rb b/test/exclude_test.rb new file mode 100644 index 0000000..74a90b7 --- /dev/null +++ b/test/exclude_test.rb @@ -0,0 +1,44 @@ +require_relative "test_helper" + +class ExcludeTest < Minitest::Test + def test_butter + store_names ["Butter Tub", "Peanut Butter Tub"] + assert_search "butter", ["Butter Tub"], exclude: ["peanut butter"] + end + + def test_butter_word_start + store_names ["Butter Tub", "Peanut Butter Tub"] + assert_search "butter", ["Butter Tub"], exclude: ["peanut butter"], match: :word_start + end + + def test_butter_exact + store_names ["Butter Tub", "Peanut Butter Tub"] + assert_search "butter", [], exclude: ["peanut butter"], fields: [{name: :exact}] + end + + def test_same_exact + store_names ["Butter Tub", "Peanut Butter Tub"] + assert_search "Butter Tub", ["Butter Tub"], exclude: ["Peanut Butter Tub"], fields: [{name: :exact}] + end + + def test_egg_word_start + store_names ["eggs", "eggplant"] + assert_search "egg", ["eggs"], exclude: ["eggplant"], match: :word_start + end + + def test_string + store_names ["Butter Tub", "Peanut Butter Tub"] + assert_search "butter", ["Butter Tub"], exclude: "peanut butter" + end + + def test_match_all + store_names ["Butter"] + assert_search "*", [], exclude: "butter" + end + + def test_match_all_fields + store_names ["Butter"] + assert_search "*", [], fields: [:name], exclude: "butter" + assert_search "*", ["Butter"], fields: [:color], exclude: "butter" + end +end diff --git a/test/match_test.rb b/test/match_test.rb index ee1ab3f..0a3fb0b 100644 --- a/test/match_test.rb +++ b/test/match_test.rb @@ -176,49 +176,6 @@ class MatchTest < Minitest::Test assert_search "almondmilks", ["Almond Milk"] end - # butter - - def test_exclude_butter - store_names ["Butter Tub", "Peanut Butter Tub"] - assert_search "butter", ["Butter Tub"], exclude: ["peanut butter"] - end - - def test_exclude_butter_word_start - store_names ["Butter Tub", "Peanut Butter Tub"] - assert_search "butter", ["Butter Tub"], exclude: ["peanut butter"], match: :word_start - end - - def test_exclude_butter_exact - store_names ["Butter Tub", "Peanut Butter Tub"] - assert_search "butter", [], exclude: ["peanut butter"], fields: [{name: :exact}] - end - - def test_exclude_same_exact - store_names ["Butter Tub", "Peanut Butter Tub"] - assert_search "Butter Tub", ["Butter Tub"], exclude: ["Peanut Butter Tub"], fields: [{name: :exact}] - end - - def test_exclude_egg_word_start - store_names ["eggs", "eggplant"] - assert_search "egg", ["eggs"], exclude: ["eggplant"], match: :word_start - end - - def test_exclude_string - store_names ["Butter Tub", "Peanut Butter Tub"] - assert_search "butter", ["Butter Tub"], exclude: "peanut butter" - end - - def test_exclude_match_all - store_names ["Butter"] - assert_search "*", [], exclude: "butter" - end - - def test_exclude_match_all_fields - store_names ["Butter"] - assert_search "*", [], fields: [:name], exclude: "butter" - assert_search "*", ["Butter"], fields: [:color], exclude: "butter" - end - # other def test_all @@ -306,6 +263,54 @@ class MatchTest < Minitest::Test assert_search "🍨🍰", ["Ice Cream Cake"], emoji: true end + # operator + + def test_operator + store_names ["Honey"] + assert_search "fresh honey", [] + assert_search "fresh honey", ["Honey"], operator: "or" + end + + def test_operator_scoring + store_names ["Big Red Circle", "Big Green Circle", "Small Orange Circle"] + assert_order "big red circle", ["Big Red Circle", "Big Green Circle", "Small Orange Circle"], operator: "or" + end + + # fields + + def test_fields_operator + store [ + {name: "red", color: "red"}, + {name: "blue", color: "blue"}, + {name: "cyan", color: "blue green"}, + {name: "magenta", color: "red blue"}, + {name: "green", color: "green"} + ] + assert_search "red blue", ["red", "blue", "cyan", "magenta"], operator: "or", fields: ["color"] + end + + def test_fields + store [ + {name: "red", color: "light blue"}, + {name: "blue", color: "red fish"} + ] + assert_search "blue", ["red"], fields: ["color"] + end + + def test_non_existent_field + store_names ["Milk"] + assert_search "milk", [], fields: ["not_here"] + end + + def test_fields_both_match + # have same score due to dismax + store [ + {name: "Blue A", color: "red"}, + {name: "Blue B", color: "light blue"} + ] + assert_first "blue", "Blue B", fields: [:name, :color] + end + # TODO find better place def test_search_relation diff --git a/test/query_test.rb b/test/query_test.rb index 29d214c..19ee91d 100644 --- a/test/query_test.rb +++ b/test/query_test.rb @@ -33,4 +33,57 @@ class QueryTest < Minitest::Test end refute_includes out, "Error" end + + def test_big_decimal + store [ + {name: "Product", latitude: 80.0} + ] + assert_search "product", ["Product"], where: {latitude: {gt: 79}} + end + + # body_options + + def test_body_options_should_merge_into_body + query = Product.search("*", body_options: {min_score: 1.0}, execute: false) + assert_equal 1.0, query.body[:min_score] + end + + # nested + + def test_nested_search + store [{name: "Product A", aisle: {"id" => 1, "name" => "Frozen"}}], Speaker + assert_search "frozen", ["Product A"], {fields: ["aisle.name"]}, Speaker + end + + # other tests + + def test_includes + skip unless activerecord? + + store_names ["Product A"] + assert Product.search("product", includes: [:store]).first.association(:store).loaded? + end + + def test_model_includes + skip unless activerecord? + + store_names ["Product A"] + store_names ["Store A"], Store + + associations = {Product => [:store], Store => [:products]} + result = Searchkick.search("*", models: [Product, Store], model_includes: associations) + + assert_equal 2, result.length + + result.group_by(&:class).each_pair do |klass, records| + assert records.first.association(associations[klass].first).loaded? + end + end + + def test_scope_results + skip unless activerecord? + + store_names ["Product A", "Product B"] + assert_search "product", ["Product A"], scope_results: ->(r) { r.where(name: "Product A") } + end end diff --git a/test/search_options_test.rb b/test/search_options_test.rb deleted file mode 100644 index 4398a11..0000000 --- a/test/search_options_test.rb +++ /dev/null @@ -1,100 +0,0 @@ -require_relative "test_helper" - -class SearchOptionsTest < Minitest::Test - def test_operator - store_names ["Honey"] - assert_search "fresh honey", [] - assert_search "fresh honey", ["Honey"], operator: "or" - end - - def test_operator_scoring - store_names ["Big Red Circle", "Big Green Circle", "Small Orange Circle"] - assert_order "big red circle", ["Big Red Circle", "Big Green Circle", "Small Orange Circle"], operator: "or" - end - - def test_fields_operator - store [ - {name: "red", color: "red"}, - {name: "blue", color: "blue"}, - {name: "cyan", color: "blue green"}, - {name: "magenta", color: "red blue"}, - {name: "green", color: "green"} - ] - assert_search "red blue", ["red", "blue", "cyan", "magenta"], operator: "or", fields: ["color"] - end - - def test_fields - store [ - {name: "red", color: "light blue"}, - {name: "blue", color: "red fish"} - ] - assert_search "blue", ["red"], fields: ["color"] - end - - def test_non_existent_field - store_names ["Milk"] - assert_search "milk", [], fields: ["not_here"] - end - - def test_fields_both_match - # have same score due to dismax - store [ - {name: "Blue A", color: "red"}, - {name: "Blue B", color: "light blue"} - ] - assert_first "blue", "Blue B", fields: [:name, :color] - end - - def test_big_decimal - store [ - {name: "Product", latitude: 80.0} - ] - assert_search "product", ["Product"], where: {latitude: {gt: 79}} - end - - # body_options - - def test_body_options_should_merge_into_body - query = Product.search("*", body_options: {min_score: 1.0}, execute: false) - assert_equal 1.0, query.body[:min_score] - end - - # nested - - def test_nested_search - store [{name: "Product A", aisle: {"id" => 1, "name" => "Frozen"}}], Speaker - assert_search "frozen", ["Product A"], {fields: ["aisle.name"]}, Speaker - end - - # other tests - - def test_includes - skip unless activerecord? - - store_names ["Product A"] - assert Product.search("product", includes: [:store]).first.association(:store).loaded? - end - - def test_model_includes - skip unless activerecord? - - store_names ["Product A"] - store_names ["Store A"], Store - - associations = {Product => [:store], Store => [:products]} - result = Searchkick.search("*", models: [Product, Store], model_includes: associations) - - assert_equal 2, result.length - - result.group_by(&:class).each_pair do |klass, records| - assert records.first.association(associations[klass].first).loaded? - end - end - - def test_scope_results - skip unless activerecord? - - store_names ["Product A", "Product B"] - assert_search "product", ["Product A"], scope_results: ->(r) { r.where(name: "Product A") } - end -end -- libgit2 0.21.0