test: cover I18nTranslatorTest and test_translate_plain_string
This commit is contained in:
1 parent
c5ce7d5ff4
commit
36b9c25afb
1 file changed
+82
@@ -0,0 +1,82 @@
|
||||
require 'minitest/autorun'
|
||||
require 'prism'
|
||||
|
||||
class I18nTranslatorTest < Minitest::Test
|
||||
def setup
|
||||
@backend = Prism::I18n::Backend.new
|
||||
@backend.store_translations(:en, {
|
||||
'greeting' => 'Hello, %{name}!',
|
||||
'apples' => { 'zero' => 'no apples', 'one' => 'one apple', 'other' => '%{count} apples' },
|
||||
'cars' => { 'one' => 'one car', 'other' => '%{count} cars' },
|
||||
'nav' => { 'home' => 'Home' }
|
||||
})
|
||||
@backend.store_translations(:pl, 'nav' => { 'home' => 'Strona glowna' })
|
||||
@translator = Prism::I18n::Translator.new(@backend, default_locale: :en)
|
||||
end
|
||||
|
||||
def test_translate_plain_string
|
||||
assert_equal 'Home', @translator.translate('nav.home', locale: :en)
|
||||
end
|
||||
|
||||
def test_translate_interpolates_named_placeholders
|
||||
assert_equal 'Hello, Ada!', @translator.translate('greeting', locale: :en, name: 'Ada')
|
||||
end
|
||||
|
||||
def test_translate_missing_interpolation_argument_raises
|
||||
assert_raises(Prism::I18n::Translator::MissingInterpolationError) do
|
||||
@translator.translate('greeting', locale: :en)
|
||||
end
|
||||
end
|
||||
|
||||
def test_translate_missing_key_raises_by_default
|
||||
assert_raises(Prism::I18n::Translator::MissingTranslationError) do
|
||||
@translator.translate('nowhere.at.all', locale: :en)
|
||||
end
|
||||
end
|
||||
|
||||
def test_translate_missing_key_uses_default_when_given
|
||||
assert_equal 'fallback text', @translator.translate('nowhere.at.all', locale: :en, default: 'fallback text')
|
||||
end
|
||||
|
||||
def test_translate_pluralizes_zero_one_other
|
||||
assert_equal 'no apples', @translator.translate('apples', locale: :en, count: 0)
|
||||
assert_equal 'one apple', @translator.translate('apples', locale: :en, count: 1)
|
||||
assert_equal '5 apples', @translator.translate('apples', locale: :en, count: 5)
|
||||
end
|
||||
|
||||
def test_translate_pluralizes_zero_as_other_when_no_zero_key
|
||||
assert_equal '0 cars', @translator.translate('cars', locale: :en, count: 0)
|
||||
end
|
||||
|
||||
def test_translate_falls_back_to_default_locale_for_missing_key_in_requested_locale
|
||||
assert_equal 'Hello, Ada!', @translator.translate('greeting', locale: :pl, name: 'Ada')
|
||||
end
|
||||
|
||||
def test_translate_prefers_requested_locale_over_fallback
|
||||
assert_equal 'Strona glowna', @translator.translate('nav.home', locale: :pl)
|
||||
end
|
||||
|
||||
def test_custom_fallback_chain_is_tried_before_default_locale
|
||||
backend = Prism::I18n::Backend.new
|
||||
backend.store_translations(:en, 'only_en' => 'English only')
|
||||
backend.store_translations(:'pt-BR', 'greeting' => 'Ola')
|
||||
translator = Prism::I18n::Translator.new(backend, default_locale: :en, fallbacks: { pt: [:'pt-BR'] })
|
||||
assert_equal 'Ola', translator.translate('greeting', locale: :pt)
|
||||
end
|
||||
|
||||
def test_localize_time_with_default_format
|
||||
time = Time.utc(2026, 3, 5, 8, 30, 0)
|
||||
assert_equal '2026-03-05 08:30:00', @translator.localize(time, locale: :en)
|
||||
end
|
||||
|
||||
def test_localize_date_with_default_format
|
||||
date = Date.new(2026, 3, 5)
|
||||
assert_equal '2026-03-05', @translator.localize(date, locale: :en)
|
||||
end
|
||||
|
||||
def test_localize_uses_named_format_from_backend
|
||||
@backend.store_translations(:en, 'time' => { 'formats' => { 'short' => '%d.%m.%Y' } })
|
||||
time = Time.utc(2026, 3, 5, 8, 30, 0)
|
||||
assert_equal '05.03.2026', @translator.localize(time, locale: :en, format: :short)
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user