import { describe, expect, it } from 'vitest' import { buildBookingLink, buildChargemapLink, buildCheckMyBusLink, buildKomboLink } from '../../shared/booking' import type { Place } from '../../shared/types' const lille: Place = { label: 'Lille, France', lat: 50.6292, lon: 3.0573 } const paris: Place = { label: 'Paris, France', lat: 48.8566, lon: 2.3522 } const stEtienne: Place = { label: 'Saint-Étienne, France', lat: 45.4397, lon: 4.3872 } const date = new Date('2026-08-15T00:00:00Z') describe('buildKomboLink', () => { it('genere une URL Kombo avec noms de ville en clair', () => { const { url, provider } = buildKomboLink(lille, paris, date) expect(url).toContain('/2026-08-15/Lille/Paris/') expect(url).toContain('/outward/1/1/18/') expect(url).toContain('/results') expect(provider).toBe('Kombo') }) it('gere les accents dans les noms de ville', () => { const { url } = buildKomboLink(stEtienne, paris, date) // Saint-Etienne conserve son tiret et son E encode expect(url).toContain('Saint-') expect(url).toContain('Paris') }) }) describe('buildCheckMyBusLink', () => { it('genere une URL CheckMyBus avec slug + coordonnees + UUID zeros', () => { const { url, provider } = buildCheckMyBusLink(lille, paris, date) expect(url).toContain('/lille/paris?') expect(url).toContain('departureDate=2026-08-15') expect(url).toContain('50.6292%2C3.0573') expect(url).toContain('48.8566%2C2.3522') expect(url).toContain('00000000-0000-0000-0000-000000000000') expect(provider).toBe('CheckMyBus') }) it('slugifie les villes avec accents', () => { const { url } = buildCheckMyBusLink(stEtienne, paris, date) expect(url).toContain('/saint-etienne/paris?') }) }) describe('buildChargemapLink', () => { it('renvoie la page d accueil du planificateur', () => { const { url, provider } = buildChargemapLink() expect(url).toBe('https://chargemap.com/map') expect(provider).toBe('Chargemap') }) }) describe('buildBookingLink', () => { it('renvoie Kombo pour train', () => { expect(buildBookingLink('train', lille, paris, date)?.provider).toBe('Kombo') }) it('renvoie CheckMyBus pour bus', () => { expect(buildBookingLink('bus', lille, paris, date)?.provider).toBe('CheckMyBus') }) it('renvoie Chargemap pour voiture electrique', () => { expect(buildBookingLink('electric_car', lille, paris, date)?.provider).toBe('Chargemap') }) it('renvoie null pour velo', () => { expect(buildBookingLink('bike', lille, paris, date)).toBeNull() }) })