Add a repair_helper to repair changes to the validations inside validations_test.rb [#674 state:resolved]
Many of the tests in validations_test would add a new validation to models. However, only Topic was being reset with a fairly aggressive clearing of all validations. None of the other models being used however were recieving the same treatment. Now we use repair_validations(Topic) for the whole test case because most test cases use Topic and then the block form of repair_validations(<other_models>) inside any tests that use other models. Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
parent
c044c079ab
commit
8a92cdc863
|
@ -9,6 +9,8 @@ require 'active_record/test_case'
|
|||
require 'active_record/fixtures'
|
||||
require 'connection'
|
||||
|
||||
require 'cases/repair_helper'
|
||||
|
||||
# Show backtraces for deprecated behavior for quicker cleanup.
|
||||
ActiveSupport::Deprecation.debug = true
|
||||
|
||||
|
@ -60,6 +62,8 @@ end
|
|||
|
||||
class ActiveSupport::TestCase
|
||||
include ActiveRecord::TestFixtures
|
||||
include ActiveRecord::Testing::RepairHelper
|
||||
|
||||
self.fixture_path = FIXTURES_ROOT
|
||||
self.use_instantiated_fixtures = false
|
||||
self.use_transactional_fixtures = true
|
||||
|
|
|
@ -6,6 +6,8 @@ require 'models/person'
|
|||
require 'models/developer'
|
||||
require 'models/warehouse_thing'
|
||||
require 'models/guid'
|
||||
require 'models/owner'
|
||||
require 'models/pet'
|
||||
|
||||
# The following methods in Topic are used in test_conditional_validation_*
|
||||
class Topic
|
||||
|
@ -31,10 +33,6 @@ class UniqueReply < Reply
|
|||
validates_uniqueness_of :content, :scope => 'parent_id'
|
||||
end
|
||||
|
||||
class PlagiarizedReply < Reply
|
||||
validates_acceptance_of :author_name
|
||||
end
|
||||
|
||||
class SillyUniqueReply < UniqueReply
|
||||
end
|
||||
|
||||
|
@ -58,11 +56,9 @@ end
|
|||
class ValidationsTest < ActiveRecord::TestCase
|
||||
fixtures :topics, :developers, 'warehouse-things'
|
||||
|
||||
def setup
|
||||
Topic.instance_variable_set("@validate_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
||||
Topic.instance_variable_set("@validate_on_create_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
||||
Topic.instance_variable_set("@validate_on_update_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
||||
end
|
||||
# Most of the tests mess with the validations of Topic, so lets repair it all the time.
|
||||
# Other classes we mess with will be dealt with in the specific tests
|
||||
repair_validations(Topic)
|
||||
|
||||
def test_single_field_validation
|
||||
r = Reply.new
|
||||
|
@ -134,7 +130,7 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
Reply.create!([ { "title" => "OK" }, { "title" => "Wrong Create" }])
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def test_exception_on_create_bang_with_block
|
||||
assert_raises(ActiveRecord::RecordInvalid) do
|
||||
Reply.create!({ "title" => "OK" }) do |r|
|
||||
|
@ -142,7 +138,7 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def test_exception_on_create_bang_many_with_block
|
||||
assert_raises(ActiveRecord::RecordInvalid) do
|
||||
Reply.create!([{ "title" => "OK" }, { "title" => "Wrong Create" }]) do |r|
|
||||
|
@ -229,21 +225,16 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validates_each
|
||||
perform = true
|
||||
hits = 0
|
||||
Topic.validates_each(:title, :content, [:title, :content]) do |record, attr|
|
||||
if perform
|
||||
record.errors.add attr, 'gotcha'
|
||||
hits += 1
|
||||
end
|
||||
record.errors.add attr, 'gotcha'
|
||||
hits += 1
|
||||
end
|
||||
t = Topic.new("title" => "valid", "content" => "whatever")
|
||||
assert !t.save
|
||||
assert_equal 4, hits
|
||||
assert_equal %w(gotcha gotcha), t.errors.on(:title)
|
||||
assert_equal %w(gotcha gotcha), t.errors.on(:content)
|
||||
ensure
|
||||
perform = false
|
||||
end
|
||||
|
||||
def test_no_title_confirmation
|
||||
|
@ -315,8 +306,12 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validates_acceptance_of_as_database_column
|
||||
reply = PlagiarizedReply.create("author_name" => "Dan Brown")
|
||||
assert_equal "Dan Brown", reply["author_name"]
|
||||
repair_validations(Reply) do
|
||||
Reply.validates_acceptance_of(:author_name)
|
||||
|
||||
reply = Reply.create("author_name" => "Dan Brown")
|
||||
assert_equal "Dan Brown", reply["author_name"]
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_acceptance_of_with_non_existant_table
|
||||
|
@ -372,22 +367,24 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validate_uniqueness_with_scope
|
||||
Reply.validates_uniqueness_of(:content, :scope => "parent_id")
|
||||
repair_validations(Reply) do
|
||||
Reply.validates_uniqueness_of(:content, :scope => "parent_id")
|
||||
|
||||
t = Topic.create("title" => "I'm unique!")
|
||||
t = Topic.create("title" => "I'm unique!")
|
||||
|
||||
r1 = t.replies.create "title" => "r1", "content" => "hello world"
|
||||
assert r1.valid?, "Saving r1"
|
||||
r1 = t.replies.create "title" => "r1", "content" => "hello world"
|
||||
assert r1.valid?, "Saving r1"
|
||||
|
||||
r2 = t.replies.create "title" => "r2", "content" => "hello world"
|
||||
assert !r2.valid?, "Saving r2 first time"
|
||||
r2 = t.replies.create "title" => "r2", "content" => "hello world"
|
||||
assert !r2.valid?, "Saving r2 first time"
|
||||
|
||||
r2.content = "something else"
|
||||
assert r2.save, "Saving r2 second time"
|
||||
r2.content = "something else"
|
||||
assert r2.save, "Saving r2 second time"
|
||||
|
||||
t2 = Topic.create("title" => "I'm unique too!")
|
||||
r3 = t2.replies.create "title" => "r3", "content" => "hello world"
|
||||
assert r3.valid?, "Saving r3"
|
||||
t2 = Topic.create("title" => "I'm unique too!")
|
||||
r3 = t2.replies.create "title" => "r3", "content" => "hello world"
|
||||
assert r3.valid?, "Saving r3"
|
||||
end
|
||||
end
|
||||
|
||||
def test_validate_uniqueness_scoped_to_defining_class
|
||||
|
@ -406,27 +403,29 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validate_uniqueness_with_scope_array
|
||||
Reply.validates_uniqueness_of(:author_name, :scope => [:author_email_address, :parent_id])
|
||||
repair_validations(Reply) do
|
||||
Reply.validates_uniqueness_of(:author_name, :scope => [:author_email_address, :parent_id])
|
||||
|
||||
t = Topic.create("title" => "The earth is actually flat!")
|
||||
t = Topic.create("title" => "The earth is actually flat!")
|
||||
|
||||
r1 = t.replies.create "author_name" => "jeremy", "author_email_address" => "jeremy@rubyonrails.com", "title" => "You're crazy!", "content" => "Crazy reply"
|
||||
assert r1.valid?, "Saving r1"
|
||||
r1 = t.replies.create "author_name" => "jeremy", "author_email_address" => "jeremy@rubyonrails.com", "title" => "You're crazy!", "content" => "Crazy reply"
|
||||
assert r1.valid?, "Saving r1"
|
||||
|
||||
r2 = t.replies.create "author_name" => "jeremy", "author_email_address" => "jeremy@rubyonrails.com", "title" => "You're crazy!", "content" => "Crazy reply again..."
|
||||
assert !r2.valid?, "Saving r2. Double reply by same author."
|
||||
r2 = t.replies.create "author_name" => "jeremy", "author_email_address" => "jeremy@rubyonrails.com", "title" => "You're crazy!", "content" => "Crazy reply again..."
|
||||
assert !r2.valid?, "Saving r2. Double reply by same author."
|
||||
|
||||
r2.author_email_address = "jeremy_alt_email@rubyonrails.com"
|
||||
assert r2.save, "Saving r2 the second time."
|
||||
r2.author_email_address = "jeremy_alt_email@rubyonrails.com"
|
||||
assert r2.save, "Saving r2 the second time."
|
||||
|
||||
r3 = t.replies.create "author_name" => "jeremy", "author_email_address" => "jeremy_alt_email@rubyonrails.com", "title" => "You're wrong", "content" => "It's cubic"
|
||||
assert !r3.valid?, "Saving r3"
|
||||
r3 = t.replies.create "author_name" => "jeremy", "author_email_address" => "jeremy_alt_email@rubyonrails.com", "title" => "You're wrong", "content" => "It's cubic"
|
||||
assert !r3.valid?, "Saving r3"
|
||||
|
||||
r3.author_name = "jj"
|
||||
assert r3.save, "Saving r3 the second time."
|
||||
r3.author_name = "jj"
|
||||
assert r3.save, "Saving r3 the second time."
|
||||
|
||||
r3.author_name = "jeremy"
|
||||
assert !r3.save, "Saving r3 the third time."
|
||||
r3.author_name = "jeremy"
|
||||
assert !r3.save, "Saving r3 the third time."
|
||||
end
|
||||
end
|
||||
|
||||
def test_validate_case_insensitive_uniqueness
|
||||
|
@ -523,10 +522,12 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validate_uniqueness_with_columns_which_are_sql_keywords
|
||||
Guid.validates_uniqueness_of :key
|
||||
g = Guid.new
|
||||
g.key = "foo"
|
||||
assert_nothing_raised { !g.valid? }
|
||||
repair_validations(Guid) do
|
||||
Guid.validates_uniqueness_of :key
|
||||
g = Guid.new
|
||||
g.key = "foo"
|
||||
assert_nothing_raised { !g.valid? }
|
||||
end
|
||||
end
|
||||
|
||||
def test_validate_straight_inheritance_uniqueness
|
||||
|
@ -648,10 +649,12 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_numericality_with_getter_method
|
||||
Developer.validates_numericality_of( :salary )
|
||||
developer = Developer.new("name" => "michael", "salary" => nil)
|
||||
developer.instance_eval("def salary; read_attribute('salary') ? read_attribute('salary') : 100000; end")
|
||||
assert developer.valid?
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_numericality_of( :salary )
|
||||
developer = Developer.new("name" => "michael", "salary" => nil)
|
||||
developer.instance_eval("def salary; read_attribute('salary') ? read_attribute('salary') : 100000; end")
|
||||
assert developer.valid?
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_length_of_with_allow_nil
|
||||
|
@ -684,10 +687,12 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_numericality_with_allow_nil_and_getter_method
|
||||
Developer.validates_numericality_of( :salary, :allow_nil => true)
|
||||
developer = Developer.new("name" => "michael", "salary" => nil)
|
||||
developer.instance_eval("def salary; read_attribute('salary') ? read_attribute('salary') : 100000; end")
|
||||
assert developer.valid?
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_numericality_of( :salary, :allow_nil => true)
|
||||
developer = Developer.new("name" => "michael", "salary" => nil)
|
||||
developer.instance_eval("def salary; read_attribute('salary') ? read_attribute('salary') : 100000; end")
|
||||
assert developer.valid?
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_exclusion_of
|
||||
|
@ -892,26 +897,30 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validates_size_of_association
|
||||
assert_nothing_raised { Topic.validates_size_of :replies, :minimum => 1 }
|
||||
t = Topic.new('title' => 'noreplies', 'content' => 'whatever')
|
||||
assert !t.save
|
||||
assert t.errors.on(:replies)
|
||||
reply = t.replies.build('title' => 'areply', 'content' => 'whateveragain')
|
||||
assert t.valid?
|
||||
repair_validations(Owner) do
|
||||
assert_nothing_raised { Owner.validates_size_of :pets, :minimum => 1 }
|
||||
o = Owner.new('name' => 'nopets')
|
||||
assert !o.save
|
||||
assert o.errors.on(:pets)
|
||||
pet = o.pets.build('name' => 'apet')
|
||||
assert o.valid?
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_size_of_association_using_within
|
||||
assert_nothing_raised { Topic.validates_size_of :replies, :within => 1..2 }
|
||||
t = Topic.new('title' => 'noreplies', 'content' => 'whatever')
|
||||
assert !t.save
|
||||
assert t.errors.on(:replies)
|
||||
repair_validations(Owner) do
|
||||
assert_nothing_raised { Owner.validates_size_of :pets, :within => 1..2 }
|
||||
o = Owner.new('name' => 'nopets')
|
||||
assert !o.save
|
||||
assert o.errors.on(:pets)
|
||||
|
||||
reply = t.replies.build('title' => 'areply', 'content' => 'whateveragain')
|
||||
assert t.valid?
|
||||
pet = o.pets.build('name' => 'apet')
|
||||
assert o.valid?
|
||||
|
||||
2.times { t.replies.build('title' => 'areply', 'content' => 'whateveragain') }
|
||||
assert !t.save
|
||||
assert t.errors.on(:replies)
|
||||
2.times { o.pets.build('name' => 'apet') }
|
||||
assert !o.save
|
||||
assert o.errors.on(:pets)
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_length_of_nasty_params
|
||||
|
@ -1102,13 +1111,15 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validates_size_of_association_utf8
|
||||
with_kcode('UTF8') do
|
||||
assert_nothing_raised { Topic.validates_size_of :replies, :minimum => 1 }
|
||||
t = Topic.new('title' => 'あいうえお', 'content' => 'かきくけこ')
|
||||
assert !t.save
|
||||
assert t.errors.on(:replies)
|
||||
t.replies.build('title' => 'あいうえお', 'content' => 'かきくけこ')
|
||||
assert t.valid?
|
||||
repair_validations(Owner) do
|
||||
with_kcode('UTF8') do
|
||||
assert_nothing_raised { Owner.validates_size_of :pets, :minimum => 1 }
|
||||
o = Owner.new('name' => 'あいうえおかきくけこ')
|
||||
assert !o.save
|
||||
assert o.errors.on(:pets)
|
||||
o.pets.build('name' => 'あいうえおかきくけこ')
|
||||
assert o.valid?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1127,14 +1138,16 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validates_associated_one
|
||||
Reply.validates_associated( :topic )
|
||||
Topic.validates_presence_of( :content )
|
||||
r = Reply.new("title" => "A reply", "content" => "with content!")
|
||||
r.topic = Topic.create("title" => "uhohuhoh")
|
||||
assert !r.valid?
|
||||
assert r.errors.on(:topic)
|
||||
r.topic.content = "non-empty"
|
||||
assert r.valid?
|
||||
repair_validations(Reply) do
|
||||
Reply.validates_associated( :topic )
|
||||
Topic.validates_presence_of( :content )
|
||||
r = Reply.new("title" => "A reply", "content" => "with content!")
|
||||
r.topic = Topic.create("title" => "uhohuhoh")
|
||||
assert !r.valid?
|
||||
assert r.errors.on(:topic)
|
||||
r.topic.content = "non-empty"
|
||||
assert r.valid?
|
||||
end
|
||||
end
|
||||
|
||||
def test_validate_block
|
||||
|
@ -1158,85 +1171,105 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validates_acceptance_of_with_custom_error_using_quotes
|
||||
Developer.validates_acceptance_of :salary, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.salary = "0"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).last
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_acceptance_of :salary, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.salary = "0"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).last
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_confirmation_of_with_custom_error_using_quotes
|
||||
Developer.validates_confirmation_of :name, :message=> "confirm 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "John"
|
||||
d.name_confirmation = "Johnny"
|
||||
assert !d.valid?
|
||||
assert_equal "confirm 'single' and \"double\" quotes", d.errors.on(:name)
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_confirmation_of :name, :message=> "confirm 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "John"
|
||||
d.name_confirmation = "Johnny"
|
||||
assert !d.valid?
|
||||
assert_equal "confirm 'single' and \"double\" quotes", d.errors.on(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_format_of_with_custom_error_using_quotes
|
||||
Developer.validates_format_of :name, :with => /^(A-Z*)$/, :message=> "format 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = d.name_confirmation = "John 32"
|
||||
assert !d.valid?
|
||||
assert_equal "format 'single' and \"double\" quotes", d.errors.on(:name)
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_format_of :name, :with => /^(A-Z*)$/, :message=> "format 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = d.name_confirmation = "John 32"
|
||||
assert !d.valid?
|
||||
assert_equal "format 'single' and \"double\" quotes", d.errors.on(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_inclusion_of_with_custom_error_using_quotes
|
||||
Developer.validates_inclusion_of :salary, :in => 1000..80000, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.salary = "90,000"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).last
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_inclusion_of :salary, :in => 1000..80000, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.salary = "90,000"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).last
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_length_of_with_custom_too_long_using_quotes
|
||||
Developer.validates_length_of :name, :maximum => 4, :too_long=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "Jeffrey"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).last
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_length_of :name, :maximum => 4, :too_long=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "Jeffrey"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_length_of_with_custom_too_short_using_quotes
|
||||
Developer.validates_length_of :name, :minimum => 4, :too_short=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "Joe"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).last
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_length_of :name, :minimum => 4, :too_short=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "Joe"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_length_of_with_custom_message_using_quotes
|
||||
Developer.validates_length_of :name, :minimum => 4, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "Joe"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).last
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_length_of :name, :minimum => 4, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "Joe"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_presence_of_with_custom_message_using_quotes
|
||||
Developer.validates_presence_of :non_existent, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "Joe"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:non_existent)
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_presence_of :non_existent, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "Joe"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:non_existent)
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_uniqueness_of_with_custom_message_using_quotes
|
||||
Developer.validates_uniqueness_of :name, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "David"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).last
|
||||
repair_validations(Developer) do
|
||||
Developer.validates_uniqueness_of :name, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
d = Developer.new
|
||||
d.name = "David"
|
||||
assert !d.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def test_validates_associated_with_custom_message_using_quotes
|
||||
Reply.validates_associated :topic, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
Topic.validates_presence_of :content
|
||||
r = Reply.create("title" => "A reply", "content" => "with content!")
|
||||
r.topic = Topic.create("title" => "uhohuhoh")
|
||||
assert !r.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", r.errors.on(:topic).last
|
||||
repair_validations(Reply) do
|
||||
Reply.validates_associated :topic, :message=> "This string contains 'single' and \"double\" quotes"
|
||||
Topic.validates_presence_of :content
|
||||
r = Reply.create("title" => "A reply", "content" => "with content!")
|
||||
r.topic = Topic.create("title" => "uhohuhoh")
|
||||
assert !r.valid?
|
||||
assert_equal "This string contains 'single' and \"double\" quotes", r.errors.on(:topic)
|
||||
end
|
||||
end
|
||||
|
||||
def test_if_validation_using_method_true
|
||||
|
@ -1346,13 +1379,15 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_validates_associated_missing
|
||||
Reply.validates_presence_of(:topic)
|
||||
r = Reply.create("title" => "A reply", "content" => "with content!")
|
||||
assert !r.valid?
|
||||
assert r.errors.on(:topic)
|
||||
repair_validations(Reply) do
|
||||
Reply.validates_presence_of(:topic)
|
||||
r = Reply.create("title" => "A reply", "content" => "with content!")
|
||||
assert !r.valid?
|
||||
assert r.errors.on(:topic)
|
||||
|
||||
r.topic = Topic.find :first
|
||||
assert r.valid?
|
||||
r.topic = Topic.find :first
|
||||
assert r.valid?
|
||||
end
|
||||
end
|
||||
|
||||
def test_errors_to_xml
|
||||
|
@ -1364,14 +1399,14 @@ class ValidationsTest < ActiveRecord::TestCase
|
|||
assert xml.include?("<error>Content Empty</error>")
|
||||
end
|
||||
|
||||
def test_validation_order
|
||||
Topic.validates_presence_of :title
|
||||
Topic.validates_length_of :title, :minimum => 2
|
||||
def test_validation_order
|
||||
Topic.validates_presence_of :title
|
||||
Topic.validates_length_of :title, :minimum => 2
|
||||
|
||||
t = Topic.new("title" => "")
|
||||
assert !t.valid?
|
||||
assert_equal "can't be blank", t.errors.on("title").first
|
||||
end
|
||||
t = Topic.new("title" => "")
|
||||
assert !t.valid?
|
||||
assert_equal "can't be blank", t.errors.on("title").first
|
||||
end
|
||||
|
||||
# previous implementation of validates_presence_of eval'd the
|
||||
# string with the wrong binding, this regression test is to
|
||||
|
@ -1423,11 +1458,7 @@ class ValidatesNumericalityTest < ActiveRecord::TestCase
|
|||
JUNK = ["not a number", "42 not a number", "0xdeadbeef", "00-1", "--3", "+-3", "+3-1", "-+019.0", "12.12.13.12", "123\nnot a number"]
|
||||
INFINITY = [1.0/0.0]
|
||||
|
||||
def setup
|
||||
Topic.instance_variable_set("@validate_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
||||
Topic.instance_variable_set("@validate_on_create_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
||||
Topic.instance_variable_set("@validate_on_update_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
||||
end
|
||||
repair_validations(Topic)
|
||||
|
||||
def test_default_validates_numericality_of
|
||||
Topic.validates_numericality_of :approved
|
||||
|
|
Loading…
Reference in New Issue