47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import {
|
|
DFW_BLQ_2026_PROMPT_DRAFT,
|
|
normalizeFlightReportRequest
|
|
} from "../src/request-normalizer.js";
|
|
import {
|
|
VPN_CONNECT_TIMEOUT_MS,
|
|
VPN_DISCONNECT_TIMEOUT_MS,
|
|
buildFlightSearchPlan
|
|
} from "../src/search-orchestration.js";
|
|
|
|
test("buildFlightSearchPlan activates VPN only when marketCountry is explicit", () => {
|
|
const request = normalizeFlightReportRequest(DFW_BLQ_2026_PROMPT_DRAFT).request;
|
|
const plan = buildFlightSearchPlan(request);
|
|
|
|
assert.equal(plan.vpn.enabled, true);
|
|
assert.equal(plan.vpn.marketCountry, "TH");
|
|
assert.equal(plan.vpn.connectTimeoutMs, VPN_CONNECT_TIMEOUT_MS);
|
|
assert.equal(plan.vpn.disconnectTimeoutMs, VPN_DISCONNECT_TIMEOUT_MS);
|
|
});
|
|
|
|
test("buildFlightSearchPlan keeps airline-direct best-effort when degraded", () => {
|
|
const request = normalizeFlightReportRequest({
|
|
...DFW_BLQ_2026_PROMPT_DRAFT,
|
|
preferences: {
|
|
...DFW_BLQ_2026_PROMPT_DRAFT.preferences,
|
|
marketCountry: null
|
|
}
|
|
}).request;
|
|
const plan = buildFlightSearchPlan(request, [
|
|
{
|
|
source: "airline-direct",
|
|
status: "degraded",
|
|
checkedAt: "2026-03-30T21:00:00Z",
|
|
notes: ["Direct booking shell loads but search completion is unreliable."]
|
|
}
|
|
]);
|
|
|
|
assert.equal(plan.vpn.enabled, false);
|
|
const directSource = plan.sourceOrder.find((entry) => entry.source === "airline-direct");
|
|
assert.equal(directSource?.enabled, true);
|
|
assert.equal(directSource?.required, false);
|
|
assert.match(plan.degradedReasons.join(" "), /airline-direct/i);
|
|
});
|