122 lines
No EOL
3 KiB
Ruby
122 lines
No EOL
3 KiB
Ruby
require File.expand_path("../../../spec_helper", __FILE__)
|
|
|
|
describe CouchRest::Pager do
|
|
before(:all) do
|
|
@cr = CouchRest.new(COUCHHOST)
|
|
@db = @cr.database(TESTDB)
|
|
@db.delete! rescue nil
|
|
@db = @cr.create_db(TESTDB) rescue nil
|
|
@pager = CouchRest::Pager.new(@db)
|
|
end
|
|
|
|
after(:all) do
|
|
begin
|
|
@db.delete!
|
|
rescue RestClient::Request::RequestFailed
|
|
end
|
|
end
|
|
|
|
it "should store the db" do
|
|
@pager.db.should == @db
|
|
end
|
|
|
|
describe "paging all docs" do
|
|
before(:all) do
|
|
@docs = []
|
|
100.times do |i|
|
|
@docs << ({:number => (i % 10)})
|
|
end
|
|
@db.bulk_save(@docs)
|
|
end
|
|
it "should yield total_docs / limit times" do
|
|
n = 0
|
|
@pager.all_docs(10) do |doc|
|
|
n += 1
|
|
end
|
|
n.should == 10
|
|
end
|
|
it "should yield each docrow group without duplicate docs" do
|
|
docids = {}
|
|
@pager.all_docs(10) do |docrows|
|
|
docrows.each do |row|
|
|
docids[row['id']].should be_nil
|
|
docids[row['id']] = true
|
|
end
|
|
end
|
|
docids.keys.length.should == 100
|
|
end
|
|
it "should yield each docrow group" do
|
|
@pager.all_docs(10) do |docrows|
|
|
doc = @db.get(docrows[0]['id'])
|
|
doc['number'].class.should == Fixnum
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "Pager with a view and docs" do
|
|
before(:all) do
|
|
@docs = []
|
|
100.times do |i|
|
|
@docs << ({:number => (i % 10)})
|
|
end
|
|
@db.bulk_save(@docs)
|
|
@db.save_doc({
|
|
'_id' => '_design/magic',
|
|
'views' => {
|
|
'number' => {
|
|
'map' => 'function(doc){emit(doc.number,null)}'
|
|
}
|
|
}
|
|
})
|
|
end
|
|
|
|
it "should have docs" do
|
|
@docs.length.should == 100
|
|
@db.documents['rows'].length.should == 101
|
|
end
|
|
|
|
it "should have a view" do
|
|
@db.view('magic/number', :limit => 10)['rows'][0]['key'].should == 0
|
|
end
|
|
|
|
it "should yield once per key" do
|
|
results = {}
|
|
@pager.key_reduce('magic/number', 20) do |k,vs|
|
|
results[k] = vs.length
|
|
end
|
|
results[0].should == 10
|
|
results[3].should == 10
|
|
end
|
|
|
|
it "with a small step size should yield once per key" do
|
|
results = {}
|
|
@pager.key_reduce('magic/number', 7) do |k,vs|
|
|
results[k] = vs.length
|
|
end
|
|
results[0].should == 10
|
|
results[3].should == 10
|
|
results[9].should == 10
|
|
end
|
|
it "with a large step size should yield once per key" do
|
|
results = {}
|
|
@pager.key_reduce('magic/number', 1000) do |k,vs|
|
|
results[k] = vs.length
|
|
end
|
|
results[0].should == 10
|
|
results[3].should == 10
|
|
results[9].should == 10
|
|
end
|
|
it "with a begin and end should only yield in the range (and leave out the lastkey)" do
|
|
results = {}
|
|
@pager.key_reduce('magic/number', 1000, 4, 7) do |k,vs|
|
|
results[k] = vs.length
|
|
end
|
|
results[0].should be_nil
|
|
results[4].should == 10
|
|
results[6].should == 10
|
|
results[7].should be_nil
|
|
results[8].should be_nil
|
|
results[9].should be_nil
|
|
end
|
|
end
|
|
end |