Commit a5dfd1020299cb09c3f213ef516808c3a993e984

Authored by Andrew Kane
1 parent b759b229

More test reorg [skip ci]

test/exclude_test.rb 0 → 100644
... ... @@ -0,0 +1,44 @@
  1 +require_relative "test_helper"
  2 +
  3 +class ExcludeTest < Minitest::Test
  4 + def test_butter
  5 + store_names ["Butter Tub", "Peanut Butter Tub"]
  6 + assert_search "butter", ["Butter Tub"], exclude: ["peanut butter"]
  7 + end
  8 +
  9 + def test_butter_word_start
  10 + store_names ["Butter Tub", "Peanut Butter Tub"]
  11 + assert_search "butter", ["Butter Tub"], exclude: ["peanut butter"], match: :word_start
  12 + end
  13 +
  14 + def test_butter_exact
  15 + store_names ["Butter Tub", "Peanut Butter Tub"]
  16 + assert_search "butter", [], exclude: ["peanut butter"], fields: [{name: :exact}]
  17 + end
  18 +
  19 + def test_same_exact
  20 + store_names ["Butter Tub", "Peanut Butter Tub"]
  21 + assert_search "Butter Tub", ["Butter Tub"], exclude: ["Peanut Butter Tub"], fields: [{name: :exact}]
  22 + end
  23 +
  24 + def test_egg_word_start
  25 + store_names ["eggs", "eggplant"]
  26 + assert_search "egg", ["eggs"], exclude: ["eggplant"], match: :word_start
  27 + end
  28 +
  29 + def test_string
  30 + store_names ["Butter Tub", "Peanut Butter Tub"]
  31 + assert_search "butter", ["Butter Tub"], exclude: "peanut butter"
  32 + end
  33 +
  34 + def test_match_all
  35 + store_names ["Butter"]
  36 + assert_search "*", [], exclude: "butter"
  37 + end
  38 +
  39 + def test_match_all_fields
  40 + store_names ["Butter"]
  41 + assert_search "*", [], fields: [:name], exclude: "butter"
  42 + assert_search "*", ["Butter"], fields: [:color], exclude: "butter"
  43 + end
  44 +end
