Skip to content

Commit

Permalink
Review some tests from AMo::Errors to remove "should" usage
Browse files Browse the repository at this point in the history
Also remove duplicated tests for Errors#as_json and minor improvements
in some tests.
  • Loading branch information
carlosantoniodasilva committed Mar 30, 2013
1 parent 3d0c0c6 commit 09c55dc
Showing 1 changed file with 35 additions and 55 deletions.
90 changes: 35 additions & 55 deletions activemodel/test/cases/errors_test.rb
Expand Up @@ -54,7 +54,7 @@ def test_has_key?
assert errors.has_key?(:foo), 'errors should have key :foo'
end

test "should be able to clear the errors" do
test "clear errors" do
person = Person.new
person.validate!

Expand All @@ -63,7 +63,7 @@ def test_has_key?
assert person.errors.empty?
end

test "get returns the error by the provided key" do
test "get returns the errors for the provided key" do
errors = ActiveModel::Errors.new(self)
errors[:foo] = "omg"

Expand Down Expand Up @@ -93,182 +93,162 @@ def test_has_key?
assert_equal [:foo, :baz], errors.keys
end

test "as_json returns a json formatted representation of the errors hash" do
person = Person.new
person.validate!

assert_equal({ name: ["can not be nil"] }, person.errors.as_json)
end

test "as_json with :full_messages option" do
person = Person.new
person.validate!

assert_equal({ name: ["name can not be nil"] }, person.errors.as_json(full_messages: true))
end

test "should return true if no errors" do
test "detecting whether there are errors with empty?, blank?, include?" do
person = Person.new
person.errors[:foo]
assert person.errors.empty?
assert person.errors.blank?
assert !person.errors.include?(:foo)
end

test "method validate! should work" do
test "adding errors using conditionals with Person#validate!" do
person = Person.new
person.validate!
assert_equal ["name can not be nil"], person.errors.full_messages
assert_equal ["can not be nil"], person.errors[:name]
end

test 'should be able to assign error' do
test "assign error" do
person = Person.new
person.errors[:name] = 'should not be nil'
assert_equal ["should not be nil"], person.errors[:name]
end

test 'should be able to add an error on an attribute' do
test "add an error message on a specific attribute" do
person = Person.new
person.errors.add(:name, "can not be blank")
assert_equal ["can not be blank"], person.errors[:name]
end

test "should be able to add an error with a symbol" do
test "add an error with a symbol" do
person = Person.new
person.errors.add(:name, :blank)
message = person.errors.generate_message(:name, :blank)
assert_equal [message], person.errors[:name]
end

test "should be able to add an error with a proc" do
test "add an error with a proc" do
person = Person.new
message = Proc.new { "can not be blank" }
person.errors.add(:name, message)
assert_equal ["can not be blank"], person.errors[:name]
end

test "added? should be true if that error was added" do
test "added? detects if a specific error was added to the object" do
person = Person.new
person.errors.add(:name, "can not be blank")
assert person.errors.added?(:name, "can not be blank")
end

test "added? should handle when message is a symbol" do
test "added? handles symbol message" do
person = Person.new
person.errors.add(:name, :blank)
assert person.errors.added?(:name, :blank)
end

test "added? should handle when message is a proc" do
test "added? handles proc messages" do
person = Person.new
message = Proc.new { "can not be blank" }
person.errors.add(:name, message)
assert person.errors.added?(:name, message)
end

test "added? should default message to :invalid" do
test "added? defaults message to :invalid" do
person = Person.new
person.errors.add(:name)
assert person.errors.added?(:name)
end

test "added? should be true when several errors are present, and we ask for one of them" do
test "added? matches the given message when several errors are present for the same attribute" do
person = Person.new
person.errors.add(:name, "can not be blank")
person.errors.add(:name, "is invalid")
assert person.errors.added?(:name, "can not be blank")
end

test "added? should be false if no errors are present" do
test "added? returns false when no errors are present" do
person = Person.new
assert !person.errors.added?(:name)
end

