mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 12:41:04 +00:00
93 lines
3.5 KiB
TypeScript
93 lines
3.5 KiB
TypeScript
/** Shared constants mirroring apps/edr-passenger-api/test/fixtures/{seed-core,seed-ui}.ts. */
|
|
export const STATIONS = {
|
|
A: "00000000-0000-4000-8000-000000000020", // Alpha / AAA
|
|
B: "00000000-0000-4000-8000-000000000021", // Bravo / BBB
|
|
C: "00000000-0000-4000-8000-000000000022", // Charlie / CCC
|
|
} as const;
|
|
|
|
export const SCHEDULE_ID = "00000000-0000-4000-8000-000000000101";
|
|
export const RETURN_SCHEDULE_ID = "00000000-0000-4000-8000-000000000201";
|
|
export const SEAT_CLASS_LOCAL = "00000000-0000-4000-8000-000000000010";
|
|
export const SEAT_CLASS_INTL = "00000000-0000-4000-8000-000000000011";
|
|
export const COACH_TYPE_ID = "00000000-0000-4000-8000-000000000001";
|
|
export const ROUTE_ID = "00000000-0000-4000-8000-000000000030";
|
|
export const PROMO_VALID = "PROMO10";
|
|
export const PROMO_EXPIRED = "EXPIRED50";
|
|
|
|
export const API_URL = process.env.API_URL ?? "http://localhost:4000";
|
|
|
|
/** Friendly nationality name → the enum the portal/search expects. */
|
|
export const NATIONALITY_ENUM = {
|
|
Ethiopian: "ETHIOPIAN",
|
|
Djiboutian: "DJIBOUTIAN",
|
|
Other: "OTHER",
|
|
} as const;
|
|
export type Nationality = keyof typeof NATIONALITY_ENUM;
|
|
|
|
/** Display currency the search returns per nationality (asserted by the currency specs). */
|
|
export const CURRENCY_BY_NATIONALITY = {
|
|
Ethiopian: "ETB",
|
|
Djiboutian: "DJF",
|
|
Other: "USD",
|
|
} as const;
|
|
|
|
function tokenFrom(file: string): string {
|
|
const fs = require("node:fs") as typeof import("node:fs");
|
|
const path = require("node:path") as typeof import("node:path");
|
|
const raw = JSON.parse(fs.readFileSync(path.join(__dirname, "storage", file), "utf8"));
|
|
for (const origin of raw.origins ?? []) {
|
|
for (const item of origin.localStorage ?? []) {
|
|
if (item.name === "auth_token") return item.value as string;
|
|
}
|
|
}
|
|
throw new Error(`auth_token not found in ${file} — did global-setup run?`);
|
|
}
|
|
|
|
/** Staff/admin auth token minted by global-setup (backoffice storageState). */
|
|
export function staffToken(): string {
|
|
return tokenFrom("staff.json");
|
|
}
|
|
|
|
/** Regular passenger (non-admin) auth token minted by global-setup (portal storageState). */
|
|
export function passengerToken(): string {
|
|
return tokenFrom("passenger.json");
|
|
}
|
|
|
|
/** Must match seed-ui.sampleDepartAt(): now + 2 days at 06:00Z. */
|
|
export function sampleDepartDate(): string {
|
|
const d = new Date();
|
|
d.setUTCDate(d.getUTCDate() + 2);
|
|
d.setUTCHours(6, 0, 0, 0);
|
|
return d.toISOString().slice(0, 10);
|
|
}
|
|
|
|
/**
|
|
* Deep-link to the results page (bypasses the search form, which cannot emit tripType/returnDate).
|
|
* `nationality` accepts the friendly name ("Ethiopian"|"Djiboutian"|"Other") and is emitted as the
|
|
* enum the results page expects. For a round trip, pass tripType "ROUND_TRIP" — returnDate defaults
|
|
* to the same calendar day (the seeded return leg departs 8h after the outbound).
|
|
*/
|
|
export function resultsUrl(opts?: {
|
|
adults?: number;
|
|
children?: number;
|
|
nationality?: string;
|
|
tripType?: "ONE_WAY" | "ROUND_TRIP";
|
|
returnDate?: string;
|
|
}) {
|
|
const nat = opts?.nationality ?? "Ethiopian";
|
|
const enumNat = (NATIONALITY_ENUM as Record<string, string>)[nat] ?? nat.toUpperCase();
|
|
const p = new URLSearchParams({
|
|
origin: STATIONS.A,
|
|
destination: STATIONS.C,
|
|
date: sampleDepartDate(),
|
|
tripType: opts?.tripType ?? "ONE_WAY",
|
|
adults: String(opts?.adults ?? 1),
|
|
children: String(opts?.children ?? 0),
|
|
nationality: enumNat,
|
|
});
|
|
if ((opts?.tripType ?? "ONE_WAY") === "ROUND_TRIP") {
|
|
p.set("returnDate", opts?.returnDate ?? sampleDepartDate());
|
|
}
|
|
return `/booking/results?${p.toString()}`;
|
|
}
|