changed format of string used in multi param for invalid or partial values

This commit is contained in:
Adam Meehan
2010-01-12 22:05:14 +11:00
parent f1a0016bf7
commit 82c0e1bcd3
5 changed files with 150 additions and 56 deletions

View File

@@ -1,19 +1,17 @@
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
ValidatesTimeliness.enable_datetime_select_extension!
describe 'ValidatesTimeliness::ActionView::InstanceTag' do
include ActionView::Helpers::DateHelper
include ActionController::Assertions::SelectorAssertions
before do
@person = Person.new
end
it "should display invalid datetime as datetime_select values" do
@person.birth_date_and_time = "2008-02-30 12:00:22"
output = datetime_select(:person, :birth_date_and_time, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=person_birth_date_and_time_1i]') do
with_tag('option[selected=selected]', '2008')
end
@@ -33,10 +31,33 @@ describe 'ValidatesTimeliness::ActionView::InstanceTag' do
with_tag('option[selected=selected]', '22')
end
end
it "should display datetime_select when datetime value is nil" do
@person.birth_date_and_time = nil
output = datetime_select(:person, :birth_date_and_time, :include_blank => true, :include_seconds => true)
output.should have_tag('select', 6)
end
it "should display datetime_select with no values selected for missing parts" do
@person.birth_date_and_time = '2000-- ::'
output = datetime_select(:person, :birth_date_and_time, :include_blank => true, :include_seconds => true)
output.should have_tag('select[id=person_birth_date_and_time_1i]') do
with_tag('option[selected=selected]')
end
output.should have_tag('select[id=person_birth_date_and_time_2i]') do
without_tag('option[selected=selected]')
end
output.should have_tag('select[id=person_birth_date_and_time_3i]') do
without_tag('option[selected=selected]')
end
output.should have_tag('select[id=person_birth_date_and_time_4i]') do
without_tag('option[selected=selected]')
end
output.should have_tag('select[id=person_birth_date_and_time_5i]') do
without_tag('option[selected=selected]')
end
output.should have_tag('select[id=person_birth_date_and_time_6i]') do
without_tag('option[selected=selected]')
end
end
end

View File

@@ -9,44 +9,110 @@ describe ValidatesTimeliness::ActiveRecord::MultiparameterAttributes do
time_string = time_array_to_string([2000,2,1,9,10,11], :datetime)
time_string.should == "2000-02-01 09:10:11"
end
it "should convert array for date type into date string" do
time_string = time_array_to_string([2000,2,1], :date)
time_string.should == "2000-02-01"
end
it "should convert array for time type into time string" do
time_string = time_array_to_string([2000,1,1,9,10,11], :time)
time_string.should == "09:10:11"
end
describe "execute_callstack_for_multiparameter_attributes" do
before do
@callstack = {
'birth_date_and_time' => [2000,2,1,9,10,11],
'birth_date' => [2000,2,1,9,10,11],
'birth_time' => [2000,2,1,9,10,11]
}
describe "execute_callstack_for_multiparameter_attributes" do
describe "for valid values" do
before do
@callstack = {
'birth_date_and_time' => [2000,2,1,9,10,11],
'birth_date' => [2000,2,1,9,10,11],
'birth_time' => [2000,2,1,9,10,11]
}
end
it "should store datetime string for datetime column" do
obj.should_receive(:birth_date_and_time=).once.with("2000-02-01 09:10:11")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
end
it "should store date string for a date column" do
obj.should_receive(:birth_date=).once.with("2000-02-01")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
end
it "should store time string for a time column" do
obj.should_receive(:birth_time=).once.with("09:10:11")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
end
end
it "should store datetime string for datetime column" do
obj.should_receive(:birth_date_and_time=).once.with("2000-02-01 09:10:11")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
end
it "should store date string for a date column" do
obj.should_receive(:birth_date=).once.with("2000-02-01")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
describe "for invalid values" do
before do
@callstack = {
'birth_date_and_time' => [2000,13,1,9,10,11],
'birth_date' => [2000,2,41,9,10,11],
'birth_time' => [2000,2,1,25,10,11]
}
end
it "should store invalid datetime string for datetime column" do
obj.should_receive(:birth_date_and_time=).once.with("2000-13-01 09:10:11")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
end
it "should store invalid date string for a date column" do
obj.should_receive(:birth_date=).once.with("2000-02-41")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
end
it "should store invalid time string for a time column" do
obj.should_receive(:birth_time=).once.with("25:10:11")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
end
end
it "should store time string for a time column" do
obj.should_receive(:birth_time=).once.with("09:10:11")
obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
describe "for missing values" do
it "should store nil if all datetime values nil" do
obj.should_receive(:birth_date_and_time=).once.with(nil)
callstack = { 'birth_date_and_time' => [nil,nil,nil,nil,nil,nil] }
obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
end
it "should store nil year as empty value in string" do
obj.should_receive(:birth_date_and_time=).once.with("-02-01 09:10:11")
callstack = { 'birth_date_and_time' => [nil,2,1,9,10,11] }
obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
end
it "should store nil month as empty value in string" do
obj.should_receive(:birth_date_and_time=).once.with("2000--01 09:10:11")
callstack = { 'birth_date_and_time' => [2000,nil,1,9,10,11] }
obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
end
it "should store nil day as empty value in string" do
obj.should_receive(:birth_date_and_time=).once.with("2000-02- 09:10:11")
callstack = { 'birth_date_and_time' => [2000,2,nil,9,10,11] }
obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
end
it "should store nil hour as empty value in string" do
obj.should_receive(:birth_date_and_time=).once.with("2000-02-01 :10:11")
callstack = { 'birth_date_and_time' => [2000,2,1,nil,10,11] }
obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
end
it "should store nil minute as empty value in string" do
obj.should_receive(:birth_date_and_time=).once.with("2000-02-01 09:10:")
callstack = { 'birth_date_and_time' => [2000,2,1,9,10,nil] }
obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
end
end
end
def time_array_to_string(*args)
ValidatesTimeliness::ActiveRecord.time_array_to_string(*args)
end
end

View File

@@ -13,7 +13,7 @@ if vendored = File.exists?(vendored_rails)
Dir.glob(vendored_rails + "/**/lib").each { |dir| $:.unshift dir }
else
begin
require 'ginger'
require 'ginger'
rescue LoadError
end
if ENV['VERSION']
@@ -47,6 +47,8 @@ end
require 'validates_timeliness'
require 'validates_timeliness/matcher'
ValidatesTimeliness.enable_datetime_select_extension!
ActiveRecord::Migration.verbose = false
ActiveRecord::Base.establish_connection({:adapter => 'sqlite3', :database => ':memory:'})