lecheminvert.tech/test/unit/booking.spec.ts

65 lines
2.5 KiB
TypeScript
Raw Normal View History

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()
})
})