import { describe, expect, it } from 'vitest' import { dominant, family, legMin } from '../../server/utils/transitous' const leg = (mode: string, minutes: number) => ({ mode, duration: minutes * 60, startTime: '2026-07-29T08:00:00Z', endTime: '2026-07-29T08:00:00Z', from: { lat: 0, lon: 0 }, to: { lat: 0, lon: 0 }, }) const journey = (legs: ReturnType[]) => ({ duration: 0, transfers: 0, legs }) describe('family', () => { it('classe le TGV et le TER dans la meme famille ferroviaire', () => { expect(family('HIGHSPEED_RAIL')).toBe('rail') expect(family('REGIONAL_RAIL')).toBe('rail') }) it('classe metro, tram et bus comme transport urbain', () => { expect(family('SUBWAY')).toBe('urban') expect(family('TRAM')).toBe('urban') expect(family('BUS')).toBe('urban') }) it('ne compte pas la marche comme un transport', () => { expect(family('WALK')).toBe('walk') }) it('traite un mode inconnu comme de la marche plutot que de planter', () => { expect(family('TELEPORTATION')).toBe('walk') }) }) describe('legMin', () => { it('convertit la duree en minutes', () => { expect(legMin(leg('BUS', 12))).toBe(12) }) it('retombe sur les horodatages quand la duree manque', () => { const l = { mode: 'BUS', startTime: '2026-07-29T08:00:00Z', endTime: '2026-07-29T08:45:00Z', from: { lat: 0, lon: 0 }, to: { lat: 0, lon: 0 }, } expect(legMin(l)).toBe(45) }) }) describe('dominant', () => { it('classe en ferroviaire un trajet TGV precede d un bus de rabattement', () => { expect(dominant(journey([leg('BUS', 10), leg('HIGHSPEED_RAIL', 100)]))).toBe('rail') }) it('classe en urbain un trajet ou le bus domine largement', () => { expect(dominant(journey([leg('REGIONAL_RAIL', 5), leg('BUS', 90)]))).toBe('urban') }) it('ignore la marche dans la ponderation', () => { expect(dominant(journey([leg('WALK', 200), leg('TRAM', 10)]))).toBe('urban') }) it('renvoie walk quand il n y a aucun transport en commun', () => { expect(dominant(journey([leg('WALK', 30)]))).toBe('walk') }) })