diff options
author | eileencodes <eileencodes@gmail.com> | 2016-02-24 13:45:36 -0500 |
---|---|---|
committer | eileencodes <eileencodes@gmail.com> | 2016-02-24 14:33:22 -0500 |
commit | 73f8c16601e51480d007dca5a33f2035293bdd23 (patch) | |
tree | 4781a2bad3c72de72a71298ef8d6b6cbbb51c4ba /activerecord/test | |
parent | a5776ed2b2bf8bccb083e303992a174110b3ef7f (diff) | |
download | rails-73f8c16601e51480d007dca5a33f2035293bdd23.tar.gz rails-73f8c16601e51480d007dca5a33f2035293bdd23.tar.bz2 rails-73f8c16601e51480d007dca5a33f2035293bdd23.zip |
Ensure suppressor runs before validations
I ran into an issue where validations on a suppressed record were
causing validation errors to be thrown on a record that was never going
to be saved.
There isn't a reason to run the validations on a record that doesn't
matter.
This change moves the suppressor up the chain to be run on the `save` or
`save!` in the validations rather than in persistence. The issue with
running it when we hit persistence is that the validations are run
first, then we hit persistance, and then we hit the suppressor. The
suppressor comes first.
The change to the test was required since I added the
`validates_presence_of` validations. Adding this alone was enough to
demonstrate the issue. I added a new test to demonstrate the new
behavior is explict.
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/suppressor_test.rb | 13 | ||||
-rw-r--r-- | activerecord/test/models/notification.rb | 1 |
2 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/test/cases/suppressor_test.rb b/activerecord/test/cases/suppressor_test.rb index 72c5c16555..7d44e36419 100644 --- a/activerecord/test/cases/suppressor_test.rb +++ b/activerecord/test/cases/suppressor_test.rb @@ -46,7 +46,18 @@ class SuppressorTest < ActiveRecord::TestCase Notification.suppress { UserWithNotification.create! } assert_difference -> { Notification.count } do - Notification.create! + Notification.create!(message: "New Comment") + end + end + + def test_suppresses_validations_on_create + assert_no_difference -> { Notification.count } do + Notification.suppress do + User.create + User.create! + User.new.save + User.new.save! + end end end end diff --git a/activerecord/test/models/notification.rb b/activerecord/test/models/notification.rb index b4b4b8f1b6..82edc64b68 100644 --- a/activerecord/test/models/notification.rb +++ b/activerecord/test/models/notification.rb @@ -1,2 +1,3 @@ class Notification < ActiveRecord::Base + validates_presence_of :message end |