70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
|
|
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<typeof leg>[]) => ({ 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')
|
||
|
|
})
|
||
|
|
})
|