Import initial : code en production sur Hetzner
Some checks are pending
CI / tests (push) Waiting to run
CI / deploiement (push) Blocked by required conditions

This commit is contained in:
Adam Belkacemi 2026-09-07 18:21:38 +00:00
commit cf6ee64e31
43 changed files with 14404 additions and 0 deletions

View file

@ -0,0 +1,59 @@
import { describe, expect, it } from 'vitest'
import { haversineKm, legKm, summarize } from '../../server/utils/transitous'
const PARIS = { lat: 48.8566, lon: 2.3522 }
const LYON = { lat: 45.764, lon: 4.8357 }
describe('haversineKm', () => {
it('mesure Paris-Lyon a environ 392 km a vol d oiseau', () => {
const km = haversineKm(PARIS, LYON)
expect(km).toBeGreaterThan(388)
expect(km).toBeLessThan(396)
})
it('renvoie zero entre un point et lui-meme', () => {
expect(haversineKm(PARIS, PARIS)).toBe(0)
})
})
describe('legKm', () => {
const base = { mode: 'RAIL', startTime: '', endTime: '', from: PARIS, to: LYON }
it('utilise la distance fournie quand elle existe', () => {
expect(legKm({ ...base, distance: 465000 })).toBe(465)
})
it('retombe sur le calcul geometrique quand la distance manque', () => {
expect(legKm(base)).toBeCloseTo(haversineKm(PARIS, LYON), 5)
})
})
describe('summarize', () => {
const leg = (mode: string, distance: number) => ({
mode,
distance,
startTime: '',
endTime: '',
from: PARIS,
to: PARIS,
})
it('applique a chaque troncon son propre facteur d emission', () => {
// 10 km de metro a 4,1 g + 400 km de TGV a 2,4 g
const r = summarize({ duration: 7200, transfers: 1, legs: [leg('SUBWAY', 10000), leg('HIGHSPEED_RAIL', 400000)] }, 'train')
expect(r.co2Grams).toBe(1001)
expect(r.distanceKm).toBe(410)
expect(r.durationMin).toBe(120)
})
it('ne compte pas la marche dans les emissions', () => {
const r = summarize({ duration: 600, transfers: 0, legs: [leg('WALK', 2000)] }, 'bus')
expect(r.co2Grams).toBe(0)
})
it('prend le facteur le plus penalisant pour un mode inconnu', () => {
// Mieux vaut surestimer que de laisser croire a un trajet propre.
const r = summarize({ duration: 600, transfers: 0, legs: [leg('TELEPORTATION', 10000)] }, 'bus')
expect(r.co2Grams).toBe(1130)
})
})