diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2011-07-11 14:13:59 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2011-07-11 14:13:59 +0000 |
commit | 308a922d80331d139b576d44728e1c49d5321a7f (patch) | |
tree | 3a5dd5475c6e00decd2f375677ce1967ab85b28c | |
parent | db1bfbd01801eb04472cc3baa9c19cc96a489303 (diff) | |
download | redmine-308a922d80331d139b576d44728e1c49d5321a7f.tar.gz redmine-308a922d80331d139b576d44728e1c49d5321a7f.zip |
Validate date filters values.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6264 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/models/query.rb | 7 | ||||
-rw-r--r-- | test/unit/query_test.rb | 16 |
2 files changed, 23 insertions, 0 deletions
diff --git a/app/models/query.rb b/app/models/query.rb index ac41ab478..ab0b3320d 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -176,6 +176,13 @@ class Query < ActiveRecord::Base errors.add(label_for(field), :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+$/) } when :float errors.add(label_for(field), :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+(\.\d*)?$/) } + 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}$/) } + when ">t-", "<t-", "t-" + errors.add(label_for(field), :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+$/) } + end end end diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index ef48a8ad8..a722807db 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -170,6 +170,22 @@ class QueryTest < ActiveSupport::TestCase assert_include "CAST(custom_values.value AS decimal(60,3)) BETWEEN 30.0 AND 40.0", query.statement find_issues_with_query(query) end + + def test_date_filter_should_not_accept_non_date_values + query = Query.new(:name => '_') + query.add_filter('created_on', '=', ['a']) + + 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']) + + assert query.has_filter?('created_on') + assert !query.valid? + end def test_operator_date_equals query = Query.new(:name => '_') |