-
Notifications
You must be signed in to change notification settings - Fork 9
/
search_spec.rb
76 lines (63 loc) · 2.45 KB
/
search_spec.rb
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
require File.dirname(__FILE__) + '/spec_helper'
describe "Database search" do
before(:all) do
@path = File.dirname(__FILE__) + "/../temp/storages/database_search"
FileUtils.rm_rf @path
@f_storage = FileStorage.new(:path => @path + "/storage")
@f_storage.clear!
@index_storage = InvertedListFileStorage.new(:path => @path+"/index")
@index_storage.clear!
@index = InvertedListIndex.new(@index_storage)
@index2 = InvertedListIndex.new(@index_storage)
@f_store = Store.new(:storage => @f_storage, :index => @index, :path => @path + '/store')
@index.document_store = @f_store
@index2.document_store = @f_store
@profile_meta = Document.create!(@f_store, :name => 'Profile',
:non_indexable_slots => [ :bio, :version, :previous_version ])
end
# Leave for investigation
# after(:all) do
# FileUtils.rm_rf @path
# end
it "should add new doc" do
doc = Document.create!(@f_store, :name => "Oleg", :state => 'Russia', :age => 21, Meta => @profile_meta)
doc.uuid.should_not be_nil
@oleg_uuid = doc.uuid
results = @index.find(:name => "Oleg")
results.should_not be_empty
results[0].uuid.should == @oleg_uuid
end
it "should find doc in a separate index instance" do
results = @index2.find(:name => "Oleg", Meta => @profile_meta)
results.should_not be_empty
results[0]["name"].should == "Oleg"
end
it "should store & find several docs" do
doc = Document.create!(@f_store, :name => "Yurii", :state => 'Ukraine', Meta => @profile_meta)
doc.save!
@yura_uuid = doc.uuid
results = @index.find(:name => "Yurii")
results.should_not be_empty
results[0].uuid.should == @yura_uuid
end
it "should find all profiles" do
results = @index.find(Meta => @profile_meta)
results.should_not be_empty
results.map{|e| e.uuid}.to_set == [ @yura_uuid, @oleg_uuid ].to_set
end
it "should find all profiles from Ukraine" do
results = @index.find(Meta => @profile_meta, :state => 'Ukraine')
results.should_not be_empty
results.map{|e| e.uuid}.to_set == [ @yura_uuid ].to_set
end
it "should remove info from index" do
results = @index.find(:name => 'Oleg')
oleg = results[0]
oleg[:name] = 'Oleganza'
oleg.save!
results = @index.find(:name => 'Oleg')
results.should be_empty
results = @index.find(:name => 'Oleganza')
results[0].uuid.should == oleg.uuid
end
end