Defect #12359 » version_validate_effective_date.diff
test/unit/version_test.rb (working copy) | ||
---|---|---|
32 | 32 | |
33 | 33 |
def test_invalid_effective_date_validation |
34 | 34 |
v = Version.new(:project => Project.find(1), :name => '1.1', :effective_date => '99999-01-01') |
35 |
assert !v.save |
|
35 |
assert !v.valid? |
|
36 |
v.effective_date = '2012-11-33' |
|
37 |
assert !v.valid? |
|
38 |
v.effective_date = '2012-31-11' |
|
39 |
assert !v.valid? |
|
40 |
v.effective_date = 'ABC' |
|
41 |
assert !v.valid? |
|
36 | 42 |
assert_include I18n.translate('activerecord.errors.messages.not_a_date'), |
37 | 43 |
v.errors[:effective_date] |
38 | 44 |
end |
app/models/version.rb (working copy) | ||
---|---|---|
30 | 30 |
validates_presence_of :name |
31 | 31 |
validates_uniqueness_of :name, :scope => [:project_id] |
32 | 32 |
validates_length_of :name, :maximum => 60 |
33 |
validates_format_of :effective_date, :with => /^\d{4}-\d{2}-\d{2}$/, :message => :not_a_date, :allow_nil => true
|
|
33 |
validate :validate_effective_date
|
|
34 | 34 |
validates_inclusion_of :status, :in => VERSION_STATUSES |
35 | 35 |
validates_inclusion_of :sharing, :in => VERSION_SHARINGS |
36 | 36 | |
... | ... | |
275 | 275 |
progress |
276 | 276 |
end |
277 | 277 |
end |
278 | ||
279 |
def validate_effective_date |
|
280 |
unless effective_date_before_type_cast.empty? || |
|
281 |
((effective_date_before_type_cast =~ /^\d{4}-\d{2}-\d{2}$/) && |
|
282 |
(begin; effective_date_before_type_cast.to_date; rescue; false end)) |
|
283 |
errors.add(:effective_date, :not_a_date) |
|
284 |
end |
|
285 |
end |
|
278 | 286 |
end |