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