Files
Gnuboard7/tests/Unit/Helpers/LocalizedLabelTest.php
T
2026-05-11 11:29:41 +09:00

118 lines
3.5 KiB
PHP

<?php
namespace Tests\Unit\Helpers;
use Tests\TestCase;
/**
* `localized_label()` / `localized_payload()` helper 단위 테스트.
*
* 우선순위 검증:
* 1. nameKey __() 우선 (registry payload 패턴)
* 2. value[locale] (settings JSON 패턴)
* 3. fallbackKey __() (settings JSON 의 lang pack fallback)
* 4. value[fallback_locale] / value 첫 키 (최종 fallback)
*/
class LocalizedLabelTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();
// 테스트용 lang 라인 등록 (translator 의 in-memory loader 활용)
app('translator')->addLines([
'test_helper.foo' => '폴백 키 KO',
'test_helper.bar' => '네임 키 KO',
], 'ko');
app('translator')->addLines([
'test_helper.foo' => 'Fallback Key EN',
'test_helper.bar' => 'Name Key EN',
], 'en');
}
public function test_name_key_resolves_first_when_present(): void
{
app()->setLocale('ko');
$this->assertSame(
'네임 키 KO',
localized_label(
value: ['ko' => 'value-ko', 'en' => 'value-en'],
nameKey: 'test_helper.bar',
),
);
}
public function test_value_locale_used_when_name_key_absent(): void
{
app()->setLocale('en');
$this->assertSame(
'value-en',
localized_label(value: ['ko' => 'value-ko', 'en' => 'value-en']),
);
}
public function test_fallback_key_used_when_value_locale_missing(): void
{
app()->setLocale('ko');
$this->assertSame(
'폴백 키 KO',
localized_label(
value: ['en' => 'only-en'],
fallbackKey: 'test_helper.foo',
),
);
}
public function test_value_fallback_locale_used_when_no_keys(): void
{
app()->setLocale('ja');
config(['app.fallback_locale' => 'ko']);
$this->assertSame(
'value-ko',
localized_label(value: ['ko' => 'value-ko', 'en' => 'value-en']),
);
}
public function test_returns_empty_string_when_all_sources_empty(): void
{
app()->setLocale('ko');
$this->assertSame('', localized_label());
$this->assertSame('', localized_label(value: null, nameKey: null, fallbackKey: null));
}
public function test_localized_payload_with_name_key_field(): void
{
app()->setLocale('en');
$entry = [
'id' => 'mail',
'name_key' => 'test_helper.bar',
'name' => ['ko' => 'fallback-ko', 'en' => 'fallback-en'],
];
$this->assertSame('Name Key EN', localized_payload($entry, 'name'));
}
public function test_localized_payload_falls_back_to_value_when_name_key_unresolved(): void
{
app()->setLocale('ko');
$entry = [
'id' => 'foo',
'name' => ['ko' => 'value-ko', 'en' => 'value-en'],
];
$this->assertSame('value-ko', localized_payload($entry, 'name'));
}
public function test_localized_payload_returns_empty_when_field_absent(): void
{
$entry = ['id' => 'foo'];
$this->assertSame('', localized_payload($entry, 'name'));
}
public function test_locale_argument_overrides_app_locale(): void
{
app()->setLocale('ko');
$this->assertSame(
'Name Key EN',
localized_label(nameKey: 'test_helper.bar', locale: 'en'),
);
}
}