2018-03-15 04:13:18 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "cases/helper"
|
|
|
|
require "active_model/nested_error"
|
|
|
|
require "models/topic"
|
|
|
|
require "models/reply"
|
|
|
|
|
2019-08-02 00:25:13 -04:00
|
|
|
class NestedErrorTest < ActiveModel::TestCase
|
2018-03-15 04:13:18 -04:00
|
|
|
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
|