72 lines · 1.8 KB · TypeScript
RawDownload
import { describe, expect, it } from "vitest"; import type { TerminalEvent, TerminalSessionSnapshot } from "@t3tools/contracts";import { terminalRunningSubprocessFromEvent } from "./terminalActivity"; const snapshot: TerminalSessionSnapshot = {  threadId: "thread-1",  terminalId: "default",  cwd: "/tmp",  worktreePath: null,  status: "running",  pid: 1234,  history: "",  exitCode: null,  exitSignal: null,  updatedAt: "2026-01-01T00:00:00.000Z",}; function eventBase() {  return {    threadId: "thread-1",    terminalId: "default",    createdAt: "2026-01-01T00:00:00.000Z",  };} describe("terminalRunningSubprocessFromEvent", () => {  it("returns the subprocess flag for terminal activity events", () => {    const active = terminalRunningSubprocessFromEvent({      ...eventBase(),      type: "activity",      hasRunningSubprocess: true,    });    const idle = terminalRunningSubprocessFromEvent({      ...eventBase(),      type: "activity",      hasRunningSubprocess: false,    });     expect(active).toBe(true);    expect(idle).toBe(false);  });   it("clears running state when a terminal session starts/restarts/exits", () => {    const events: TerminalEvent[] = [      { ...eventBase(), type: "started", snapshot },      { ...eventBase(), type: "restarted", snapshot },      { ...eventBase(), type: "exited", exitCode: 0, exitSignal: null },    ];     for (const event of events) {      expect(terminalRunningSubprocessFromEvent(event)).toBe(false);    }  });   it("ignores non-activity terminal events", () => {    expect(      terminalRunningSubprocessFromEvent({        ...eventBase(),        type: "output",        data: "hello",      }),    ).toBeNull();    expect(      terminalRunningSubprocessFromEvent({        ...eventBase(),        type: "error",        message: "oops",      }),    ).toBeNull();  });});