65 lines
2.5 KiB
TypeScript
65 lines
2.5 KiB
TypeScript
|
|
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()
|
||
|
|
})
|
||
|
|
})
|