test "added? should be false when an error is present, but we check for another error" do
test "added? returns false when checking a nonexisting error and other errors are present for the given attribute" do
person = Person.new
person.errors.add(:name, "is invalid")
assert !person.errors.added?(:name, "can not be blank")
end

test 'should respond to size' do
test "size calculates the number of error messages" do
person = Person.new
person.errors.add(:name, "can not be blank")
assert_equal 1, person.errors.size
end

test 'to_a should return an array' do
test "to_a returns the list of errors with complete messages containing the attribute names" do
person = Person.new
person.errors.add(:name, "can not be blank")
person.errors.add(:name, "can not be nil")
assert_equal ["name can not be blank", "name can not be nil"], person.errors.to_a
end

test 'to_hash should return a hash' do
test "to_hash returns the error messages hash" do
person = Person.new
person.errors.add(:name, "can not be blank")
assert_instance_of ::Hash, person.errors.to_hash
assert_equal({ name: ["can not be blank"] }, person.errors.to_hash)
end

test 'full_messages should return an array of error messages, with the attribute name included' do
test "full_messages creates a list of error messages with the attribute name included" do
person = Person.new
person.errors.add(:name, "can not be blank")
person.errors.add(:name, "can not be nil")
assert_equal ["name can not be blank", "name can not be nil"], person.errors.full_messages
end
test 'full_messages_for should contain all the messages for a given attribute' do

test "full_messages_for contains all the error messages for the given attribute" do
person = Person.new
person.errors.add(:name, "can not be blank")
person.errors.add(:name, "can not be nil")
assert_equal ["name can not be blank", "name can not be nil"], person.errors.full_messages_for(:name)
end

test 'full_messages_for should not contain messages for another attributes' do
test "full_messages_for does not contain error messages from other attributes" do
person = Person.new
person.errors.add(:name, "can not be blank")
person.errors.add(:email, "can not be blank")
assert_equal ["name can not be blank"], person.errors.full_messages_for(:name)
end

test "full_messages_for should return an empty array in case if errors hash doesn't contain a given attribute" do
test "full_messages_for returns an empty list in case there are no errors for the given attribute" do
person = Person.new
person.errors.add(:name, "can not be blank")
assert_equal [], person.errors.full_messages_for(:email)
end

test 'full_message should return the given message if attribute equals :base' do
test "full_message returns the given message when attribute is :base" do
person = Person.new
assert_equal "press the button", person.errors.full_message(:base, "press the button")
end

test 'full_message should return the given message with the attribute name included' do
test "full_message returns the given message with the attribute name included" do
person = Person.new
assert_equal "name can not be blank", person.errors.full_message(:name, "can not be blank")
assert_equal "name_test can not be blank", person.errors.full_message(:name_test, "can not be blank")
end

test 'should return a JSON hash representation of the errors' do
test "as_json creates a json formatted representation of the errors hash" do
person = Person.new
person.errors.add(:name, "can not be blank")
person.errors.add(:name, "can not be nil")
person.errors.add(:email, "is invalid")
hash = person.errors.as_json
assert_equal ["can not be blank", "can not be nil"], hash[:name]
assert_equal ["is invalid"], hash[:email]
person.validate!

assert_equal({ name: ["can not be nil"] }, person.errors.as_json)
end

test 'should return a JSON hash representation of the errors with full messages' do
test "as_json with :full_messages option creates a json formatted representation of the errors containing complete messages" do
person = Person.new
person.errors.add(:name, "can not be blank")
person.errors.add(:name, "can not be nil")
person.errors.add(:email, "is invalid")
hash = person.errors.as_json(:full_messages => true)
assert_equal ["name can not be blank", "name can not be nil"], hash[:name]
assert_equal ["email is invalid"], hash[:email]
person.validate!

assert_equal({ name: ["name can not be nil"] }, person.errors.as_json(full_messages: true))
end

test "generate_message should work without i18n_scope" do
test "generate_message works without i18n_scope" do
person = Person.new
assert !Person.respond_to?(:i18n_scope)
assert_nothing_raised {
Expand Down

0 comments on commit 09c55dc

Please sign in to comment.