2009-01-30 03:45:01 +01:00
|
|
|
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
|
|
|
require File.join(FIXTURE_PATH, 'more', 'card')
|
2009-02-03 04:21:32 +01:00
|
|
|
require File.join(FIXTURE_PATH, 'more', 'invoice')
|
2009-02-06 02:06:12 +01:00
|
|
|
require File.join(FIXTURE_PATH, 'more', 'service')
|
2009-01-30 03:45:01 +01:00
|
|
|
|
|
|
|
describe "ExtendedDocument properties" do
|
|
|
|
|
|
|
|
before(:each) do
|
|
|
|
@card = Card.new(:first_name => "matt")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should be accessible from the object" do
|
|
|
|
@card.properties.should be_an_instance_of(Array)
|
|
|
|
@card.properties.map{|p| p.name}.should include("first_name")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should let you access a property value (getter)" do
|
|
|
|
@card.first_name.should == "matt"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should let you set a property value (setter)" do
|
|
|
|
@card.last_name = "Aimonetti"
|
|
|
|
@card.last_name.should == "Aimonetti"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should not let you set a property value if it's read only" do
|
|
|
|
lambda{@card.read_only_value = "test"}.should raise_error
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should let you use an alias for an attribute" do
|
|
|
|
@card.last_name = "Aimonetti"
|
|
|
|
@card.family_name.should == "Aimonetti"
|
|
|
|
@card.family_name.should == @card.last_name
|
|
|
|
end
|
|
|
|
|
2009-02-04 02:33:31 +01:00
|
|
|
it "should be auto timestamped" do
|
|
|
|
@card.created_at.should be_nil
|
|
|
|
@card.updated_at.should be_nil
|
2009-02-06 02:06:12 +01:00
|
|
|
# :emo:hack for autospec
|
|
|
|
Card.use_database(TEST_SERVER.default_database) if @card.database.nil?
|
2009-02-04 02:33:31 +01:00
|
|
|
@card.save
|
|
|
|
@card.created_at.should_not be_nil
|
|
|
|
@card.updated_at.should_not be_nil
|
|
|
|
end
|
|
|
|
|
2009-02-03 04:21:32 +01:00
|
|
|
describe "validation" do
|
|
|
|
|
|
|
|
before(:each) do
|
|
|
|
@invoice = Invoice.new(:client_name => "matt", :employee_name => "Chris", :location => "San Diego, CA")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should be able to be validated" do
|
2009-02-06 02:06:12 +01:00
|
|
|
@card.valid?.should == true
|
2009-02-03 01:10:07 +01:00
|
|
|
end
|
2009-02-03 04:21:32 +01:00
|
|
|
|
|
|
|
it "should let you validate the presence of an attribute" do
|
|
|
|
@card.first_name = nil
|
|
|
|
@card.should_not be_valid
|
|
|
|
@card.errors.should_not be_empty
|
|
|
|
@card.errors.on(:first_name).should == ["First name must not be blank"]
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should validate the presence of 2 attributes" do
|
|
|
|
@invoice.clear
|
|
|
|
@invoice.should_not be_valid
|
|
|
|
@invoice.errors.should_not be_empty
|
|
|
|
@invoice.errors.on(:client_name).should == ["Client name must not be blank"]
|
|
|
|
@invoice.errors.on(:employee_name).should_not be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should let you set an error message" do
|
|
|
|
@invoice.location = nil
|
|
|
|
@invoice.valid?
|
|
|
|
@invoice.errors.on(:location).first.should == "Hey stupid!, you forgot the location"
|
|
|
|
end
|
2009-02-04 02:33:31 +01:00
|
|
|
|
|
|
|
it "should validate before saving" do
|
|
|
|
@invoice.location = nil
|
|
|
|
@invoice.should_not be_valid
|
|
|
|
@invoice.save.should be_false
|
|
|
|
@invoice.should be_new_document
|
|
|
|
end
|
2009-02-03 04:21:32 +01:00
|
|
|
|
2009-02-03 01:10:07 +01:00
|
|
|
end
|
|
|
|
|
2009-02-06 02:06:12 +01:00
|
|
|
describe "autovalidation" do
|
|
|
|
before(:each) do
|
|
|
|
@service = Service.new(:name => "Coumpound analysis", :price => 3_000)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should be valid" do
|
|
|
|
@service.should be_valid
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "property :name, :length => 4...20" do
|
|
|
|
it "should autovalidate the presence when length is set" do
|
|
|
|
@service.name = nil
|
|
|
|
@service.should_not be_valid
|
|
|
|
@service.errors.should_not be_nil
|
|
|
|
@service.errors.on(:name).first.should == "Name must not be blank"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should autovalidate the correct length" do
|
|
|
|
@service.name = "a"
|
|
|
|
@service.should_not be_valid
|
|
|
|
@service.errors.should_not be_nil
|
|
|
|
@service.errors.on(:name).first.should == "Name must be between 4 and 19 characters long"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
2009-01-30 03:45:01 +01:00
|
|
|
end
|