136 lines
3.6 KiB
Ruby
136 lines
3.6 KiB
Ruby
require File.expand_path("../../spec_helper", __FILE__)
|
|
|
|
class DesignModel < CouchRest::Model::Base
|
|
|
|
end
|
|
|
|
describe "Design" do
|
|
|
|
it "should accessable from model" do
|
|
DesignModel.respond_to?(:design).should be_true
|
|
end
|
|
|
|
describe "class methods" do
|
|
|
|
describe ".design" do
|
|
before :each do
|
|
@mapper = mock('DesignMapper')
|
|
@mapper.stub!(:create_view_method)
|
|
end
|
|
|
|
it "should instantiate a new DesignMapper" do
|
|
CouchRest::Model::Designs::DesignMapper.should_receive(:new).with(DesignModel).and_return(@mapper)
|
|
@mapper.should_receive(:create_view_method).with(:all)
|
|
@mapper.should_receive(:instance_eval)
|
|
DesignModel.design() { }
|
|
end
|
|
|
|
it "should allow methods to be called in mapper" do
|
|
@mapper.should_receive(:foo)
|
|
CouchRest::Model::Designs::DesignMapper.stub!(:new).and_return(@mapper)
|
|
DesignModel.design { foo }
|
|
end
|
|
|
|
it "should work even if a block is not provided" do
|
|
lambda { DesignModel.design }.should_not raise_error
|
|
end
|
|
|
|
end
|
|
|
|
describe "default_per_page" do
|
|
it "should return 25 default" do
|
|
DesignModel.default_per_page.should eql(25)
|
|
end
|
|
end
|
|
|
|
describe ".paginates_per" do
|
|
it "should set the default per page value" do
|
|
DesignModel.paginates_per(21)
|
|
DesignModel.default_per_page.should eql(21)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "DesignMapper" do
|
|
|
|
before :all do
|
|
@klass = CouchRest::Model::Designs::DesignMapper
|
|
end
|
|
|
|
it "should initialize and set model" do
|
|
object = @klass.new(DesignModel)
|
|
object.send(:model).should eql(DesignModel)
|
|
end
|
|
|
|
describe "#view" do
|
|
|
|
before :each do
|
|
@object = @klass.new(DesignModel)
|
|
end
|
|
|
|
it "should call create method on view" do
|
|
CouchRest::Model::Designs::View.should_receive(:create).with(DesignModel, 'test', {})
|
|
@object.view('test')
|
|
end
|
|
|
|
it "should create a method on parent model" do
|
|
CouchRest::Model::Designs::View.stub!(:create)
|
|
@object.view('test_view')
|
|
DesignModel.should respond_to(:test_view)
|
|
end
|
|
|
|
it "should create a method for view instance" do
|
|
CouchRest::Model::Designs::View.stub!(:create)
|
|
@object.should_receive(:create_view_method).with('test')
|
|
@object.view('test')
|
|
end
|
|
end
|
|
|
|
context "for model with auto_update_design_doc disabled " do
|
|
class ::DesignModelAutoUpdateDesignDocDisabled < ::CouchRest::Model::Base
|
|
self.auto_update_design_doc = false
|
|
end
|
|
|
|
describe "#view" do
|
|
before :each do
|
|
@object = @klass.new(DesignModelAutoUpdateDesignDocDisabled)
|
|
end
|
|
|
|
it "does not attempt to create view" do
|
|
CouchRest::Model::Designs::View.should_not_receive(:create)
|
|
@object.view('test')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#filter" do
|
|
|
|
before :each do
|
|
@object = @klass.new(DesignModel)
|
|
end
|
|
|
|
it "should add the provided function to the design doc" do
|
|
@object.filter(:important, "function(doc, req) { return doc.priority == 'high'; }")
|
|
DesignModel.design_doc['filters'].should_not be_empty
|
|
DesignModel.design_doc['filters']['important'].should_not be_blank
|
|
end
|
|
|
|
end
|
|
|
|
describe "#create_view_method" do
|
|
before :each do
|
|
@object = @klass.new(DesignModel)
|
|
end
|
|
|
|
it "should create a method that returns view instance" do
|
|
CouchRest::Model::Designs::View.should_receive(:new).with(DesignModel, {}, 'test_view').and_return(nil)
|
|
@object.create_view_method('test_view')
|
|
DesignModel.test_view
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|