trypost/tests/Unit/Enums/Workspace/ContentLanguageTest.php
Paulo Castellano c59adb4871 Cover every supported language in ContentLanguage detection tests
Extend the homepage-language detection dataset to assert all 15 supported
languages resolve from their <html lang> subtag, and pin the primary-subtag
matching so a malformed tag ("english") no longer resolves via a two-letter
prefix.
2026-07-03 15:39:35 -03:00

50 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
use App\Enums\Workspace\ContentLanguage;
test('values exposes every supported content-language code', function () {
expect(ContentLanguage::values())->toBe([
'en', 'pt-BR', 'es', 'fr', 'de', 'it', 'nl',
'pl', 'el', 'ja', 'ko', 'zh', 'ru', 'tr', 'ar',
]);
});
test('default language is English', function () {
expect(ContentLanguage::DEFAULT)->toBe(ContentLanguage::English);
expect(ContentLanguage::DEFAULT->value)->toBe('en');
});
test('options pairs each code with its native label', function () {
$options = ContentLanguage::options();
expect($options)->toHaveCount(count(ContentLanguage::cases()));
expect($options[0])->toBe(['value' => 'en', 'label' => 'English']);
expect($options)->toContain(['value' => 'pt-BR', 'label' => 'Português (Brasil)']);
expect($options)->toContain(['value' => 'ja', 'label' => '日本語']);
});
test('english name is the language name in English for the AI image prompt', function () {
expect(ContentLanguage::PortugueseBrazil->englishName())->toBe('Brazilian Portuguese');
expect(ContentLanguage::French->englishName())->toBe('French');
expect(ContentLanguage::Chinese->englishName())->toBe('Chinese');
});
test('fromHtmlLang resolves the two-letter primary subtag', function (string $lang, ?ContentLanguage $expected) {
expect(ContentLanguage::fromHtmlLang($lang))->toBe($expected);
})->with([
['pt', ContentLanguage::PortugueseBrazil],
['pt-PT', ContentLanguage::PortugueseBrazil],
['en-US', ContentLanguage::English],
['es-MX', ContentLanguage::Spanish],
['fr', ContentLanguage::French],
['ja-JP', ContentLanguage::Japanese],
['zh-Hans', ContentLanguage::Chinese],
['sv', null],
['e', null],
['', null],
// A malformed tag is matched on its whole primary subtag, never a
// two-letter prefix — "english" must not resolve to English via "en".
['english', null],
]);