mirror of
				https://github.com/public-transport/db-vendo-client.git
				synced 2025-11-04 01:56:33 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const testEarlierLaterJourneys = async (cfg) => {
 | 
						|
	const {
 | 
						|
		test: t,
 | 
						|
		fetchJourneys,
 | 
						|
		fromId,
 | 
						|
		toId,
 | 
						|
		when,
 | 
						|
		// todo: validate
 | 
						|
	} = cfg;
 | 
						|
 | 
						|
	const model = await fetchJourneys(fromId, toId, {
 | 
						|
		results: 3, departure: when,
 | 
						|
	});
 | 
						|
 | 
						|
	// todo: move to journeys validator?
 | 
						|
	t.equal(typeof model.earlierRef, 'string');
 | 
						|
	t.ok(model.earlierRef);
 | 
						|
	t.equal(typeof model.laterRef, 'string');
 | 
						|
	t.ok(model.laterRef);
 | 
						|
 | 
						|
	// departure/arrival and earlierThan/laterThan should be mutually exclusive
 | 
						|
	await t.rejects(async () => {
 | 
						|
		await fetchJourneys(fromId, toId, {
 | 
						|
			departure: when, earlierThan: model.earlierRef,
 | 
						|
		});
 | 
						|
	});
 | 
						|
	await t.rejects(async () => {
 | 
						|
		await fetchJourneys(fromId, toId, {
 | 
						|
			departure: when, laterThan: model.laterRef,
 | 
						|
		});
 | 
						|
	});
 | 
						|
	await t.rejects(async () => {
 | 
						|
		await fetchJourneys(fromId, toId, {
 | 
						|
			arrival: when, earlierThan: model.earlierRef,
 | 
						|
		});
 | 
						|
	});
 | 
						|
	await t.rejects(async () => {
 | 
						|
		await fetchJourneys(fromId, toId, {
 | 
						|
			arrival: when, laterThan: model.laterRef,
 | 
						|
		});
 | 
						|
	});
 | 
						|
 | 
						|
	let earliestDep = Infinity, latestDep = -Infinity;
 | 
						|
	for (let j of model.journeys) {
 | 
						|
		if (j.legs[0].departure === null) {
 | 
						|
			continue;
 | 
						|
		}
 | 
						|
		const dep = Date.parse(j.legs[0].departure);
 | 
						|
		if (dep < earliestDep) {
 | 
						|
			earliestDep = dep;
 | 
						|
		} else if (dep > latestDep) {
 | 
						|
			latestDep = dep;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	const earlier = await fetchJourneys(fromId, toId, {
 | 
						|
		results: 3,
 | 
						|
		// todo: single journey ref?
 | 
						|
		earlierThan: model.earlierRef,
 | 
						|
	});
 | 
						|
	for (let j of earlier.journeys) {
 | 
						|
		const firstLeg = j.legs[0];
 | 
						|
		const dep = Date.parse(firstLeg.departure || firstLeg.plannedDeparture);
 | 
						|
		t.ok(dep < earliestDep);
 | 
						|
	}
 | 
						|
 | 
						|
	const later = await fetchJourneys(fromId, toId, {
 | 
						|
		results: 3,
 | 
						|
		// todo: single journey ref?
 | 
						|
		laterThan: model.laterRef,
 | 
						|
	});
 | 
						|
	for (let j of later.journeys) {
 | 
						|
		const firstLeg = j.legs[0];
 | 
						|
		const dep = Date.parse(firstLeg.departure || firstLeg.plannedDeparture);
 | 
						|
		t.ok(dep > latestDep);
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
export {
 | 
						|
	testEarlierLaterJourneys,
 | 
						|
};
 |