1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/test/cases/suppressor_test.rb
Jahfer Husain 25801cfe78 Keep state around for nested calls to #suppress
If a call to #suppress from the same class occurred inside another #suppress
block, the suppression state would be set to false before the outer block
completes.

This change keeps the previous state around in memory and unwinds it
as the blocks exit.
2016-05-16 14:07:32 -04:00

75 lines
1.8 KiB
Ruby

require 'cases/helper'
require 'models/notification'
require 'models/user'
class SuppressorTest < ActiveRecord::TestCase
def test_suppresses_create
assert_no_difference -> { Notification.count } do
Notification.suppress do
Notification.create
Notification.create!
Notification.new.save
Notification.new.save!
end
end
end
def test_suppresses_update
user = User.create! token: 'asdf'
User.suppress do
user.update token: 'ghjkl'
assert_equal 'asdf', user.reload.token
user.update! token: 'zxcvbnm'
assert_equal 'asdf', user.reload.token
user.token = 'qwerty'
user.save
assert_equal 'asdf', user.reload.token
user.token = 'uiop'
user.save!
assert_equal 'asdf', user.reload.token
end
end
def test_suppresses_create_in_callback
assert_difference -> { User.count } do
assert_no_difference -> { Notification.count } do
Notification.suppress { UserWithNotification.create! }
end
end
end
def test_resumes_saving_after_suppression_complete
Notification.suppress { UserWithNotification.create! }
assert_difference -> { Notification.count } do
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
def test_suppresses_when_nested_multiple_times
assert_no_difference -> { Notification.count } do
Notification.suppress do
Notification.suppress { }
Notification.create
Notification.create!
Notification.new.save
Notification.new.save!
end
end
end
end