index_test.rb
3.29 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
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
if defined?(ActiveRecord)
def test_transaction
Product.transaction do
store_names ["Product A"]
raise ActiveRecord::Rollback
end
assert_search "product", []
end
end
end