use Person for non-ORM specific specs

This commit is contained in:
Adam Meehan 2010-09-21 20:14:51 +10:00
parent 48b42da85e
commit 29057c41f7
3 changed files with 102 additions and 91 deletions

View File

@ -14,12 +14,17 @@ module TestModel
module ClassMethods module ClassMethods
def define_method_attribute=(attr_name) def define_method_attribute=(attr_name)
generated_attribute_methods.module_eval("def #{attr_name}=(new_value); @attributes['#{attr_name}']=new_value ; end", __FILE__, __LINE__) generated_attribute_methods.module_eval("def #{attr_name}=(new_value); @attributes['#{attr_name}']=self.class.type_cast(new_value); end", __FILE__, __LINE__)
end end
def define_method_attribute(attr_name) def define_method_attribute(attr_name)
generated_attribute_methods.module_eval("def #{attr_name}; @attributes['#{attr_name}']; end", __FILE__, __LINE__) generated_attribute_methods.module_eval("def #{attr_name}; @attributes['#{attr_name}']; end", __FILE__, __LINE__)
end end
def type_cast(value)
return value unless value.is_a?(String)
value.to_time rescue nil
end
end end
module DynamicMethods module DynamicMethods

View File

@ -2,17 +2,20 @@ require 'spec_helper'
describe ValidatesTimeliness::Extensions::DateTimeSelect do describe ValidatesTimeliness::Extensions::DateTimeSelect do
include ActionView::Helpers::DateHelper include ActionView::Helpers::DateHelper
attr_reader :person, :params
attr_reader :employee, :params before :all do
ValidatesTimeliness.use_plugin_parser = true
end
before do before do
@employee = Employee.new @person = Person.new
@params = {} @params = {}
end end
describe "datetime_select" do describe "datetime_select" do
it "should use param values when attribute is nil" do it "should use param values when attribute is nil" do
params["employee"] = { params["person"] = {
"birth_datetime(1i)" => 2009, "birth_datetime(1i)" => 2009,
"birth_datetime(2i)" => 2, "birth_datetime(2i)" => 2,
"birth_datetime(3i)" => 29, "birth_datetime(3i)" => 29,
@ -20,18 +23,18 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
"birth_datetime(5i)" => 13, "birth_datetime(5i)" => 13,
"birth_datetime(6i)" => 14, "birth_datetime(6i)" => 14,
} }
employee.birth_datetime = nil person.birth_datetime = nil
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true) output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]', '2009') output.should have_tag('select[id=person_birth_datetime_1i] option[selected=selected]', '2009')
output.should have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]', 'February') output.should have_tag('select[id=person_birth_datetime_2i] option[selected=selected]', 'February')
output.should have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]', '29') output.should have_tag('select[id=person_birth_datetime_3i] option[selected=selected]', '29')
output.should have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]', '12') output.should have_tag('select[id=person_birth_datetime_4i] option[selected=selected]', '12')
output.should have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]', '13') output.should have_tag('select[id=person_birth_datetime_5i] option[selected=selected]', '13')
output.should have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]', '14') output.should have_tag('select[id=person_birth_datetime_6i] option[selected=selected]', '14')
end end
it "should override object values and use params if present" do it "should override object values and use params if present" do
params["employee"] = { params["person"] = {
"birth_datetime(1i)" => 2009, "birth_datetime(1i)" => 2009,
"birth_datetime(2i)" => 2, "birth_datetime(2i)" => 2,
"birth_datetime(3i)" => 29, "birth_datetime(3i)" => 29,
@ -39,101 +42,101 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
"birth_datetime(5i)" => 13, "birth_datetime(5i)" => 13,
"birth_datetime(6i)" => 14, "birth_datetime(6i)" => 14,
} }
employee.birth_datetime = "2010-01-01 15:16:17" person.birth_datetime = "2010-01-01 15:16:17"
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true) output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]', '2009') output.should have_tag('select[id=person_birth_datetime_1i] option[selected=selected]', '2009')
output.should have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]', 'February') output.should have_tag('select[id=person_birth_datetime_2i] option[selected=selected]', 'February')
output.should have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]', '29') output.should have_tag('select[id=person_birth_datetime_3i] option[selected=selected]', '29')
output.should have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]', '12') output.should have_tag('select[id=person_birth_datetime_4i] option[selected=selected]', '12')
output.should have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]', '13') output.should have_tag('select[id=person_birth_datetime_5i] option[selected=selected]', '13')
output.should have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]', '14') output.should have_tag('select[id=person_birth_datetime_6i] option[selected=selected]', '14')
end end
it "should use attribute values from object if no params" do it "should use attribute values from object if no params" do
employee.birth_datetime = "2009-01-02 12:13:14" person.birth_datetime = "2009-01-02 12:13:14"
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true) output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]', '2009') output.should have_tag('select[id=person_birth_datetime_1i] option[selected=selected]', '2009')
output.should have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]', 'January') output.should have_tag('select[id=person_birth_datetime_2i] option[selected=selected]', 'January')
output.should have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]', '2') output.should have_tag('select[id=person_birth_datetime_3i] option[selected=selected]', '2')
output.should have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]', '12') output.should have_tag('select[id=person_birth_datetime_4i] option[selected=selected]', '12')
output.should have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]', '13') output.should have_tag('select[id=person_birth_datetime_5i] option[selected=selected]', '13')
output.should have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]', '14') output.should have_tag('select[id=person_birth_datetime_6i] option[selected=selected]', '14')
end end
it "should use attribute values if params does not contain attribute params" do it "should use attribute values if params does not contain attribute params" do
employee.birth_datetime = "2009-01-02 12:13:14" person.birth_datetime = "2009-01-02 12:13:14"
params["employee"] = { } params["person"] = { }
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true) output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]', '2009') output.should have_tag('select[id=person_birth_datetime_1i] option[selected=selected]', '2009')
output.should have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]', 'January') output.should have_tag('select[id=person_birth_datetime_2i] option[selected=selected]', 'January')
output.should have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]', '2') output.should have_tag('select[id=person_birth_datetime_3i] option[selected=selected]', '2')
output.should have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]', '12') output.should have_tag('select[id=person_birth_datetime_4i] option[selected=selected]', '12')
output.should have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]', '13') output.should have_tag('select[id=person_birth_datetime_5i] option[selected=selected]', '13')
output.should have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]', '14') output.should have_tag('select[id=person_birth_datetime_6i] option[selected=selected]', '14')
end end
it "should not select values when attribute value is nil and has no param values" do it "should not select values when attribute value is nil and has no param values" do
employee.birth_datetime = nil person.birth_datetime = nil
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true) output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
output.should_not have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_datetime_1i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_datetime_2i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_datetime_3i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_datetime_4i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_datetime_5i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_datetime_6i] option[selected=selected]')
end end
end end
describe "date_select" do describe "date_select" do
it "should use param values when attribute is nil" do it "should use param values when attribute is nil" do
params["employee"] = { params["person"] = {
"birth_date(1i)" => 2009, "birth_date(1i)" => 2009,
"birth_date(2i)" => 2, "birth_date(2i)" => 2,
"birth_date(3i)" => 29, "birth_date(3i)" => 29,
} }
employee.birth_date = nil person.birth_date = nil
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true) output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_date_1i] option[selected=selected]', '2009') output.should have_tag('select[id=person_birth_date_1i] option[selected=selected]', '2009')
output.should have_tag('select[id=employee_birth_date_2i] option[selected=selected]', 'February') output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'February')
output.should have_tag('select[id=employee_birth_date_3i] option[selected=selected]', '29') output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '29')
end end
it "should override object values and use params if present" do it "should override object values and use params if present" do
params["employee"] = { params["person"] = {
"birth_date(1i)" => 2009, "birth_date(1i)" => 2009,
"birth_date(2i)" => 2, "birth_date(2i)" => 2,
"birth_date(3i)" => 29, "birth_date(3i)" => 29,
} }
employee.birth_date = "2009-03-01" person.birth_date = "2009-03-01"
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true) output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_date_1i] option[selected=selected]', '2009') output.should have_tag('select[id=person_birth_date_1i] option[selected=selected]', '2009')
output.should have_tag('select[id=employee_birth_date_2i] option[selected=selected]', 'February') output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'February')
output.should have_tag('select[id=employee_birth_date_3i] option[selected=selected]', '29') output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '29')
end end
it "should select attribute values from object if no params" do it "should select attribute values from object if no params" do
employee.birth_date = "2009-01-02" person.birth_date = "2009-01-02"
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true) output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_date_1i] option[selected=selected]', '2009') output.should have_tag('select[id=person_birth_date_1i] option[selected=selected]', '2009')
output.should have_tag('select[id=employee_birth_date_2i] option[selected=selected]', 'January') output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'January')
output.should have_tag('select[id=employee_birth_date_3i] option[selected=selected]', '2') output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '2')
end end
it "should select attribute values if params does not contain attribute params" do it "should select attribute values if params does not contain attribute params" do
employee.birth_date = "2009-01-02" person.birth_date = "2009-01-02"
params["employee"] = { } params["person"] = { }
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true) output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_date_1i] option[selected=selected]', '2009') output.should have_tag('select[id=person_birth_date_1i] option[selected=selected]', '2009')
output.should have_tag('select[id=employee_birth_date_2i] option[selected=selected]', 'January') output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'January')
output.should have_tag('select[id=employee_birth_date_3i] option[selected=selected]', '2') output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '2')
end end
it "should not select values when attribute value is nil and has no param values" do it "should not select values when attribute value is nil and has no param values" do
employee.birth_date = nil person.birth_date = nil
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true) output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
output.should_not have_tag('select[id=employee_birth_date_1i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_date_1i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_date_2i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_date_2i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_date_3i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_date_3i] option[selected=selected]')
end end
end end
@ -143,7 +146,7 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
end end
it "should use param values when attribute is nil" do it "should use param values when attribute is nil" do
params["employee"] = { params["person"] = {
"birth_time(1i)" => 2000, "birth_time(1i)" => 2000,
"birth_time(2i)" => 1, "birth_time(2i)" => 1,
"birth_time(3i)" => 1, "birth_time(3i)" => 1,
@ -151,28 +154,31 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
"birth_time(5i)" => 13, "birth_time(5i)" => 13,
"birth_time(6i)" => 14, "birth_time(6i)" => 14,
} }
employee.birth_time = nil person.birth_time = nil
output = time_select(:employee, :birth_time, :include_blank => true, :include_seconds => true) output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_time_4i] option[selected=selected]', '12') output.should have_tag('select[id=person_birth_time_4i] option[selected=selected]', '12')
output.should have_tag('select[id=employee_birth_time_5i] option[selected=selected]', '13') output.should have_tag('select[id=person_birth_time_5i] option[selected=selected]', '13')
output.should have_tag('select[id=employee_birth_time_6i] option[selected=selected]', '14') output.should have_tag('select[id=person_birth_time_6i] option[selected=selected]', '14')
end end
it "should select attribute values from object if no params" do it "should select attribute values from object if no params" do
employee.birth_time = "2000-01-01 12:13:14" person.birth_time = "2000-01-01 12:13:14"
output = time_select(:employee, :birth_time, :include_blank => true, :include_seconds => true) output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=employee_birth_time_4i] option[selected=selected]', '12') output.should have_tag('select[id=person_birth_time_4i] option[selected=selected]', '12')
output.should have_tag('select[id=employee_birth_time_5i] option[selected=selected]', '13') output.should have_tag('select[id=person_birth_time_5i] option[selected=selected]', '13')
output.should have_tag('select[id=employee_birth_time_6i] option[selected=selected]', '14') output.should have_tag('select[id=person_birth_time_6i] option[selected=selected]', '14')
end end
it "should not select values when attribute value is nil and has no param values" do it "should not select values when attribute value is nil and has no param values" do
employee.birth_time = nil person.birth_time = nil
output = time_select(:employee, :birth_time, :include_blank => true, :include_seconds => true) output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
output.should_not have_tag('select[id=employee_birth_time_4i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_time_4i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_time_5i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_time_5i] option[selected=selected]')
output.should_not have_tag('select[id=employee_birth_time_6i] option[selected=selected]') output.should_not have_tag('select[id=person_birth_time_6i] option[selected=selected]')
end end
end end
after :all do
ValidatesTimeliness.use_plugin_parser = false
end
end end

View File

@ -14,7 +14,7 @@ describe ValidatesTimeliness::HelperMethods do
end end
it 'should validate instance when validation method called' do it 'should validate instance when validation method called' do
r = Employee.new r = Person.new
r.validates_date :birth_date r.validates_date :birth_date
r.errors[:birth_date].should_not be_empty r.errors[:birth_date].should_not be_empty
end end