... ...
test/match_test.rb
... ... @@ -176,49 +176,6 @@ class MatchTest &lt; Minitest::Test
176 176 assert_search "almondmilks", ["Almond Milk"]
177 177 end
178 178  
179   - # butter
180   -
181   - def test_exclude_butter
182   - store_names ["Butter Tub", "Peanut Butter Tub"]
183   - assert_search "butter", ["Butter Tub"], exclude: ["peanut butter"]
184   - end
185   -
186   - def test_exclude_butter_word_start
187   - store_names ["Butter Tub", "Peanut Butter Tub"]
188   - assert_search "butter", ["Butter Tub"], exclude: ["peanut butter"], match: :word_start
189   - end
190   -
191   - def test_exclude_butter_exact
192   - store_names ["Butter Tub", "Peanut Butter Tub"]
193   - assert_search "butter", [], exclude: ["peanut butter"], fields: [{name: :exact}]
194   - end
195   -
196   - def test_exclude_same_exact
197   - store_names ["Butter Tub", "Peanut Butter Tub"]
198   - assert_search "Butter Tub", ["Butter Tub"], exclude: ["Peanut Butter Tub"], fields: [{name: :exact}]
199   - end
200   -
201   - def test_exclude_egg_word_start
202   - store_names ["eggs", "eggplant"]
203   - assert_search "egg", ["eggs"], exclude: ["eggplant"], match: :word_start
204   - end
205   -
206   - def test_exclude_string
207   - store_names ["Butter Tub", "Peanut Butter Tub"]
208   - assert_search "butter", ["Butter Tub"], exclude: "peanut butter"
209   - end
210   -
211   - def test_exclude_match_all
212   - store_names ["Butter"]
213   - assert_search "*", [], exclude: "butter"
214   - end
215   -
216   - def test_exclude_match_all_fields
217   - store_names ["Butter"]
218   - assert_search "*", [], fields: [:name], exclude: "butter"
219   - assert_search "*", ["Butter"], fields: [:color], exclude: "butter"
220   - end
221   -
222 179 # other
223 180  
224 181 def test_all
... ... @@ -306,6 +263,54 @@ class MatchTest &lt; Minitest::Test
306 263 assert_search "🍨🍰", ["Ice Cream Cake"], emoji: true
307 264 end
308 265  
  266 + # operator
  267 +
  268 + def test_operator
  269 + store_names ["Honey"]
  270 + assert_search "fresh honey", []
  271 + assert_search "fresh honey", ["Honey"], operator: "or"
  272 + end
  273 +
  274 + def test_operator_scoring
  275 + store_names ["Big Red Circle", "Big Green Circle", "Small Orange Circle"]
  276 + assert_order "big red circle", ["Big Red Circle", "Big Green Circle", "Small Orange Circle"], operator: "or"
  277 + end
  278 +
  279 + # fields
  280 +
  281 + def test_fields_operator
  282 + store [
  283 + {name: "red", color: "red"},
  284 + {name: "blue", color: "blue"},
  285 + {name: "cyan", color: "blue green"},
  286 + {name: "magenta", color: "red blue"},
  287 + {name: "green", color: "green"}
  288 + ]
  289 + assert_search "red blue", ["red", "blue", "cyan", "magenta"], operator: "or", fields: ["color"]
  290 + end
  291 +
  292 + def test_fields
  293 + store [
  294 + {name: "red", color: "light blue"},
  295 + {name: "blue", color: "red fish"}
  296 + ]
  297 + assert_search "blue", ["red"], fields: ["color"]
  298 + end
  299 +
  300 + def test_non_existent_field
  301 + store_names ["Milk"]
  302 + assert_search "milk", [], fields: ["not_here"]
  303 + end
  304 +
  305 + def test_fields_both_match
  306 + # have same score due to dismax
  307 + store [
  308 + {name: "Blue A", color: "red"},
  309 + {name: "Blue B", color: "light blue"}
  310 + ]
  311 + assert_first "blue", "Blue B", fields: [:name, :color]
  312 + end
  313 +
309 314 # TODO find better place
310 315  
311 316 def test_search_relation
... ...
test/query_test.rb
... ... @@ -33,4 +33,57 @@ class QueryTest &lt; Minitest::Test
33 33 end
34 34 refute_includes out, "Error"
35 35 end
  36 +
  37 + def test_big_decimal
  38 + store [
  39 + {name: "Product", latitude: 80.0}
  40 + ]
  41 + assert_search "product", ["Product"], where: {latitude: {gt: 79}}
  42 + end
  43 +
  44 + # body_options
  45 +
  46 + def test_body_options_should_merge_into_body
  47 + query = Product.search("*", body_options: {min_score: 1.0}, execute: false)
  48 + assert_equal 1.0, query.body[:min_score]
  49 + end
  50 +
  51 + # nested
  52 +
  53 + def test_nested_search
  54 + store [{name: "Product A", aisle: {"id" => 1, "name" => "Frozen"}}], Speaker
  55 + assert_search "frozen", ["Product A"], {fields: ["aisle.name"]}, Speaker
  56 + end
  57 +
  58 + # other tests
  59 +
  60 + def test_includes
  61 + skip unless activerecord?
  62 +
  63 + store_names ["Product A"]
  64 + assert Product.search("product", includes: [:store]).first.association(:store).loaded?
  65 + end
  66 +
  67 + def test_model_includes
  68 + skip unless activerecord?
  69 +
  70 + store_names ["Product A"]
  71 + store_names ["Store A"], Store
  72 +
  73 + associations = {Product => [:store], Store => [:products]}
  74 + result = Searchkick.search("*", models: [Product, Store], model_includes: associations)
  75 +
  76 + assert_equal 2, result.length
  77 +
  78 + result.group_by(&:class).each_pair do |klass, records|
  79 + assert records.first.association(associations[klass].first).loaded?
  80 + end
  81 + end
  82 +
  83 + def test_scope_results
  84 + skip unless activerecord?
  85 +
  86 + store_names ["Product A", "Product B"]
  87 + assert_search "product", ["Product A"], scope_results: ->(r) { r.where(name: "Product A") }
  88 + end
