34 lines
995 B
TypeScript
34 lines
995 B
TypeScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
|
|
function assert(condition: unknown, message: string) {
|
|
if (!condition) throw new Error(message);
|
|
}
|
|
|
|
export function runTests() {
|
|
const projectRoot = process.cwd();
|
|
const hookPath = path.join(
|
|
projectRoot,
|
|
"components",
|
|
"dashboard",
|
|
"scan-terminal",
|
|
"use-ai-city-forecast.ts",
|
|
);
|
|
const source = fs.readFileSync(hookPath, "utf8");
|
|
|
|
assert(
|
|
source.includes("AI_CITY_READ_SOFT_TIMEOUT_MS") &&
|
|
source.includes("softTimeoutId"),
|
|
"AI city read hook must use a soft timeout so airport-read loading does not linger",
|
|
);
|
|
assert(
|
|
source.includes("ai_soft_timeout_fallback") &&
|
|
source.includes("buildAiCityErrorForecastState"),
|
|
"AI city read soft timeout must switch to the fast fallback state while allowing later merge",
|
|
);
|
|
assert(
|
|
!source.includes("controller.abort()"),
|
|
"AI city read soft timeout should not abort the stream; late AI results should still merge",
|
|
);
|
|
}
|