forked from baron/baron-sso
132 lines
4.7 KiB
Dart
132 lines
4.7 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:userfront/core/i18n/locale_registry.dart';
|
|
import 'package:userfront/core/i18n/locale_utils.dart';
|
|
|
|
void main() {
|
|
setUp(() {
|
|
LocaleRegistry.setSupportedLocaleCodesForTest(['en', 'ko']);
|
|
});
|
|
|
|
tearDown(() {
|
|
LocaleRegistry.resetForTest();
|
|
});
|
|
|
|
group('locale_utils', () {
|
|
test('normalizeLocaleCode handles supported locales', () {
|
|
expect(normalizeLocaleCode('ko'), 'ko');
|
|
expect(normalizeLocaleCode('ko-KR'), 'ko');
|
|
expect(normalizeLocaleCode('en'), 'en');
|
|
expect(normalizeLocaleCode('en-US'), 'en');
|
|
});
|
|
|
|
test('normalizeLocaleCode falls back to default', () {
|
|
expect(normalizeLocaleCode('ja'), defaultLocaleCode);
|
|
expect(normalizeLocaleCode(null), defaultLocaleCode);
|
|
expect(normalizeLocaleCode(''), defaultLocaleCode);
|
|
});
|
|
|
|
test('extractLocaleFromPath picks locale when present', () {
|
|
expect(extractLocaleFromPath(Uri.parse('/ko/signin')), 'ko');
|
|
expect(extractLocaleFromPath(Uri.parse('/en/profile')), 'en');
|
|
expect(extractLocaleFromPath(Uri.parse('/ko')), 'ko');
|
|
});
|
|
|
|
test('extractLocaleFromPath returns null when missing', () {
|
|
expect(extractLocaleFromPath(Uri.parse('/signin')), isNull);
|
|
expect(extractLocaleFromPath(Uri.parse('/zz/signin')), isNull);
|
|
});
|
|
|
|
test('stripLocalePath removes locale segment', () {
|
|
expect(stripLocalePath(Uri.parse('/ko/signin')), '/signin');
|
|
expect(stripLocalePath(Uri.parse('/en/profile')), '/profile');
|
|
expect(stripLocalePath(Uri.parse('/ko')), '/');
|
|
expect(stripLocalePath(Uri.parse('/en/')), '/');
|
|
});
|
|
|
|
test('stripLocalePath keeps path without locale', () {
|
|
expect(stripLocalePath(Uri.parse('/signin')), '/signin');
|
|
expect(stripLocalePath(Uri.parse('/auth/callback')), '/auth/callback');
|
|
});
|
|
|
|
test('buildLocalizedPath applies locale', () {
|
|
expect(buildLocalizedPath('ko', Uri.parse('/signin')), '/ko/signin');
|
|
expect(buildLocalizedPath('en', Uri.parse('/signin')), '/en/signin');
|
|
expect(buildLocalizedPath('ko', Uri.parse('/')), '/ko');
|
|
expect(buildLocalizedPath('en', Uri.parse('/')), '/en');
|
|
});
|
|
|
|
test('buildLocalizedPath preserves query parameters', () {
|
|
final uri = Uri.parse('/signin?redirect_uri=https://example.com');
|
|
expect(
|
|
buildLocalizedPath('ko', uri),
|
|
'/ko/signin?redirect_uri=https://example.com',
|
|
);
|
|
});
|
|
|
|
test('buildLocalizedPath preserves redirect_url parameter', () {
|
|
final uri = Uri.parse('/signin?redirect_url=https://example.com/after');
|
|
expect(
|
|
buildLocalizedPath('ko', uri),
|
|
'/ko/signin?redirect_url=https://example.com/after',
|
|
);
|
|
});
|
|
|
|
test('buildLocalizedPath preserves raw query order and duplicates', () {
|
|
final uri = Uri.parse(
|
|
'/signin?a=1&a=2&redirect_uri=https%3A%2F%2Fexample.com%2Fcb%3Fx%3D1%26y%3D2',
|
|
);
|
|
expect(
|
|
buildLocalizedPath('ko', uri),
|
|
'/ko/signin?a=1&a=2&redirect_uri=https%3A%2F%2Fexample.com%2Fcb%3Fx%3D1%26y%3D2',
|
|
);
|
|
});
|
|
|
|
test('buildLocalizedPath preserves fragment', () {
|
|
final uri = Uri.parse('/signin?notice=qr_login_required#auth');
|
|
expect(
|
|
buildLocalizedPath('ko', uri),
|
|
'/ko/signin?notice=qr_login_required#auth',
|
|
);
|
|
});
|
|
|
|
test('buildLocalizedPath replaces existing locale', () {
|
|
expect(buildLocalizedPath('en', Uri.parse('/ko/signin')), '/en/signin');
|
|
expect(buildLocalizedPath('ko', Uri.parse('/en/profile')), '/ko/profile');
|
|
});
|
|
|
|
test('buildLocalizedPath keeps unknown 2-letter prefix as path', () {
|
|
expect(
|
|
buildLocalizedPath('ko', Uri.parse('/zz/signin')),
|
|
'/ko/zz/signin',
|
|
);
|
|
});
|
|
|
|
test('buildSigninRedirectPath keeps path without query', () {
|
|
expect(
|
|
buildSigninRedirectPath('ko', Uri.parse('/ko/profile')),
|
|
'/ko/signin',
|
|
);
|
|
});
|
|
|
|
test('buildSigninRedirectPath preserves full raw query', () {
|
|
final uri = Uri.parse(
|
|
'/ko/profile?a=1&a=2&redirect_uri=https%3A%2F%2Fexample.com%2Fcb%3Fx%3D1%26y%3D2¬ice=qr_login_required',
|
|
);
|
|
expect(
|
|
buildSigninRedirectPath('ko', uri),
|
|
'/ko/signin?a=1&a=2&redirect_uri=https%3A%2F%2Fexample.com%2Fcb%3Fx%3D1%26y%3D2¬ice=qr_login_required',
|
|
);
|
|
});
|
|
|
|
test('buildSigninRedirectPath preserves redirect_url and redirect_uri', () {
|
|
final uri = Uri.parse(
|
|
'/ko/profile?redirect_url=https%3A%2F%2Fa.example.com%2Fcb&redirect_uri=https%3A%2F%2Fb.example.com%2Fcb',
|
|
);
|
|
expect(
|
|
buildSigninRedirectPath('ko', uri),
|
|
'/ko/signin?redirect_url=https%3A%2F%2Fa.example.com%2Fcb&redirect_uri=https%3A%2F%2Fb.example.com%2Fcb',
|
|
);
|
|
});
|
|
});
|
|
}
|