mirror of
				https://github.com/public-transport/db-vendo-client.git
				synced 2025-11-04 10:06:32 +02:00 
			
		
		
		
	Allow value -1 for transfers option in journeys() (#6)
				
					
				
			* allow value -1 for transfers option in journeys() for db and dbnav profiles * add unit test for implicitly unconstrained transfers * implement `formatTransfers()`, use it `formatJourneysReq()` functions and re-add corresponding unit test
This commit is contained in:
		
							parent
							
								
									8026689ee8
								
							
						
					
					
						commit
						632a29d2aa
					
				
					 5 changed files with 35 additions and 2 deletions
				
			
		
							
								
								
									
										10
									
								
								format/transfers.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								format/transfers.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					const formatTransfers = (transfers) => {
 | 
				
			||||||
 | 
						if (transfers === -1) { // profiles may not accept -1: https://github.com/public-transport/db-vendo-client/issues/5
 | 
				
			||||||
 | 
							return undefined;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return transfers;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export {
 | 
				
			||||||
 | 
						formatTransfers,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -36,6 +36,7 @@ import {formatTime, formatTimeOfDay} from '../format/time.js';
 | 
				
			||||||
import {formatLocation} from '../format/location.js';
 | 
					import {formatLocation} from '../format/location.js';
 | 
				
			||||||
import {formatTravellers} from '../format/travellers.js';
 | 
					import {formatTravellers} from '../format/travellers.js';
 | 
				
			||||||
import {formatLoyaltyCard} from '../format/loyalty-cards.js';
 | 
					import {formatLoyaltyCard} from '../format/loyalty-cards.js';
 | 
				
			||||||
 | 
					import {formatTransfers} from '../format/transfers.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const DEBUG = (/(^|,)hafas-client(,|$)/).test(process.env.DEBUG || '');
 | 
					const DEBUG = (/(^|,)hafas-client(,|$)/).test(process.env.DEBUG || '');
 | 
				
			||||||
const logRequest = DEBUG
 | 
					const logRequest = DEBUG
 | 
				
			||||||
| 
						 | 
					@ -103,6 +104,7 @@ const defaultProfile = {
 | 
				
			||||||
	formatStation,
 | 
						formatStation,
 | 
				
			||||||
	formatTime,
 | 
						formatTime,
 | 
				
			||||||
	formatTimeOfDay,
 | 
						formatTimeOfDay,
 | 
				
			||||||
 | 
						formatTransfers,
 | 
				
			||||||
	formatTravellers,
 | 
						formatTravellers,
 | 
				
			||||||
	formatRectangle: id,
 | 
						formatRectangle: id,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,10 +4,11 @@ const formatJourneysReq = (ctx, from, to, when, outFrwd, journeysRef) => {
 | 
				
			||||||
	from = profile.formatLocation(profile, from, 'from');
 | 
						from = profile.formatLocation(profile, from, 'from');
 | 
				
			||||||
	to = profile.formatLocation(profile, to, 'to');
 | 
						to = profile.formatLocation(profile, to, 'to');
 | 
				
			||||||
	const filters = profile.formatProductsFilter({profile}, opt.products || {});
 | 
						const filters = profile.formatProductsFilter({profile}, opt.products || {});
 | 
				
			||||||
 | 
						const transfers = profile.formatTransfers(opt.transfers);
 | 
				
			||||||
	// TODO opt.accessibility
 | 
						// TODO opt.accessibility
 | 
				
			||||||
	// TODO routingMode
 | 
						// TODO routingMode
 | 
				
			||||||
	let query = {
 | 
						let query = {
 | 
				
			||||||
		maxUmstiege: opt.transfers,
 | 
							maxUmstiege: transfers,
 | 
				
			||||||
		minUmstiegszeit: opt.transferTime,
 | 
							minUmstiegszeit: opt.transferTime,
 | 
				
			||||||
		deutschlandTicketVorhanden: false,
 | 
							deutschlandTicketVorhanden: false,
 | 
				
			||||||
		nurDeutschlandTicketVerbindungen: false,
 | 
							nurDeutschlandTicketVerbindungen: false,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,7 @@ const formatJourneysReq = (ctx, from, to, when, outFrwd, journeysRef) => {
 | 
				
			||||||
	from = profile.formatLocation(profile, from, 'from');
 | 
						from = profile.formatLocation(profile, from, 'from');
 | 
				
			||||||
	to = profile.formatLocation(profile, to, 'to');
 | 
						to = profile.formatLocation(profile, to, 'to');
 | 
				
			||||||
	const filters = profile.formatProductsFilter({profile}, opt.products || {}, 'dbnav');
 | 
						const filters = profile.formatProductsFilter({profile}, opt.products || {}, 'dbnav');
 | 
				
			||||||
 | 
						const transfers = profile.formatTransfers(opt.transfers) ?? undefined; // `dbnav` does not allow `undefined` here
 | 
				
			||||||
	// TODO opt.accessibility
 | 
						// TODO opt.accessibility
 | 
				
			||||||
	// TODO routingMode
 | 
						// TODO routingMode
 | 
				
			||||||
	let query = formatBaseJourneysReq(ctx);
 | 
						let query = formatBaseJourneysReq(ctx);
 | 
				
			||||||
| 
						 | 
					@ -46,7 +47,7 @@ const formatJourneysReq = (ctx, from, to, when, outFrwd, journeysRef) => {
 | 
				
			||||||
				? [{locationId: profile.formatLocation(profile, opt.via, 'opt.via').lid}]
 | 
									? [{locationId: profile.formatLocation(profile, opt.via, 'opt.via').lid}]
 | 
				
			||||||
				: undefined,
 | 
									: undefined,
 | 
				
			||||||
			zielLocationId: to.lid,
 | 
								zielLocationId: to.lid,
 | 
				
			||||||
			maxUmstiege: opt.transfers || undefined,
 | 
								maxUmstiege: transfers,
 | 
				
			||||||
			minUmstiegsdauer: opt.transferTime || undefined,
 | 
								minUmstiegsdauer: opt.transferTime || undefined,
 | 
				
			||||||
			fahrradmitnahme: opt.bike,
 | 
								fahrradmitnahme: opt.bike,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -114,3 +114,22 @@ tap.test('formats a journeys() request with BC correctly (DB)', (t) => {
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
	t.end();
 | 
						t.end();
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tap.test('formats a journeys() request with unlimited transfers (DB)', (t) => {
 | 
				
			||||||
 | 
						const _opt = {...opt};
 | 
				
			||||||
 | 
						const ctx = {profile, opt: _opt};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.opt.transfers = 0; // no transfers
 | 
				
			||||||
 | 
						const reqZeroTransfers = profile.formatJourneysReq(ctx, '8098160', '8000284', new Date('2024-12-07T23:50:12+01:00'), true, null);
 | 
				
			||||||
 | 
						t.equal(reqZeroTransfers.body.maxUmstiege, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.opt.transfers = undefined; // unconstrained transfers implicit
 | 
				
			||||||
 | 
						const reqUnlimitedTransfersImplicit = profile.formatJourneysReq(ctx, '8098160', '8000284', new Date('2024-12-07T23:50:12+01:00'), true, null);
 | 
				
			||||||
 | 
						t.equal(reqUnlimitedTransfersImplicit.body.maxUmstiege, undefined);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.opt.transfers = -1; // unconstrained transfers explicit
 | 
				
			||||||
 | 
						const reqUnlimitedTransfersExplicit = profile.formatJourneysReq(ctx, '8098160', '8000284', new Date('2024-12-07T23:50:12+01:00'), true, null);
 | 
				
			||||||
 | 
						t.equal(reqUnlimitedTransfersExplicit.body.maxUmstiege, undefined);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						t.end();
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue