Skip to content

Commit 501f230

Browse files
johnnyshieldsp-mongop
authored
MONGOID-5337: Fix "taken" I18n message for UniquenessValidator (#5262)
* Fix "taken" message * Fix spec * Add spec * Update en.yml * Add context to spec * Reset translations after spec * Change spec * Update spec/mongoid/validatable/uniqueness_spec.rb * Update uniqueness_spec.rb * add a note Co-authored-by: shields <[email protected]> Co-authored-by: Oleg Pudeyev <[email protected]> Co-authored-by: Oleg Pudeyev <[email protected]>
1 parent 2fdd254 commit 501f230

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

lib/config/locales/en.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
en:
2+
errors:
3+
messages:
4+
taken: "has already been taken"
5+
26
mongoid:
37
errors:
48
messages:
@@ -549,8 +553,6 @@ en:
549553
server versions 3.6 and higher."
550554
resolution: "Verify that all servers in your deployment are at least
551555
version 3.6 or don't attempt to use sessions with older server versions."
552-
taken:
553-
"has already been taken"
554556
too_many_nested_attribute_records:
555557
message: "Accepting nested attributes for %{association} is limited
556558
to %{limit} records."

spec/mongoid/validatable/uniqueness_spec.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2472,4 +2472,33 @@ class SpanishActor < EuropeanActor
24722472
}.to raise_error(Mongo::Error::OperationFailure)
24732473
end
24742474
end
2475+
2476+
describe "i18n" do
2477+
2478+
context 'when using a different locale' do
2479+
2480+
around do |example|
2481+
I18n.with_locale(:fr) { example.run }
2482+
end
2483+
2484+
before do
2485+
# Translation key location is as per rails-i18n gem.
2486+
# See: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml
2487+
I18n.backend.store_translations(:fr, { errors: { messages: { taken: 'est déjà utilisé(e)' } } })
2488+
end
2489+
2490+
after do
2491+
# i18n 1.0 requires +send+ because +translations+ aren't public.
2492+
# Newer i18n versions have it as public.
2493+
I18n.backend.send(:translations).delete(:fr)
2494+
end
2495+
2496+
it "correctly translates the error message" do
2497+
Circus.create!(slogan: 'The Greatest Show on Mars')
2498+
dict = Circus.new(slogan: 'The Greatest Show on Mars')
2499+
dict.valid?
2500+
expect(dict.errors.messages[:slogan]).to eq(["est déjà utilisé(e)"])
2501+
end
2502+
end
2503+
end
24752504
end

spec/support/models/circus.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ class Circus
44
include Mongoid::Document
55

66
field :name
7+
field :slogan
8+
9+
validates_uniqueness_of :slogan, allow_blank: true
710

811
embeds_many :animals
912
end

0 commit comments

Comments
 (0)