TenantAtlas/apps/platform/tests/Unit/Localization/LocaleResolverTest.php
ahmido 7613e339c4
Some checks failed
Main Confidence / confidence (push) Failing after 56s
feat: implement platform localization v1 (#293)
## Summary
- add the localization v1 foundation with request-time locale resolution and workspace or user preference handling
- localize the first-wave platform surfaces for auth, shell, dashboards, findings, baseline compare, and review workspace chrome
- add Pest coverage for locale resolution, preference flows, fallback behavior, notifications, and governance surface localization

## Scope
- active spec: specs/252-platform-localization-v1
- target branch: dev

## Notes
- machine-readable artifacts remain invariant and are not localized in this slice
- the branch includes the related spec kit artifacts for the feature

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #293
2026-04-28 19:45:03 +00:00

84 lines
2.5 KiB
PHP

<?php
declare(strict_types=1);
use App\Services\Localization\LocaleResolver;
function unitLocaleResolver(): LocaleResolver
{
return app(LocaleResolver::class);
}
it('resolves admin locale precedence from explicit override through system default', function (): void {
$resolver = unitLocaleResolver();
expect($resolver->resolveFromSources('de', 'en', 'en', 'en'))
->toMatchArray([
'locale' => 'de',
'source' => LocaleResolver::SOURCE_EXPLICIT_OVERRIDE,
'machine_artifacts_invariant' => true,
]);
expect($resolver->resolveFromSources(null, 'de', 'en', 'en'))
->toMatchArray([
'locale' => 'de',
'source' => LocaleResolver::SOURCE_USER_PREFERENCE,
]);
expect($resolver->resolveFromSources(null, null, 'de', 'en'))
->toMatchArray([
'locale' => 'de',
'source' => LocaleResolver::SOURCE_WORKSPACE_DEFAULT,
]);
expect($resolver->resolveFromSources(null, null, null, 'de'))
->toMatchArray([
'locale' => 'de',
'source' => LocaleResolver::SOURCE_SYSTEM_DEFAULT,
]);
});
it('falls through unsupported locale sources safely', function (): void {
$resolver = unitLocaleResolver();
$context = $resolver->resolveFromSources('fr', 'es', 'de', 'en');
expect($context)
->toMatchArray([
'locale' => 'de',
'source' => LocaleResolver::SOURCE_WORKSPACE_DEFAULT,
'fallback_locale' => 'en',
])
->and($context['user_preference_locale'])->toBeNull();
});
it('keeps system panel resolution to explicit override or system default only', function (): void {
$resolver = unitLocaleResolver();
expect($resolver->resolveFromSources(
explicitOverride: null,
userPreference: 'de',
workspaceDefault: 'de',
systemDefault: 'en',
includeUserPreference: false,
includeWorkspaceDefault: false,
))->toMatchArray([
'locale' => 'en',
'source' => LocaleResolver::SOURCE_SYSTEM_DEFAULT,
'user_preference_locale' => null,
'workspace_default_locale' => null,
]);
expect($resolver->resolveFromSources(
explicitOverride: 'de',
userPreference: 'en',
workspaceDefault: 'en',
systemDefault: 'en',
includeUserPreference: false,
includeWorkspaceDefault: false,
))->toMatchArray([
'locale' => 'de',
'source' => LocaleResolver::SOURCE_EXPLICIT_OVERRIDE,
]);
});