import { describe, it, expect } from 'vitest'; import { mediaConfig, type MediaConfig } from './mediaConfig'; describe('mediaConfig', () => { describe('avatars', () => { it('should have a default fallback path', () => { expect(mediaConfig.avatars.defaultFallback).toBe('/images/avatars/neutral-default-avatar.jpeg'); }); it('should have all avatar type paths', () => { expect(mediaConfig.avatars.paths).toHaveProperty('male'); expect(mediaConfig.avatars.paths).toHaveProperty('female'); expect(mediaConfig.avatars.paths).toHaveProperty('neutral'); }); it('should have correct male avatar path', () => { expect(mediaConfig.avatars.paths.male).toBe('/images/avatars/male-default-avatar.jpg'); }); it('should have correct female avatar path', () => { expect(mediaConfig.avatars.paths.female).toBe('/images/avatars/female-default-avatar.jpeg'); }); it('should have correct neutral avatar path', () => { expect(mediaConfig.avatars.paths.neutral).toBe('/images/avatars/neutral-default-avatar.jpeg'); }); }); describe('api', () => { it('should have avatar function that returns correct path', () => { const result = mediaConfig.api.avatar('driver-123'); expect(result).toBe('/media/avatar/driver-123'); }); it('should have teamLogo function that returns correct path', () => { const result = mediaConfig.api.teamLogo('team-456'); expect(result).toBe('/media/teams/team-456/logo'); }); it('should have trackImage function that returns correct path', () => { const result = mediaConfig.api.trackImage('track-789'); expect(result).toBe('/media/tracks/track-789/image'); }); it('should have sponsorLogo function that returns correct path', () => { const result = mediaConfig.api.sponsorLogo('sponsor-abc'); expect(result).toBe('/media/sponsors/sponsor-abc/logo'); }); it('should have categoryIcon function that returns correct path', () => { const result = mediaConfig.api.categoryIcon('category-xyz'); expect(result).toBe('/media/categories/category-xyz/icon'); }); it('should handle special characters in IDs', () => { const result = mediaConfig.api.avatar('driver-with-special_chars.123'); expect(result).toBe('/media/avatar/driver-with-special_chars.123'); }); }); describe('structure', () => { it('should match expected MediaConfig interface', () => { const config: MediaConfig = mediaConfig; expect(config).toHaveProperty('avatars'); expect(config).toHaveProperty('api'); expect(typeof config.avatars.defaultFallback).toBe('string'); expect(typeof config.avatars.paths).toBe('object'); expect(typeof config.api.avatar).toBe('function'); expect(typeof config.api.teamLogo).toBe('function'); expect(typeof config.api.trackImage).toBe('function'); expect(typeof config.api.sponsorLogo).toBe('function'); expect(typeof config.api.categoryIcon).toBe('function'); }); it('should be immutable (as const)', () => { // The config is declared as 'as const', so it should be readonly // This test verifies the type is correct const config: MediaConfig = mediaConfig; expect(config).toBeDefined(); }); }); describe('consistency', () => { it('should use consistent paths for avatars', () => { // Default fallback should match neutral path expect(mediaConfig.avatars.defaultFallback).toBe(mediaConfig.avatars.paths.neutral); }); it('should all start with /media/ prefix', () => { expect(mediaConfig.api.avatar('test')).toMatch(/^\/media\//); expect(mediaConfig.api.teamLogo('test')).toMatch(/^\/media\//); expect(mediaConfig.api.trackImage('test')).toMatch(/^\/media\//); expect(mediaConfig.api.sponsorLogo('test')).toMatch(/^\/media\//); expect(mediaConfig.api.categoryIcon('test')).toMatch(/^\/media\//); }); }); });