From fc09ebc669bd58f415f7d3ef932ef02dab821ab5 Mon Sep 17 00:00:00 2001 From: Xavier Noria Date: Sun, 1 Feb 2009 11:13:27 +0100 Subject: Wrap calls to update_attributes in a transaction. Signed-off-by: Michael Koziarski [#922 state:committed] --- activerecord/test/cases/transactions_test.rb | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'activerecord/test/cases') diff --git a/activerecord/test/cases/transactions_test.rb b/activerecord/test/cases/transactions_test.rb index 40abd935df..bb8b9bb017 100644 --- a/activerecord/test/cases/transactions_test.rb +++ b/activerecord/test/cases/transactions_test.rb @@ -182,6 +182,40 @@ class TransactionTest < ActiveRecord::TestCase end end + def test_update_attribute_should_rollback_on_failure + Developer.before_save do + false + end + developer = Developer.first + developer.audit_logs.clear + 2.times { developer.audit_logs.create(:message => 'message') } + assert_equal 2, developer.audit_logs.size + status = developer.update_attribute(:audit_log_ids, []) + assert !status + assert_equal 2, developer.audit_logs(true).size + end + + def test_update_attributes_should_rollback_on_failure + developer = Developer.first + developer.audit_logs.clear + 2.times { developer.audit_logs.create(:message => 'message') } + assert_equal 2, developer.audit_logs.size + status = developer.update_attributes(:audit_log_ids => [], :name => nil) + assert !status + assert_equal 2, developer.audit_logs(true).size + end + + def test_update_attributes_should_rollback_on_failure! + developer = Developer.first + developer.audit_logs.clear + 2.times { developer.audit_logs.create(:message => 'message') } + assert_equal 2, developer.audit_logs.size + assert_raise(ActiveRecord::RecordInvalid) do + developer.update_attributes!(:audit_log_ids => [], :name => nil) + end + assert_equal 2, developer.audit_logs(true).size + end + def test_nested_explicit_transactions Topic.transaction do Topic.transaction do -- cgit v1.2.3