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); });