import { afterAll, afterEach, expect, test } from "bun:test";
import { act, useMemo, useState } from "react";
import { mkdirSync, writeFileSync } from "node:fs";
const source = process.env.FILING_SOURCE ?? new URL("../../../../", import.meta.url).pathname.replace(/\/$/, "");
const out = process.env.FILING_OUT;
if (out)
mkdirSync(out, { recursive: true });
const { apiClient, setCloudApiFetchTransport } = await import(`${source}/src/api-client`);
const { FilingEventsPane } = await import(`${source}/src/plugins/builtin/filing-events/pane`);
const { TestPaneProvider, createTestPaneConfig, createTestTicker } = await import(`${source}/src/test-support/pane`);
const { createStatefulTestPluginRuntime } = await import(`${source}/src/test-support/plugin-runtime`);
const { createInitialState } = await import(`${source}/src/state/app/context`);
const { PaneFooterProvider, PaneFooterBar } = await import(`${source}/src/components/layout/pane/footer`);
const { testRender, settleFrame, emitKeypress } = await import(`${source}/src/renderers/opentui/test-utils`);
const { Box, UiHostProvider, useRendererHost, useUiHost, useNativeRenderer } = await import(`${source}/src/ui`);
let setup: any, footer: any, selectCompany: (symbol: string) => void;
let requests: string[] = [];
let opened: string[] = [];
const observations: any[] = [];
let frames = 0;
function event(ticker: string, id = ticker) { return { id, ticker, company: { ticker, cik: ticker === "FIRST" ? "1" : "2", name: `${ticker} issuer`, shortName: ticker }, filingDate: "2026-09-10", filedAt: "2026-09-10T20:30:00Z", docUrl: `https://www.sec.gov/Archives/${ticker}/${id}.htm`, items: ["1.01"], labels: ["Material agreement"], kinds: ["agreement"], material: true, headline: `${ticker} acquisition terms`, summary: `${ticker} paid 20 million in cash.`, people: [], read: true }; }
function Harness() { const [symbol, setSymbol] = useState("FIRST"); selectCompany = setSymbol; const config = createTestPaneConfig("/tmp/unused-filing-research", { instanceId: "filing-audit", paneId: "filing-events", binding: { kind: "fixed", symbol } }); const state = createInitialState(config); state.tickers = new Map([[symbol, createTestTicker(symbol)]]); state.focusedPaneId = "filing-audit"; const runtime = useMemo(() => createStatefulTestPluginRuntime(), []); const host = useRendererHost(); const ui = useUiHost(); const native = useNativeRenderer(); return { opened.push(url); } }}>{(value: any) => { footer = value; return ; }}; }
function transport(fn: (ticker: string) => Response | Promise) { setCloudApiFetchTransport((async (input: any) => { const url = new URL(String(input)); if (!url.pathname.startsWith("/public/events/"))
throw new Error(`Unexpected controlled route ${url.pathname}`); requests.push(url.pathname); return fn(decodeURIComponent(url.pathname.split("/").at(-1)!)); }) as typeof fetch); }
async function mount() { await act(async () => { setup = await testRender(, { width: 100, height: 24 }); }); await settleFrame(setup, 8); }
async function select(symbol: string) { await act(async () => selectCompany(symbol)); await settleFrame(setup, 6); }
function capture(name: string) { const frame = setup.captureCharFrame(); frames++; if (out) {
writeFileSync(`${out}/${name}.txt`, frame);
writeFileSync(`${out}/${name}-footer.json`, JSON.stringify(footer, null, 2));
} return frame; }
afterEach(async () => { if (setup)
await act(async () => setup.renderer.destroy()); setup = null; setCloudApiFetchTransport(null); apiClient.dispose(); requests = []; opened = []; });
afterAll(() => { if (out)
writeFileSync(`${out}/observations.json`, JSON.stringify({ source, frames, observations }, null, 2)); });
test("pending company changes hide previous issuer content and source actions", async () => {
let resolveSecond!: (response: Response) => void;
transport(ticker => ticker === "FIRST" ? Response.json({ ticker, events: [event(ticker)] }) : new Promise(resolve => resolveSecond = resolve));
await mount();
expect(capture("company-first")).toContain("FIRST acquisition terms");
await select("SECOND");
expect(capture("company-second-pending")).not.toContain("FIRST acquisition terms");
await emitKeypress(setup, { name: "o", sequence: "o" });
expect(opened).toEqual([]);
await act(async () => resolveSecond(Response.json({ ticker: "SECOND", events: [event("SECOND")] })));
await settleFrame(setup, 8);
expect(capture("company-second-loaded")).toContain("SECOND acquisition terms");
observations.push({ case: "pending-company-ownership", requests: [...requests], opened: [...opened] });
});
test("clearing the company removes its filing open shortcut", async () => {
transport(ticker => Response.json({ ticker, events: [event(ticker)] }));
await mount();
await select("");
capture("company-cleared");
await emitKeypress(setup, { name: "o", sequence: "o" });
expect(opened).toEqual([]);
observations.push({ case: "cleared-company-ownership", opened: [...opened], footer });
});
test("plain refresh retries an initial outage and loads current filings", async () => {
let recovered = false;
transport(ticker => recovered ? Response.json({ ticker, events: [event(ticker)] }) : new Response("Controlled filing outage", { status: 503 }));
await mount();
expect(capture("initial-outage")).toContain("Could not load 8-K filings");
recovered = true;
const count = requests.length;
await emitKeypress(setup, { name: "r", sequence: "r" });
await settleFrame(setup, 8);
expect(requests.length).toBe(count + 1);
expect(capture("outage-refresh")).toContain("FIRST acquisition terms");
observations.push({ case: "refresh-outage", requests: [...requests] });
});
test("same-company refresh preserves selection and source during transient failure, then recovers", async () => {
let mode = "initial";
transport(ticker => mode === "failed" ? new Response("Controlled refresh outage", { status: 503 }) : Response.json({ ticker, events: mode === "recovered" ? [event(ticker, "new"), event(ticker, "kept")] : [event(ticker, "kept")] }));
await mount();
const initialRows = setup.captureCharFrame().split("\n");
const row = initialRows.findIndex((line: string) => line.includes("FIRST acquisition terms"));
await act(async () => setup.mockMouse.click(initialRows[row].indexOf("FIRST acquisition terms") + 2, row));
await settleFrame(setup, 4);
mode = "failed";
await emitKeypress(setup, { name: "r", sequence: "r" });
await settleFrame(setup, 8);
expect(capture("refresh-retained")).toContain("FIRST acquisition terms");
expect(JSON.stringify(footer)).toContain("Controlled refresh outage");
await emitKeypress(setup, { name: "o", sequence: "o" });
expect(opened.at(-1)).toContain("/kept.htm");
mode = "recovered";
await emitKeypress(setup, { name: "r", sequence: "r" });
await settleFrame(setup, 8);
expect(capture("refresh-recovered").split("FIRST acquisition terms").length - 1).toBe(2);
expect(JSON.stringify(footer)).not.toContain("Controlled refresh outage");
await emitKeypress(setup, { name: "o", sequence: "o" });
expect(opened.at(-1)).toContain("/kept.htm");
});
test("obsolete company response cannot overwrite a newer company or restore its source action", async () => {
let pending!: (response: Response) => void;
transport(ticker => ticker === "SECOND" ? new Promise(resolve => pending = resolve) : Response.json({ ticker, events: [event(ticker)] }));
await mount();
await select("SECOND");
await select("THIRD");
await act(async () => pending(Response.json({ ticker: "SECOND", events: [event("SECOND")] })));
await settleFrame(setup, 8);
const frame = capture("company-race");
expect(frame).toContain("THIRD acquisition terms");
expect(frame).not.toContain("SECOND acquisition terms");
await emitKeypress(setup, { name: "o", sequence: "o" });
expect(opened.at(-1)).toContain("/THIRD/");
});
test("page keys move the selection a screen at a time and Enter opens it", async () => {
transport(ticker => Response.json({ ticker, events: Array.from({ length: 12 }, (_, index) => event(ticker, `f${index}`)) }));
await mount();
const openSelected = async () => { await emitKeypress(setup, { name: "return" }); return Number(/f(\d+)\.htm$/.exec(opened.at(-1) ?? "")?.[1]); };
const end = await emitKeypress(setup, { name: "end" }, { trackPropagation: true });
expect(end.defaultPrevented).toBe(true);
expect(await openSelected()).toBe(11);
await emitKeypress(setup, { name: "home" });
expect(await openSelected()).toBe(0);
await emitKeypress(setup, { name: "pagedown" });
const paged = await openSelected();
expect(paged).toBeGreaterThan(1);
await emitKeypress(setup, { name: "pageup" });
expect(await openSelected()).toBe(0);
// With nothing further to select, the key is left to scroll the feed.
const top = await emitKeypress(setup, { name: "k" }, { trackPropagation: true });
expect(top.defaultPrevented).toBe(false);
});