More accurate date validation.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6265 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2011-07-11 14:36:43 +00:00
parent 308a922d80
commit 6c5b29bb68
2 changed files with 9 additions and 1 deletions

View File

@ -179,7 +179,7 @@ class Query < ActiveRecord::Base
when :date, :date_past
case operator_for(field)
when "=", ">=", "<=", "><"
errors.add(label_for(field), :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d{4}-\d{2}-\d{2}$/) }
errors.add(label_for(field), :invalid) if values_for(field).detect {|v| v.present? && (!v.match(/^\d{4}-\d{2}-\d{2}$/) || (Date.parse(v) rescue nil).nil?) }
when ">t-", "<t-", "t-"
errors.add(label_for(field), :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+$/) }
end

View File

@ -179,6 +179,14 @@ class QueryTest < ActiveSupport::TestCase
assert !query.valid?
end
def test_date_filter_should_not_accept_invalid_date_values
query = Query.new(:name => '_')
query.add_filter('created_on', '=', ['2011-01-34'])
assert query.has_filter?('created_on')
assert !query.valid?
end
def test_relative_date_filter_should_not_accept_non_integer_values
query = Query.new(:name => '_')
query.add_filter('created_on', '>t-', ['a'])