36 89 end
... ...
test/search_options_test.rb
... ... @@ -1,100 +0,0 @@
1   -require_relative "test_helper"
2   -
3   -class SearchOptionsTest < Minitest::Test
4   - def test_operator
5   - store_names ["Honey"]
6   - assert_search "fresh honey", []
7   - assert_search "fresh honey", ["Honey"], operator: "or"
8   - end
9   -
10   - def test_operator_scoring
11   - store_names ["Big Red Circle", "Big Green Circle", "Small Orange Circle"]
12   - assert_order "big red circle", ["Big Red Circle", "Big Green Circle", "Small Orange Circle"], operator: "or"
13   - end
14   -
15   - def test_fields_operator
16   - store [
17   - {name: "red", color: "red"},
18   - {name: "blue", color: "blue"},
19   - {name: "cyan", color: "blue green"},
20   - {name: "magenta", color: "red blue"},
21   - {name: "green", color: "green"}
22   - ]
23   - assert_search "red blue", ["red", "blue", "cyan", "magenta"], operator: "or", fields: ["color"]
24   - end
25   -
26   - def test_fields
27   - store [
28   - {name: "red", color: "light blue"},
29   - {name: "blue", color: "red fish"}
30   - ]
31   - assert_search "blue", ["red"], fields: ["color"]
32   - end
33   -
34   - def test_non_existent_field
35   - store_names ["Milk"]
36   - assert_search "milk", [], fields: ["not_here"]
37   - end
38   -
39   - def test_fields_both_match
40   - # have same score due to dismax
41   - store [
42   - {name: "Blue A", color: "red"},
43   - {name: "Blue B", color: "light blue"}
44   - ]
45   - assert_first "blue", "Blue B", fields: [:name, :color]
46   - end
47   -
48   - def test_big_decimal
49   - store [
50   - {name: "Product", latitude: 80.0}
51   - ]
52   - assert_search "product", ["Product"], where: {latitude: {gt: 79}}
53   - end
54   -
55   - # body_options
56   -
57   - def test_body_options_should_merge_into_body
58   - query = Product.search("*", body_options: {min_score: 1.0}, execute: false)
59   - assert_equal 1.0, query.body[:min_score]
60   - end
61   -
62   - # nested
63   -
64   - def test_nested_search
65   - store [{name: "Product A", aisle: {"id" => 1, "name" => "Frozen"}}], Speaker
66   - assert_search "frozen", ["Product A"], {fields: ["aisle.name"]}, Speaker
67   - end
68   -
69   - # other tests
70   -
71   - def test_includes
72   - skip unless activerecord?
73   -
74   - store_names ["Product A"]
75   - assert Product.search("product", includes: [:store]).first.association(:store).loaded?
76   - end
77   -
78   - def test_model_includes
79   - skip unless activerecord?
80   -
81   - store_names ["Product A"]
82   - store_names ["Store A"], Store
83   -
84   - associations = {Product => [:store], Store => [:products]}
85   - result = Searchkick.search("*", models: [Product, Store], model_includes: associations)
86   -
87   - assert_equal 2, result.length
88   -
89   - result.group_by(&:class).each_pair do |klass, records|
90   - assert records.first.association(associations[klass].first).loaded?
91   - end
92   - end
93   -
94   - def test_scope_results
95   - skip unless activerecord?
96   -
97   - store_names ["Product A", "Product B"]
98   - assert_search "product", ["Product A"], scope_results: ->(r) { r.where(name: "Product A") }
99   - end
100   -end