160 lines
4.5 KiB
TypeScript
160 lines
4.5 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { PathnameInterpreter } from './PathnameInterpreter';
|
|
|
|
describe('PathnameInterpreter', () => {
|
|
describe('interpret() - no locale prefix cases', () => {
|
|
it('should handle root path', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '/',
|
|
});
|
|
});
|
|
|
|
it('should handle simple path without locale', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/dashboard');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '/dashboard',
|
|
});
|
|
});
|
|
|
|
it('should handle dynamic route without locale', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/leagues/123');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '/leagues/123',
|
|
});
|
|
});
|
|
|
|
it('should handle nested path without locale', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/auth/login');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '/auth/login',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('interpret() - with locale prefix', () => {
|
|
it('should strip valid 2-letter locale prefix', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/de/dashboard');
|
|
|
|
expect(result).toEqual({
|
|
locale: 'de',
|
|
logicalPathname: '/dashboard',
|
|
});
|
|
});
|
|
|
|
it('should handle locale prefix with dynamic route', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/en/leagues/456');
|
|
|
|
expect(result).toEqual({
|
|
locale: 'en',
|
|
logicalPathname: '/leagues/456',
|
|
});
|
|
});
|
|
|
|
it('should handle locale prefix with root path', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/fr/');
|
|
|
|
expect(result).toEqual({
|
|
locale: 'fr',
|
|
logicalPathname: '/',
|
|
});
|
|
});
|
|
|
|
it('should handle locale prefix with nested path', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/es/auth/settings');
|
|
|
|
expect(result).toEqual({
|
|
locale: 'es',
|
|
logicalPathname: '/auth/settings',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('interpret() - edge cases', () => {
|
|
it('should not strip invalid locale (numeric)', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/999/dashboard');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '/999/dashboard',
|
|
});
|
|
});
|
|
|
|
it('should not strip invalid locale (3 letters)', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/eng/dashboard');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '/eng/dashboard',
|
|
});
|
|
});
|
|
|
|
it('should not strip invalid locale (uppercase)', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/DE/dashboard');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '/DE/dashboard',
|
|
});
|
|
});
|
|
|
|
it('should not strip invalid locale (with special chars)', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/d-/dashboard');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '/d-/dashboard',
|
|
});
|
|
});
|
|
|
|
it('should handle empty path', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('');
|
|
|
|
expect(result).toEqual({
|
|
locale: null,
|
|
logicalPathname: '',
|
|
});
|
|
});
|
|
|
|
it('should handle path with only locale (no trailing slash)', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/de');
|
|
|
|
expect(result).toEqual({
|
|
locale: 'de',
|
|
logicalPathname: '/',
|
|
});
|
|
});
|
|
|
|
it('should handle path with only locale (with trailing slash)', () => {
|
|
const interpreter = new PathnameInterpreter();
|
|
const result = interpreter.interpret('/de/');
|
|
|
|
expect(result).toEqual({
|
|
locale: 'de',
|
|
logicalPathname: '/',
|
|
});
|
|
});
|
|
});
|
|
}); |