100 lines
2.8 KiB
Ruby
100 lines
2.8 KiB
Ruby
require File.expand_path("../../spec_helper", __FILE__)
|
|
require File.join(FIXTURE_PATH, 'more', 'cat')
|
|
require File.join(FIXTURE_PATH, 'more', 'person')
|
|
require File.join(FIXTURE_PATH, 'more', 'card')
|
|
require File.join(FIXTURE_PATH, 'more', 'course')
|
|
|
|
# add a default value
|
|
Card.property :bg_color, :default => '#ccc'
|
|
|
|
class BusinessCard < Card
|
|
property :extension_code
|
|
property :job_title
|
|
|
|
validates_presence_of :extension_code
|
|
validates_presence_of :job_title
|
|
end
|
|
|
|
class DesignBusinessCard < BusinessCard
|
|
property :bg_color, :default => '#eee'
|
|
end
|
|
|
|
class OnlineCourse < Course
|
|
property :url
|
|
view_by :url
|
|
end
|
|
|
|
class Animal < CouchRest::Model::Base
|
|
use_database TEST_SERVER.default_database
|
|
property :name
|
|
view_by :name
|
|
end
|
|
|
|
class Dog < Animal; end
|
|
|
|
describe "Subclassing a Model" do
|
|
|
|
before(:each) do
|
|
@card = BusinessCard.new
|
|
end
|
|
|
|
it "shouldn't messup the parent's properties" do
|
|
Card.properties.should_not == BusinessCard.properties
|
|
end
|
|
|
|
it "should share the same db default" do
|
|
@card.database.uri.should == Card.database.uri
|
|
end
|
|
|
|
it "should have kept the validation details" do
|
|
@card.should_not be_valid
|
|
end
|
|
|
|
it "should have added the new validation details" do
|
|
validated_fields = @card.class.validators.map{|v| v.attributes}.flatten
|
|
validated_fields.should include(:extension_code)
|
|
validated_fields.should include(:job_title)
|
|
end
|
|
|
|
it "should not add to the parent's validations" do
|
|
validated_fields = Card.validators.map{|v| v.attributes}.flatten
|
|
validated_fields.should_not include(:extension_code)
|
|
validated_fields.should_not include(:job_title)
|
|
end
|
|
|
|
it "should inherit default property values" do
|
|
@card.bg_color.should == '#ccc'
|
|
end
|
|
|
|
it "should be able to overwrite a default property" do
|
|
DesignBusinessCard.new.bg_color.should == '#eee'
|
|
end
|
|
|
|
it "should have a design doc slug based on the subclass name" do
|
|
Course.refresh_design_doc
|
|
OnlineCourse.design_doc_slug.should =~ /^OnlineCourse/
|
|
end
|
|
|
|
it "should have its own design_doc_fresh" do
|
|
Animal.refresh_design_doc
|
|
Dog.send(:design_doc_fresh, Dog.database).should_not == true
|
|
Dog.refresh_design_doc
|
|
Dog.send(:design_doc_fresh, Dog.database).should == true
|
|
end
|
|
|
|
it "should not add views to the parent's design_doc" do
|
|
Course.design_doc['views'].keys.should_not include('by_url')
|
|
end
|
|
|
|
it "should not add the parent's views to its design doc" do
|
|
Course.refresh_design_doc
|
|
OnlineCourse.refresh_design_doc
|
|
OnlineCourse.design_doc['views'].keys.should_not include('by_title')
|
|
end
|
|
|
|
it "should have an all view with a guard clause for model == subclass name in the map function" do
|
|
OnlineCourse.design_doc['views']['all']['map'].should =~ /if \(doc\['#{OnlineCourse.model_type_key}'\] == 'OnlineCourse'\)/
|
|
end
|
|
end
|
|
|