Closed mintyfresh closed 3 years ago
Update:
I tried upgrading to 5.0.0.beta2
, but this still fails. However, a different error is produced:
# Running:
E
Finished in 0.004895s, 204.2817 runs/s, 0.0000 assertions/s.
1) Error:
BugTest#test_timeliness_validation:
NoMethodError: undefined method `parse' for nil:NilClass
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/validates_timeliness-5.0.0.beta2/lib/validates_timeliness/converter.rb:74:in `parse'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/validates_timeliness-5.0.0.beta2/lib/validates_timeliness/validator.rb:62:in `validate_each'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.3.4/lib/active_model/validator.rb:152:in `block in validate'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.3.4/lib/active_model/validator.rb:149:in `each'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.3.4/lib/active_model/validator.rb:149:in `validate'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:428:in `block in make_lambda'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:200:in `block (2 levels) in halting'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:605:in `block (2 levels) in default_terminator'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:604:in `catch'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:604:in `block in default_terminator'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:201:in `block in halting'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:513:in `block in invoke_before'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:513:in `each'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:513:in `invoke_before'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:134:in `run_callbacks'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:825:in `_run_validate_callbacks'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.3.4/lib/active_model/validations.rb:406:in `run_validations!'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.3.4/lib/active_model/validations/callbacks.rb:117:in `block in run_validations!'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:101:in `run_callbacks'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:825:in `_run_validation_callbacks'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.3.4/lib/active_model/validations/callbacks.rb:117:in `run_validations!'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.3.4/lib/active_model/validations.rb:337:in `valid?'
/home/mintyfresh/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/validations.rb:68:in `valid?'
timeliness.rb:49:in `test_timeliness_validation'
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
However, unlike the previous error, this one occurs in both ActiveRecord 6.0.3.4
and 6.1.0
.
Looks like the beta version for v5 really doesn't like transient attributes.
Found the issue. A timezone wasn't set for my testcase with v5.0.0.beta2
.
Upgrading to 5.0.0.beta2
and setting a timezone seems to have resolved the issue.
Haven't looked Rails v6 support yet. So it's interesting that it even works, but be careful as there might be hidden issues.
Date and time validations raise
NoMethodError
when used with transient attributes in Rails 6.1.Executable Test Case:
Expected Result:
Validations are performed:
Actual Result:
A
NoMethodError
is raised from inside ActiveRecord:This happens with ActiveRecord
6.1.0
but not with6.0.3.4
.Curiously, this issue only occurs with transient attributes (those declared using
attribute
), and stops happening if theconfig.extend_orms = [:active_record]
configuration is removed. My guess is that the ActiveRecord extensions relied on internal functionality that was changed in between 6.0 and 6.1.Environment:
Rails Version: 6.1.0 Ruby Version: 2.6.5 Validates Timeliness Version: 4.1.1