lecheminvert.tech/test/unit/transitous.spec.ts
Adam Belkacemi cf6ee64e31
Some checks are pending
CI / tests (push) Waiting to run
CI / deploiement (push) Blocked by required conditions
Import initial : code en production sur Hetzner
2026-09-07 18:21:38 +00:00

69 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')
})
})