aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/test/cases/nested_error_test.rb
diff options
context:
space:
mode:
authorlulalala <mark@goodlife.tw>2018-03-15 16:13:18 +0800
committerlulalala <mark@goodlife.tw>2019-03-31 22:59:12 +0800
commitef68d3e35cb58f9f491993eeec6e7de99442dd06 (patch)
tree04da4aac2ecb80d9c0a7aa170c4110b29308a8b8 /activemodel/test/cases/nested_error_test.rb
parentdb0256cad7487e7b8cc5f0640e0c8144d6b5d23f (diff)
downloadrails-ef68d3e35cb58f9f491993eeec6e7de99442dd06.tar.gz
rails-ef68d3e35cb58f9f491993eeec6e7de99442dd06.tar.bz2
rails-ef68d3e35cb58f9f491993eeec6e7de99442dd06.zip
Add ActiveModel::Error and NestedError
Add initialize_dup to deep dup. Move proc eval and flexible message position out to Errors, because proc eval is needed for Errors#added? and Errors#delete
Diffstat (limited to 'activemodel/test/cases/nested_error_test.rb')
-rw-r--r--activemodel/test/cases/nested_error_test.rb54
1 files changed, 54 insertions, 0 deletions
diff --git a/activemodel/test/cases/nested_error_test.rb b/activemodel/test/cases/nested_error_test.rb
new file mode 100644
index 0000000000..5bad100da5
--- /dev/null
+++ b/activemodel/test/cases/nested_error_test.rb
@@ -0,0 +1,54 @@
+# frozen_string_literal: true
+
+require "cases/helper"
+require "active_model/nested_error"
+require "models/topic"
+require "models/reply"
+
+class ErrorTest < ActiveModel::TestCase
+ def test_initialize
+ topic = Topic.new
+ inner_error = ActiveModel::Error.new(topic, :title, :not_enough, count: 2)
+ reply = Reply.new
+ error = ActiveModel::NestedError.new(reply, inner_error)
+
+ assert_equal reply, error.base
+ assert_equal inner_error.attribute, error.attribute
+ assert_equal inner_error.type, error.type
+ assert_equal(inner_error.options, error.options)
+ end
+
+ test "initialize with overriding attribute and type" do
+ topic = Topic.new
+ inner_error = ActiveModel::Error.new(topic, :title, :not_enough, count: 2)
+ reply = Reply.new
+ error = ActiveModel::NestedError.new(reply, inner_error, attribute: :parent, type: :foo)
+
+ assert_equal reply, error.base
+ assert_equal :parent, error.attribute
+ assert_equal :foo, error.type
+ assert_equal(inner_error.options, error.options)
+ end
+
+ def test_message
+ topic = Topic.new(author_name: "Bruce")
+ inner_error = ActiveModel::Error.new(topic, :title, :not_enough, message: Proc.new { |model, options|
+ "not good enough for #{model.author_name}"
+ })
+ reply = Reply.new(author_name: "Mark")
+ error = ActiveModel::NestedError.new(reply, inner_error)
+
+ assert_equal "not good enough for Bruce", error.message
+ end
+
+ def test_full_message
+ topic = Topic.new(author_name: "Bruce")
+ inner_error = ActiveModel::Error.new(topic, :title, :not_enough, message: Proc.new { |model, options|
+ "not good enough for #{model.author_name}"
+ })
+ reply = Reply.new(author_name: "Mark")
+ error = ActiveModel::NestedError.new(reply, inner_error)
+
+ assert_equal "Title not good enough for Bruce", error.full_message
+ end
+end