sql_test.rb
3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
require_relative "test_helper"
class SqlTest < Minitest::Test
def test_partial
store_names ["Honey"]
assert_search "fresh honey", []
assert_search "fresh honey", ["Honey"], partial: true
end
def test_operator
store_names ["Honey"]
assert_search "fresh honey", []
assert_search "fresh honey", ["Honey"], 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
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
# load
def test_load_default
store_names ["Product A"]
assert_kind_of Product, Product.search("product").first
end
def test_load_false
store_names ["Product A"]
assert_kind_of Hash, Product.search("product", load: false).first
end
def test_load_false_methods
store_names ["Product A"]
assert_equal "Product A", Product.search("product", load: false).first.name
end
def test_load_false_with_include
store_names ["Product A"]
assert_kind_of Hash, Product.search("product", load: false, include: [:store]).first
end
# select
def test_select
store [{name: "Product A", store_id: 1}]
result = Product.search("product", load: false, select: [:name, :store_id]).first
assert_equal %w(id name store_id), result.keys.reject { |k| k.start_with?("_") }.sort
assert_equal ["Product A"], result.name # this is not great
end
def test_select_array
store [{name: "Product A", user_ids: [1, 2]}]
result = Product.search("product", load: false, select: [:user_ids]).first
assert_equal [1, 2], result.user_ids
end
def test_select_all
store [{name: "Product A", user_ids: [1, 2]}]
hit = Product.search("product", select: true).hits.first
assert_equal hit["_source"]["name"], "Product A"
assert_equal hit["_source"]["user_ids"], [1, 2]
end
def test_nested_object
aisle = {"id" => 1, "name" => "Frozen"}
store [{name: "Product A", aisle: aisle}]
assert_equal aisle, Product.search("product", load: false).first.aisle.to_hash
end
def test_include
skip unless defined?(ActiveRecord)
store_names ["Product A"]
assert Product.search("product", include: [:store]).first.association(:store).loaded?
end
end