Some checks failed
Main Confidence / confidence (push) Failing after 56s
## 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
84 lines
2.5 KiB
PHP
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,
|
|
]);
|
|
});
|