index_test.rb
3.85 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
require_relative "test_helper"
class IndexTest < Minitest::Test
def test_clean_indices
old_index = Searchkick::Index.new("products_test_20130801000000000")
different_index = Searchkick::Index.new("items_test_20130801000000000")
old_index.delete if old_index.exists?
different_index.delete if different_index.exists?
# create indexes
old_index.create
different_index.create
Product.clean_indices
assert Product.searchkick_index.exists?
assert different_index.exists?
assert !old_index.exists?
end
def test_clean_indices_old_format
old_index = Searchkick::Index.new("products_test_20130801000000")
old_index.create
Product.clean_indices
assert !old_index.exists?
end
def test_mapping
store_names ["Dollar Tree"], Store
assert_equal [], Store.search(query: {match: {name: "dollar"}}).map(&:name)
assert_equal ["Dollar Tree"], Store.search(query: {match: {name: "Dollar Tree"}}).map(&:name)
end
def test_json
store_names ["Dollar Tree"], Store
assert_equal [], Store.search(query: {match: {name: "dollar"}}).map(&:name)
assert_equal ["Dollar Tree"], Store.search(json: {query: {match: {name: "Dollar Tree"}}}, load: false).map(&:name)
end
def test_body
store_names ["Dollar Tree"], Store
assert_equal [], Store.search(query: {match: {name: "dollar"}}).map(&:name)
assert_equal ["Dollar Tree"], Store.search(body: {query: {match: {name: "Dollar Tree"}}}, load: false).map(&:name)
end
def test_block
store_names ["Dollar Tree"]
products =
Product.search "boom" do |body|
body[:query] = {match_all: {}}
end
assert_equal ["Dollar Tree"], products.map(&:name)
end
def test_tokens
assert_equal ["dollar", "dollartre", "tree"], Product.searchkick_index.tokens("Dollar Tree")
end
def test_tokens_analyzer
assert_equal ["dollar", "tree"], Product.searchkick_index.tokens("Dollar Tree", analyzer: "searchkick_search2")
end
def test_record_not_found
store_names ["Product A", "Product B"]
Product.where(name: "Product A").delete_all
assert_search "product", ["Product B"]
ensure
Product.reindex
end
def test_bad_mapping
Product.searchkick_index.delete
store_names ["Product A"]
assert_raises(Searchkick::InvalidQueryError) { Product.search "test" }
ensure
Product.reindex
end
def test_remove_blank_id
store_names ["Product A"]
Product.searchkick_index.remove(OpenStruct.new)
assert_search "product", ["Product A"]
ensure
Product.reindex
end
def test_missing_index
assert_raises(Searchkick::MissingIndexError) { Product.search "test", index_name: "not_found" }
end
def test_unsupported_version
raises_exception = ->(_) { raise Elasticsearch::Transport::Transport::Error.new("[500] No query registered for [multi_match]") }
Searchkick.client.stub :search, raises_exception do
assert_raises(Searchkick::UnsupportedVersionError) { Product.search("test") }
end
end
def test_invalid_query
assert_raises(Searchkick::InvalidQueryError) { Product.search(query: {boom: true}) }
end
def test_dangerous_reindex
skip if mongoid2? || nobrainer?
assert_raises(Searchkick::DangerousOperation) { Product.where(id: [1, 2, 3]).reindex }
end
def test_dangerous_reindex_accepted
skip if nobrainer?
store_names ["Product A", "Product B"]
Product.where(name: "Product A").reindex(accept_danger: true)
assert_search "product", ["Product A"]
end
def test_dangerous_reindex_inheritance
skip if mongoid2? || nobrainer?
assert_raises(Searchkick::DangerousOperation) { Dog.where(id: [1, 2, 3]).reindex }
end
if defined?(ActiveRecord)
def test_transaction
Product.transaction do
store_names ["Product A"]
raise ActiveRecord::Rollback
end
assert_search "product", [], conversions: false
end
end
end