aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/lifecycle_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test/cases/lifecycle_test.rb')
-rw-r--r--activerecord/test/cases/lifecycle_test.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/activerecord/test/cases/lifecycle_test.rb b/activerecord/test/cases/lifecycle_test.rb
index fcad3e90d3..5e71ed0221 100644
--- a/activerecord/test/cases/lifecycle_test.rb
+++ b/activerecord/test/cases/lifecycle_test.rb
@@ -3,6 +3,7 @@ require 'models/topic'
require 'models/developer'
require 'models/reply'
require 'models/minimalistic'
+require 'models/comment'
class SpecialDeveloper < Developer; end
@@ -57,6 +58,28 @@ class MultiObserver < ActiveRecord::Observer
end
end
+class ValidatedComment < Comment
+ attr_accessor :callers
+
+ before_validation :record_callers
+
+ after_validation do
+ record_callers
+ end
+
+ def record_callers
+ callers << self.class if callers
+ end
+end
+
+class ValidatedCommentObserver < ActiveRecord::Observer
+ attr_accessor :callers
+
+ def after_validation(model)
+ callers << self.class if callers
+ end
+end
+
class LifecycleTest < ActiveRecord::TestCase
fixtures :topics, :developers, :minimalistics
@@ -125,4 +148,15 @@ class LifecycleTest < ActiveRecord::TestCase
def test_invalid_observer
assert_raise(ArgumentError) { Topic.observers = Object.new; Topic.instantiate_observers }
end
+
+ test "model callbacks fire before observers are notified" do
+ callers = []
+
+ comment = ValidatedComment.new
+ comment.callers = ValidatedCommentObserver.instance.callers = callers
+
+ comment.valid?
+ assert_equal [ValidatedComment, ValidatedComment, ValidatedCommentObserver], callers,
+ "model callbacks did not fire before observers were notified"
+ end
end