Use all possible i18n error messages for ensure_length_of_matcher.

This commit is contained in:
Aaron Gibralter 2012-02-17 15:36:17 -05:00 committed by Gabe Berke-Williams
parent 63b679c8f8
commit 0a8e6522cf
2 changed files with 39 additions and 6 deletions

View File

@ -96,11 +96,15 @@ module Shoulda # :nodoc:
def translate_messages!
if Symbol === @short_message
@short_message = default_error_message(@short_message,
:model_name => @subject.class.to_s.underscore,
:attribute => @attribute,
:count => @minimum)
end
if Symbol === @long_message
@long_message = default_error_message(@long_message,
:model_name => @subject.class.to_s.underscore,
:attribute => @attribute,
:count => @maximum)
end
end

View File

@ -26,19 +26,23 @@ def store_translations(options = {:without => []})
}
unless options[:without].include?(:model_attribute)
translations[:activerecord][:errors][:models][:example][:attributes][:attr][:blank] = 'Dont you do that to me!'
translations[:activerecord][:errors][:models][:example][:attributes][:attr][:blank] = "Don't you do that to me!"
translations[:activerecord][:errors][:models][:example][:attributes][:attr][:wrong_length] = "Don't you do that to me!"
end
unless options[:without].include?(:model)
translations[:activerecord][:errors][:models][:example][:blank] = 'Give it one more try!'
translations[:activerecord][:errors][:models][:example][:wrong_length] = 'Give it one more try!'
end
unless options[:without].include?(:message)
translations[:activerecord][:errors][:messages][:blank] = 'Oh no!'
translations[:activerecord][:errors][:messages][:wrong_length] = 'Oh no!'
end
unless options[:without].include?(:attribute)
translations[:errors][:attributes][:attr][:blank] = 'Seriously?'
translations[:errors][:attributes][:attr][:wrong_length] = 'Seriously?'
end
I18n.backend.store_translations(:en, translations)
@ -51,6 +55,7 @@ describe Shoulda::Matchers::ActiveModel::Helpers do
before do
define_model :example, :attr => :string do
validates_presence_of :attr
validates_length_of :attr, :is => 40, :allow_blank => true
end
@model = Example.new
end
@ -58,40 +63,64 @@ describe Shoulda::Matchers::ActiveModel::Helpers do
after { I18n.backend.reload! }
context "if the translation for the model attributes error exists" do
it "provides the right error message" do
it "provides the right error message for validate_presence_of" do
store_translations
@model.should validate_presence_of(:attr)
end
it "provides the right error message for validates_length_of" do
store_translations
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end
context "if no translation for the model attributes error exists" do
context "and the translation for the models error exists" do
it "provides the right error message" do
it "provides the right error message for validate_presence_of" do
store_translations(:without => :model_attribute)
@model.should validate_presence_of(:attr)
end
it "provides the right error message for validates_length_of" do
store_translations(:without => :model_attribute)
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end
context "and no translation for the models error exists" do
context "and the translation for the message exists" do
it "provides the right error message" do
it "provides the right error message for validate_presence_of" do
store_translations(:without => [:model_attribute, :model])
@model.should validate_presence_of(:attr)
end
it "provides the right error message for validates_length_of" do
store_translations(:without => [:model_attribute, :model])
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end
context "and no translation for the message exists" do
context "and the translation for the attribute exists" do
it "provides the right error message" do
it "provides the right error message for validate_presence_of" do
store_translations(:without => [:model_attribute, :model, :message])
@model.should validate_presence_of(:attr)
end
it "provides the right error message for validates_length_of" do
store_translations(:without => [:model_attribute, :model, :message])
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end
context "and no translation for the attribute exists" do
it "provides the general error message" do
it "provides the general error message for validate_presence_of" do
@model.should validate_presence_of(:attr)
end
it "provides the general error message for validates_length_of" do
@model.should ensure_length_of(:attr).is_equal_to(40)
end
end
end
end