import assert from "node:assert/strict"; import { test } from "node:test"; import { renderToReadableStream } from "hono/jsx/streaming"; import { CodeActivity } from "./components/code-activity.tsx"; test("Code renders navigation and loading states before upstream responses", async (t) => { let release!: () => void; const pending = new Promise((resolve) => { release = resolve; }); t.mock.method(globalThis, "fetch", async () => { await pending; return new Response("unavailable", { status: 503 }); }); const reader = renderToReadableStream().getReader(); try { const first = await Promise.race([ reader.read(), new Promise((_, reject) => { const timer = setTimeout(() => reject(new Error("Initial page waited on upstream")), 500); timer.unref(); }), ]); const html = typeof first.value === "string" ? first.value : new TextDecoder().decode(first.value); assert.match(html, /code-page-header/); assert.match(html, /code-activity-skeleton/); assert.match(html, /href="https:\/\/tangled.org\/cameron.stream"/); release(); let remainder = ""; for (;;) { const chunk = await reader.read(); if (chunk.done) break; remainder += typeof chunk.value === "string" ? chunk.value : new TextDecoder().decode(chunk.value); } assert.match(remainder, /temporarily unavailable/); } finally { release(); } });