5 class ActiveRecordValidationsI18nTests
< Test
::Unit::TestCase
9 @old_load_path, @old_backend = I18n
.load_path
, I18n
.backend
11 I18n
.backend
= I18n
::Backend::Simple.new
12 I18n
.backend
.store_translations('en', :activerecord => {:errors => {:messages => {:custom => nil}}})
17 I18n
.load_path
.replace
@old_load_path
18 I18n
.backend
= @old_backend
22 @unique ||= Topic
.create
:title => 'unique!'
26 @replied_topic ||= begin
27 topic
= Topic
.create(:title => "topic")
28 topic
.replies
<< Reply
.new
33 def reset_callbacks(*models
)
34 models
.each
do |model
|
35 model
.instance_variable_set("@validate_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
36 model
.instance_variable_set("@validate_on_create_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
37 model
.instance_variable_set("@validate_on_update_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
41 def test_default_error_messages_is_deprecated
42 assert_deprecated('ActiveRecord::Errors.default_error_messages') do
43 ActiveRecord
::Errors.default_error_messages
47 def test_percent_s_interpolation_syntax_in_error_messages_still_works
48 ActiveSupport
::Deprecation.silence
do
49 result
= I18n
.t
:does_not_exist, :default => "%s interpolation syntax is deprecated", :value => 'this'
50 assert_equal result
, "this interpolation syntax is deprecated"
54 def test_percent_s_interpolation_syntax_in_error_messages_is_deprecated
55 assert_deprecated('using %s in messages') do
56 I18n
.t
:does_not_exist, :default => "%s interpolation syntax is deprected", :value => 'this'
60 def test_percent_d_interpolation_syntax_in_error_messages_still_works
61 ActiveSupport
::Deprecation.silence
do
62 result
= I18n
.t
:does_not_exist, :default => "%d interpolation syntaxes are deprecated", :count => 2
63 assert_equal result
, "2 interpolation syntaxes are deprecated"
67 def test_percent_d_interpolation_syntax_in_error_messages_is_deprecated
68 assert_deprecated('using %d in messages') do
69 I18n
.t
:does_not_exist, :default => "%d interpolation syntaxes are deprected", :count => 2
73 # ActiveRecord::Errors
74 uses_mocha
'ActiveRecord::Errors' do
76 def test_errors_generate_message_translates_custom_model_attribute_key
78 I18n
.expects(:translate).with(
81 :default => ['Topic'],
82 :scope => [:activerecord, :models]
86 I18n
.expects(:translate).with(
89 :default => ['Title'],
90 :scope => [:activerecord, :attributes]
94 I18n
.expects(:translate).with(
95 :"models.topic.attributes.title.invalid",
97 :scope => [:activerecord, :errors],
99 :"models.topic.invalid",
100 'default from class def error 1',
101 :"messages.invalid"],
102 :attribute => "Title",
104 ).returns('default from class def error 1')
106 @topic.errors
.generate_message
:title, :invalid, :default => 'default from class def error 1'
109 def test_errors_generate_message_translates_custom_model_attribute_keys_with_sti
111 I18n
.expects(:translate).with(
114 :default => [:topic, 'Reply'],
115 :scope => [:activerecord, :models]
119 I18n
.expects(:translate).with(
122 :default => [:'topic.title', 'Title'],
123 :scope => [:activerecord, :attributes]
127 I18n
.expects(:translate).with(
128 :"models.reply.attributes.title.invalid",
130 :scope => [:activerecord, :errors],
132 :"models.reply.invalid",
133 :"models.topic.attributes.title.invalid",
134 :"models.topic.invalid",
135 'default from class def',
136 :"messages.invalid"],
138 :attribute => 'Title'
139 ).returns("default from class def")
141 Reply
.new
.errors
.generate_message
:title, :invalid, :default => 'default from class def'
145 def test_errors_add_on_empty_generates_message
146 @topic.errors
.expects(:generate_message).with(:title, :empty, {:default => nil})
147 @topic.errors
.add_on_empty
:title
150 def test_errors_add_on_empty_generates_message_with_custom_default_message
151 @topic.errors
.expects(:generate_message).with(:title, :empty, {:default => 'custom'})
152 @topic.errors
.add_on_empty
:title, 'custom'
155 def test_errors_add_on_blank_generates_message
156 @topic.errors
.expects(:generate_message).with(:title, :blank, {:default => nil})
157 @topic.errors
.add_on_blank
:title
160 def test_errors_add_on_blank_generates_message_with_custom_default_message
161 @topic.errors
.expects(:generate_message).with(:title, :blank, {:default => 'custom'})
162 @topic.errors
.add_on_blank
:title, 'custom'
165 def test_errors_full_messages_translates_human_attribute_name_for_model_attributes
166 @topic.errors
.instance_variable_set
:@errors, { 'title' => ['empty'] }
167 I18n
.expects(:translate).with(:"topic.title", :default => ['Title'], :scope => [:activerecord, :attributes], :count => 1).returns('Title')
168 @topic.errors
.full_messages
:locale => 'en'
172 # ActiveRecord::Validations
173 uses_mocha
'ActiveRecord::Validations' do
174 # validates_confirmation_of w/ mocha
176 def test_validates_confirmation_of_generates_message
177 Topic
.validates_confirmation_of
:title
178 @topic.title_confirmation
= 'foo'
179 @topic.errors
.expects(:generate_message).with(:title, :confirmation, {:default => nil})
183 def test_validates_confirmation_of_generates_message_with_custom_default_message
184 Topic
.validates_confirmation_of
:title, :message => 'custom'
185 @topic.title_confirmation
= 'foo'
186 @topic.errors
.expects(:generate_message).with(:title, :confirmation, {:default => 'custom'})
190 # validates_acceptance_of w/ mocha
192 def test_validates_acceptance_of_generates_message
193 Topic
.validates_acceptance_of
:title, :allow_nil => false
194 @topic.errors
.expects(:generate_message).with(:title, :accepted, {:default => nil})
198 def test_validates_acceptance_of_generates_message_with_custom_default_message
199 Topic
.validates_acceptance_of
:title, :message => 'custom', :allow_nil => false
200 @topic.errors
.expects(:generate_message).with(:title, :accepted, {:default => 'custom'})
204 # validates_presence_of w/ mocha
206 def test_validates_presence_of_generates_message
207 Topic
.validates_presence_of
:title
208 @topic.errors
.expects(:generate_message).with(:title, :blank, {:default => nil})
212 def test_validates_presence_of_generates_message_with_custom_default_message
213 Topic
.validates_presence_of
:title, :message => 'custom'
214 @topic.errors
.expects(:generate_message).with(:title, :blank, {:default => 'custom'})
218 def test_validates_length_of_within_generates_message_with_title_too_short
219 Topic
.validates_length_of
:title, :within => 3..5
220 @topic.errors
.expects(:generate_message).with(:title, :too_short, {:count => 3, :default => nil})
224 def test_validates_length_of_within_generates_message_with_title_too_short_and_custom_default_message
225 Topic
.validates_length_of
:title, :within => 3..5, :too_short => 'custom'
226 @topic.errors
.expects(:generate_message).with(:title, :too_short, {:count => 3, :default => 'custom'})
230 def test_validates_length_of_within_generates_message_with_title_too_long
231 Topic
.validates_length_of
:title, :within => 3..5
232 @topic.title
= 'this title is too long'
233 @topic.errors
.expects(:generate_message).with(:title, :too_long, {:count => 5, :default => nil})
237 def test_validates_length_of_within_generates_message_with_title_too_long_and_custom_default_message
238 Topic
.validates_length_of
:title, :within => 3..5, :too_long => 'custom'
239 @topic.title
= 'this title is too long'
240 @topic.errors
.expects(:generate_message).with(:title, :too_long, {:count => 5, :default => 'custom'})
244 # validates_length_of :within w/ mocha
246 def test_validates_length_of_within_generates_message_with_title_too_short
247 Topic
.validates_length_of
:title, :within => 3..5
248 @topic.errors
.expects(:generate_message).with(:title, :too_short, {:count => 3, :default => nil})
252 def test_validates_length_of_within_generates_message_with_title_too_short_and_custom_default_message
253 Topic
.validates_length_of
:title, :within => 3..5, :too_short => 'custom'
254 @topic.errors
.expects(:generate_message).with(:title, :too_short, {:count => 3, :default => 'custom'})
258 def test_validates_length_of_within_generates_message_with_title_too_long
259 Topic
.validates_length_of
:title, :within => 3..5
260 @topic.title
= 'this title is too long'
261 @topic.errors
.expects(:generate_message).with(:title, :too_long, {:count => 5, :default => nil})
265 def test_validates_length_of_within_generates_message_with_title_too_long_and_custom_default_message
266 Topic
.validates_length_of
:title, :within => 3..5, :too_long => 'custom'
267 @topic.title
= 'this title is too long'
268 @topic.errors
.expects(:generate_message).with(:title, :too_long, {:count => 5, :default => 'custom'})
272 # validates_length_of :is w/ mocha
274 def test_validates_length_of_is_generates_message
275 Topic
.validates_length_of
:title, :is => 5
276 @topic.errors
.expects(:generate_message).with(:title, :wrong_length, {:count => 5, :default => nil})
280 def test_validates_length_of_is_generates_message_with_custom_default_message
281 Topic
.validates_length_of
:title, :is => 5, :message => 'custom'
282 @topic.errors
.expects(:generate_message).with(:title, :wrong_length, {:count => 5, :default => 'custom'})
286 # validates_uniqueness_of w/ mocha
288 def test_validates_uniqueness_of_generates_message
289 Topic
.validates_uniqueness_of
:title
290 @topic.title
= unique_topic
.title
291 @topic.errors
.expects(:generate_message).with(:title, :taken, {:default => nil, :value => 'unique!'})
295 def test_validates_uniqueness_of_generates_message_with_custom_default_message
296 Topic
.validates_uniqueness_of
:title, :message => 'custom'
297 @topic.title
= unique_topic
.title
298 @topic.errors
.expects(:generate_message).with(:title, :taken, {:default => 'custom', :value => 'unique!'})
302 # validates_format_of w/ mocha
304 def test_validates_format_of_generates_message
305 Topic
.validates_format_of
:title, :with => /^[1-9][0-9]*$/
307 @topic.errors
.expects(:generate_message).with(:title, :invalid, {:value => '72x', :default => nil})
311 def test_validates_format_of_generates_message_with_custom_default_message
312 Topic
.validates_format_of
:title, :with => /^[1-9][0-9]*$/, :message => 'custom'
314 @topic.errors
.expects(:generate_message).with(:title, :invalid, {:value => '72x', :default => 'custom'})
318 # validates_inclusion_of w/ mocha
320 def test_validates_inclusion_of_generates_message
321 Topic
.validates_inclusion_of
:title, :in => %w(a b c
)
323 @topic.errors
.expects(:generate_message).with(:title, :inclusion, {:value => 'z', :default => nil})
327 def test_validates_inclusion_of_generates_message_with_custom_default_message
328 Topic
.validates_inclusion_of
:title, :in => %w(a b c
), :message => 'custom'
330 @topic.errors
.expects(:generate_message).with(:title, :inclusion, {:value => 'z', :default => 'custom'})
334 # validates_exclusion_of w/ mocha
336 def test_validates_exclusion_of_generates_message
337 Topic
.validates_exclusion_of
:title, :in => %w(a b c
)
339 @topic.errors
.expects(:generate_message).with(:title, :exclusion, {:value => 'a', :default => nil})
343 def test_validates_exclusion_of_generates_message_with_custom_default_message
344 Topic
.validates_exclusion_of
:title, :in => %w(a b c
), :message => 'custom'
346 @topic.errors
.expects(:generate_message).with(:title, :exclusion, {:value => 'a', :default => 'custom'})
350 # validates_numericality_of without :only_integer w/ mocha
352 def test_validates_numericality_of_generates_message
353 Topic
.validates_numericality_of
:title
355 @topic.errors
.expects(:generate_message).with(:title, :not_a_number, {:value => 'a', :default => nil})
359 def test_validates_numericality_of_generates_message_with_custom_default_message
360 Topic
.validates_numericality_of
:title, :message => 'custom'
362 @topic.errors
.expects(:generate_message).with(:title, :not_a_number, {:value => 'a', :default => 'custom'})
366 # validates_numericality_of with :only_integer w/ mocha
368 def test_validates_numericality_of_only_integer_generates_message
369 Topic
.validates_numericality_of
:title, :only_integer => true
371 @topic.errors
.expects(:generate_message).with(:title, :not_a_number, {:value => 'a', :default => nil})
375 def test_validates_numericality_of_only_integer_generates_message_with_custom_default_message
376 Topic
.validates_numericality_of
:title, :only_integer => true, :message => 'custom'
378 @topic.errors
.expects(:generate_message).with(:title, :not_a_number, {:value => 'a', :default => 'custom'})
382 # validates_numericality_of :odd w/ mocha
384 def test_validates_numericality_of_odd_generates_message
385 Topic
.validates_numericality_of
:title, :only_integer => true, :odd => true
387 @topic.errors
.expects(:generate_message).with(:title, :odd, {:value => 0, :default => nil})
391 def test_validates_numericality_of_odd_generates_message_with_custom_default_message
392 Topic
.validates_numericality_of
:title, :only_integer => true, :odd => true, :message => 'custom'
394 @topic.errors
.expects(:generate_message).with(:title, :odd, {:value => 0, :default => 'custom'})
398 # validates_numericality_of :less_than w/ mocha
400 def test_validates_numericality_of_less_than_generates_message
401 Topic
.validates_numericality_of
:title, :only_integer => true, :less_than => 0
403 @topic.errors
.expects(:generate_message).with(:title, :less_than, {:value => 1, :count => 0, :default => nil})
407 def test_validates_numericality_of_odd_generates_message_with_custom_default_message
408 Topic
.validates_numericality_of
:title, :only_integer => true, :less_than => 0, :message => 'custom'
410 @topic.errors
.expects(:generate_message).with(:title, :less_than, {:value => 1, :count => 0, :default => 'custom'})
414 # validates_associated w/ mocha
416 def test_validates_associated_generates_message
417 Topic
.validates_associated
:replies
418 replied_topic
.errors
.expects(:generate_message).with(:replies, :invalid, {:value => replied_topic
.replies
, :default => nil})
422 def test_validates_associated_generates_message_with_custom_default_message
423 Topic
.validates_associated
:replies
424 replied_topic
.errors
.expects(:generate_message).with(:replies, :invalid, {:value => replied_topic
.replies
, :default => nil})
429 # validates_confirmation_of w/o mocha
431 def test_validates_confirmation_of_finds_custom_model_key_translation
432 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:confirmation => 'custom message'}}}}}}
433 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:confirmation => 'global message'}}}
435 Topic
.validates_confirmation_of
:title
436 @topic.title_confirmation
= 'foo'
438 assert_equal
'custom message', @topic.errors
.on(:title)
441 def test_validates_confirmation_of_finds_global_default_translation
442 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:confirmation => 'global message'}}}
444 Topic
.validates_confirmation_of
:title
445 @topic.title_confirmation
= 'foo'
447 assert_equal
'global message', @topic.errors
.on(:title)
450 # validates_acceptance_of w/o mocha
452 def test_validates_acceptance_of_finds_custom_model_key_translation
453 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:accepted => 'custom message'}}}}}}
454 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:accepted => 'global message'}}}
456 Topic
.validates_acceptance_of
:title, :allow_nil => false
458 assert_equal
'custom message', @topic.errors
.on(:title)
461 def test_validates_acceptance_of_finds_global_default_translation
462 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:accepted => 'global message'}}}
464 Topic
.validates_acceptance_of
:title, :allow_nil => false
466 assert_equal
'global message', @topic.errors
.on(:title)
469 # validates_presence_of w/o mocha
471 def test_validates_presence_of_finds_custom_model_key_translation
472 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:blank => 'custom message'}}}}}}
473 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:blank => 'global message'}}}
475 Topic
.validates_presence_of
:title
477 assert_equal
'custom message', @topic.errors
.on(:title)
480 def test_validates_presence_of_finds_global_default_translation
481 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:blank => 'global message'}}}
483 Topic
.validates_presence_of
:title
485 assert_equal
'global message', @topic.errors
.on(:title)
488 # validates_length_of :within w/o mocha
490 def test_validates_length_of_within_finds_custom_model_key_translation
491 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:too_short => 'custom message'}}}}}}
492 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:too_short => 'global message'}}}
494 Topic
.validates_length_of
:title, :within => 3..5
496 assert_equal
'custom message', @topic.errors
.on(:title)
499 def test_validates_length_of_within_finds_global_default_translation
500 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:too_short => 'global message'}}}
502 Topic
.validates_length_of
:title, :within => 3..5
504 assert_equal
'global message', @topic.errors
.on(:title)
507 # validates_length_of :is w/o mocha
509 def test_validates_length_of_within_finds_custom_model_key_translation
510 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:wrong_length => 'custom message'}}}}}}
511 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:wrong_length => 'global message'}}}
513 Topic
.validates_length_of
:title, :is => 5
515 assert_equal
'custom message', @topic.errors
.on(:title)
518 def test_validates_length_of_within_finds_global_default_translation
519 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:wrong_length => 'global message'}}}
521 Topic
.validates_length_of
:title, :is => 5
523 assert_equal
'global message', @topic.errors
.on(:title)
526 # validates_uniqueness_of w/o mocha
528 def test_validates_length_of_within_finds_custom_model_key_translation
529 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:wrong_length => 'custom message'}}}}}}
530 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:wrong_length => 'global message'}}}
532 Topic
.validates_length_of
:title, :is => 5
534 assert_equal
'custom message', @topic.errors
.on(:title)
537 def test_validates_length_of_within_finds_global_default_translation
538 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:wrong_length => 'global message'}}}
540 Topic
.validates_length_of
:title, :is => 5
542 assert_equal
'global message', @topic.errors
.on(:title)
546 # validates_format_of w/o mocha
548 def test_validates_format_of_finds_custom_model_key_translation
549 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:invalid => 'custom message'}}}}}}
550 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:invalid => 'global message'}}}
552 Topic
.validates_format_of
:title, :with => /^[1-9][0-9]*$/
554 assert_equal
'custom message', @topic.errors
.on(:title)
557 def test_validates_format_of_finds_global_default_translation
558 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:invalid => 'global message'}}}
560 Topic
.validates_format_of
:title, :with => /^[1-9][0-9]*$/
562 assert_equal
'global message', @topic.errors
.on(:title)
565 # validates_inclusion_of w/o mocha
567 def test_validates_inclusion_of_finds_custom_model_key_translation
568 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:inclusion => 'custom message'}}}}}}
569 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:inclusion => 'global message'}}}
571 Topic
.validates_inclusion_of
:title, :in => %w(a b c
)
573 assert_equal
'custom message', @topic.errors
.on(:title)
576 def test_validates_inclusion_of_finds_global_default_translation
577 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:inclusion => 'global message'}}}
579 Topic
.validates_inclusion_of
:title, :in => %w(a b c
)
581 assert_equal
'global message', @topic.errors
.on(:title)
584 # validates_exclusion_of w/o mocha
586 def test_validates_exclusion_of_finds_custom_model_key_translation
587 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:exclusion => 'custom message'}}}}}}
588 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:exclusion => 'global message'}}}
590 Topic
.validates_exclusion_of
:title, :in => %w(a b c
)
593 assert_equal
'custom message', @topic.errors
.on(:title)
596 def test_validates_exclusion_of_finds_global_default_translation
597 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:exclusion => 'global message'}}}
599 Topic
.validates_exclusion_of
:title, :in => %w(a b c
)
602 assert_equal
'global message', @topic.errors
.on(:title)
605 # validates_numericality_of without :only_integer w/o mocha
607 def test_validates_numericality_of_finds_custom_model_key_translation
608 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:not_a_number => 'custom message'}}}}}}
609 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:not_a_number => 'global message'}}}
611 Topic
.validates_numericality_of
:title
614 assert_equal
'custom message', @topic.errors
.on(:title)
617 def test_validates_numericality_of_finds_global_default_translation
618 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:not_a_number => 'global message'}}}
620 Topic
.validates_numericality_of
:title, :only_integer => true
623 assert_equal
'global message', @topic.errors
.on(:title)
626 # validates_numericality_of with :only_integer w/o mocha
628 def test_validates_numericality_of_only_integer_finds_custom_model_key_translation
629 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:not_a_number => 'custom message'}}}}}}
630 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:not_a_number => 'global message'}}}
632 Topic
.validates_numericality_of
:title, :only_integer => true
635 assert_equal
'custom message', @topic.errors
.on(:title)
638 def test_validates_numericality_of_only_integer_finds_global_default_translation
639 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:not_a_number => 'global message'}}}
641 Topic
.validates_numericality_of
:title, :only_integer => true
644 assert_equal
'global message', @topic.errors
.on(:title)
647 # validates_numericality_of :odd w/o mocha
649 def test_validates_numericality_of_odd_finds_custom_model_key_translation
650 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:odd => 'custom message'}}}}}}
651 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:odd => 'global message'}}}
653 Topic
.validates_numericality_of
:title, :only_integer => true, :odd => true
656 assert_equal
'custom message', @topic.errors
.on(:title)
659 def test_validates_numericality_of_odd_finds_global_default_translation
660 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:odd => 'global message'}}}
662 Topic
.validates_numericality_of
:title, :only_integer => true, :odd => true
665 assert_equal
'global message', @topic.errors
.on(:title)
668 # validates_numericality_of :less_than w/o mocha
670 def test_validates_numericality_of_less_than_finds_custom_model_key_translation
671 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:less_than => 'custom message'}}}}}}
672 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:less_than => 'global message'}}}
674 Topic
.validates_numericality_of
:title, :only_integer => true, :less_than => 0
677 assert_equal
'custom message', @topic.errors
.on(:title)
680 def test_validates_numericality_of_less_than_finds_global_default_translation
681 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:less_than => 'global message'}}}
683 Topic
.validates_numericality_of
:title, :only_integer => true, :less_than => 0
686 assert_equal
'global message', @topic.errors
.on(:title)
690 # validates_associated w/o mocha
692 def test_validates_associated_finds_custom_model_key_translation
693 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:replies => {:invalid => 'custom message'}}}}}}
694 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:invalid => 'global message'}}}
696 Topic
.validates_associated
:replies
698 assert_equal
'custom message', replied_topic
.errors
.on(:replies)
701 def test_validates_associated_finds_global_default_translation
702 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:invalid => 'global message'}}}
704 Topic
.validates_associated
:replies
706 assert_equal
'global message', replied_topic
.errors
.on(:replies)
709 def test_validations_with_message_symbol_must_translate
710 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:messages => {:custom_error => "I am a custom error"}}}
711 Topic
.validates_presence_of
:title, :message => :custom_error
714 assert_equal
"I am a custom error", @topic.errors
.on(:title)
717 def test_validates_with_message_symbol_must_translate_per_attribute
718 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:title => {:custom_error => "I am a custom error"}}}}}}
719 Topic
.validates_presence_of
:title, :message => :custom_error
722 assert_equal
"I am a custom error", @topic.errors
.on(:title)
725 def test_validates_with_message_symbol_must_translate_per_model
726 I18n
.backend
.store_translations
'en', :activerecord => {:errors => {:models => {:topic => {:custom_error => "I am a custom error"}}}}
727 Topic
.validates_presence_of
:title, :message => :custom_error
730 assert_equal
"I am a custom error", @topic.errors
.on(:title)
733 def test_validates_with_message_string
734 Topic
.validates_presence_of
:title, :message => "I am a custom error"
737 assert_equal
"I am a custom error", @topic.errors
.on(:title)
742 class ActiveRecordValidationsGenerateMessageI18nTests
< Test
::Unit::TestCase
744 reset_callbacks Topic
746 I18n
.backend
.store_translations
:'en', {
750 :inclusion => "is not included in the list",
751 :exclusion => "is reserved",
752 :invalid => "is invalid",
753 :confirmation => "doesn't match confirmation",
754 :accepted => "must be accepted",
755 :empty => "can't be empty",
756 :blank => "can't be blank",
757 :too_long => "is too long (maximum is {{count}} characters)",
758 :too_short => "is too short (minimum is {{count}} characters)",
759 :wrong_length => "is the wrong length (should be {{count}} characters)",
760 :taken => "has already been taken",
761 :not_a_number => "is not a number",
762 :greater_than => "must be greater than {{count}}",
763 :greater_than_or_equal_to => "must be greater than or equal to {{count}}",
764 :equal_to => "must be equal to {{count}}",
765 :less_than => "must be less than {{count}}",
766 :less_than_or_equal_to => "must be less than or equal to {{count}}",
767 :odd => "must be odd",
768 :even => "must be even"
775 def reset_callbacks(*models
)
776 models
.each
do |model
|
777 model
.instance_variable_set("@validate_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
778 model
.instance_variable_set("@validate_on_create_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
779 model
.instance_variable_set("@validate_on_update_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
783 # validates_inclusion_of: generate_message(attr_name, :inclusion, :default => configuration[:message], :value => value)
784 def test_generate_message_inclusion_with_default_message
785 assert_equal
'is not included in the list', @topic.errors
.generate_message(:title, :inclusion, :default => nil, :value => 'title')
788 def test_generate_message_inclusion_with_custom_message
789 assert_equal
'custom message title', @topic.errors
.generate_message(:title, :inclusion, :default => 'custom message {{value}}', :value => 'title')
792 # validates_exclusion_of: generate_message(attr_name, :exclusion, :default => configuration[:message], :value => value)
793 def test_generate_message_exclusion_with_default_message
794 assert_equal
'is reserved', @topic.errors
.generate_message(:title, :exclusion, :default => nil, :value => 'title')
797 def test_generate_message_exclusion_with_custom_message
798 assert_equal
'custom message title', @topic.errors
.generate_message(:title, :exclusion, :default => 'custom message {{value}}', :value => 'title')
801 # validates_associated: generate_message(attr_name, :invalid, :default => configuration[:message], :value => value)
802 # validates_format_of: generate_message(attr_name, :invalid, :default => configuration[:message], :value => value)
803 def test_generate_message_invalid_with_default_message
804 assert_equal
'is invalid', @topic.errors
.generate_message(:title, :invalid, :default => nil, :value => 'title')
807 def test_generate_message_invalid_with_custom_message
808 assert_equal
'custom message title', @topic.errors
.generate_message(:title, :invalid, :default => 'custom message {{value}}', :value => 'title')
811 # validates_confirmation_of: generate_message(attr_name, :confirmation, :default => configuration[:message])
812 def test_generate_message_confirmation_with_default_message
813 assert_equal
"doesn't match confirmation", @topic.errors
.generate_message(:title, :confirmation, :default => nil)
816 def test_generate_message_confirmation_with_custom_message
817 assert_equal
'custom message', @topic.errors
.generate_message(:title, :confirmation, :default => 'custom message')
820 # validates_acceptance_of: generate_message(attr_name, :accepted, :default => configuration[:message])
821 def test_generate_message_accepted_with_default_message
822 assert_equal
"must be accepted", @topic.errors
.generate_message(:title, :accepted, :default => nil)
825 def test_generate_message_accepted_with_custom_message
826 assert_equal
'custom message', @topic.errors
.generate_message(:title, :accepted, :default => 'custom message')
829 # add_on_empty: generate_message(attr, :empty, :default => custom_message)
830 def test_generate_message_empty_with_default_message
831 assert_equal
"can't be empty", @topic.errors
.generate_message(:title, :empty, :default => nil)
834 def test_generate_message_empty_with_custom_message
835 assert_equal
'custom message', @topic.errors
.generate_message(:title, :empty, :default => 'custom message')
838 # add_on_blank: generate_message(attr, :blank, :default => custom_message)
839 def test_generate_message_blank_with_default_message
840 assert_equal
"can't be blank", @topic.errors
.generate_message(:title, :blank, :default => nil)
843 def test_generate_message_blank_with_custom_message
844 assert_equal
'custom message', @topic.errors
.generate_message(:title, :blank, :default => 'custom message')
847 # validates_length_of: generate_message(attr, :too_long, :default => options[:too_long], :count => option_value.end)
848 def test_generate_message_too_long_with_default_message
849 assert_equal
"is too long (maximum is 10 characters)", @topic.errors
.generate_message(:title, :too_long, :default => nil, :count => 10)
852 def test_generate_message_too_long_with_custom_message
853 assert_equal
'custom message 10', @topic.errors
.generate_message(:title, :too_long, :default => 'custom message {{count}}', :count => 10)
856 # validates_length_of: generate_message(attr, :too_short, :default => options[:too_short], :count => option_value.begin)
857 def test_generate_message_too_short_with_default_message
858 assert_equal
"is too short (minimum is 10 characters)", @topic.errors
.generate_message(:title, :too_short, :default => nil, :count => 10)
861 def test_generate_message_too_short_with_custom_message
862 assert_equal
'custom message 10', @topic.errors
.generate_message(:title, :too_short, :default => 'custom message {{count}}', :count => 10)
865 # validates_length_of: generate_message(attr, key, :default => custom_message, :count => option_value)
866 def test_generate_message_wrong_length_with_default_message
867 assert_equal
"is the wrong length (should be 10 characters)", @topic.errors
.generate_message(:title, :wrong_length, :default => nil, :count => 10)
870 def test_generate_message_wrong_length_with_custom_message
871 assert_equal
'custom message 10', @topic.errors
.generate_message(:title, :wrong_length, :default => 'custom message {{count}}', :count => 10)
874 # validates_uniqueness_of: generate_message(attr_name, :taken, :default => configuration[:message])
875 def test_generate_message_taken_with_default_message
876 assert_equal
"has already been taken", @topic.errors
.generate_message(:title, :taken, :default => nil, :value => 'title')
879 def test_generate_message_taken_with_custom_message
880 assert_equal
'custom message title', @topic.errors
.generate_message(:title, :taken, :default => 'custom message {{value}}', :value => 'title')
883 # validates_numericality_of: generate_message(attr_name, :not_a_number, :value => raw_value, :default => configuration[:message])
884 def test_generate_message_not_a_number_with_default_message
885 assert_equal
"is not a number", @topic.errors
.generate_message(:title, :not_a_number, :default => nil, :value => 'title')
888 def test_generate_message_not_a_number_with_custom_message
889 assert_equal
'custom message title', @topic.errors
.generate_message(:title, :not_a_number, :default => 'custom message {{value}}', :value => 'title')
892 # validates_numericality_of: generate_message(attr_name, option, :value => raw_value, :default => configuration[:message])
893 def test_generate_message_greater_than_with_default_message
894 assert_equal
"must be greater than 10", @topic.errors
.generate_message(:title, :greater_than, :default => nil, :value => 'title', :count => 10)
897 def test_generate_message_greater_than_or_equal_to_with_default_message
898 assert_equal
"must be greater than or equal to 10", @topic.errors
.generate_message(:title, :greater_than_or_equal_to, :default => nil, :value => 'title', :count => 10)
901 def test_generate_message_equal_to_with_default_message
902 assert_equal
"must be equal to 10", @topic.errors
.generate_message(:title, :equal_to, :default => nil, :value => 'title', :count => 10)
905 def test_generate_message_less_than_with_default_message
906 assert_equal
"must be less than 10", @topic.errors
.generate_message(:title, :less_than, :default => nil, :value => 'title', :count => 10)
909 def test_generate_message_less_than_or_equal_to_with_default_message
910 assert_equal
"must be less than or equal to 10", @topic.errors
.generate_message(:title, :less_than_or_equal_to, :default => nil, :value => 'title', :count => 10)
913 def test_generate_message_odd_with_default_message
914 assert_equal
"must be odd", @topic.errors
.generate_message(:title, :odd, :default => nil, :value => 'title', :count => 10)
917 def test_generate_message_even_with_default_message
918 assert_equal
"must be even", @topic.errors
.generate_message(:title, :even, :default => nil, :value => 'title', :count => 10)