c280b3a29b
Refactored basic directory structure. Moved to ActiveSupport for Validations and Callbacks. Cleaned up older code, and removed support for text property types.
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 couchrest-type == subclass name in the map function" do
|
|
OnlineCourse.design_doc['views']['all']['map'].should =~ /if \(doc\['couchrest-type'\] == 'OnlineCourse'\)/
|
|
end
|
|
end
|
|
|