Spaces:
Build error
Build error
import { beforeAll, describe, expect, it, vi } from "vitest"; | |
import { afterEach } from "node:test"; | |
import { useTerminal } from "#/hooks/use-terminal"; | |
import { Command } from "#/state/command-slice"; | |
import { AgentState } from "#/types/agent-state"; | |
import { renderWithProviders } from "../../test-utils"; | |
// Mock the WsClient context | |
vi.mock("#/context/ws-client-provider", () => ({ | |
useWsClient: () => ({ | |
send: vi.fn(), | |
status: "CONNECTED", | |
isLoadingMessages: false, | |
events: [], | |
}), | |
})); | |
interface TestTerminalComponentProps { | |
commands: Command[]; | |
} | |
function TestTerminalComponent({ | |
commands, | |
}: TestTerminalComponentProps) { | |
const ref = useTerminal({ commands }); | |
return <div ref={ref} />; | |
} | |
describe("useTerminal", () => { | |
const mockTerminal = vi.hoisted(() => ({ | |
loadAddon: vi.fn(), | |
open: vi.fn(), | |
write: vi.fn(), | |
writeln: vi.fn(), | |
onKey: vi.fn(), | |
attachCustomKeyEventHandler: vi.fn(), | |
dispose: vi.fn(), | |
})); | |
beforeAll(() => { | |
// mock ResizeObserver | |
window.ResizeObserver = vi.fn().mockImplementation(() => ({ | |
observe: vi.fn(), | |
unobserve: vi.fn(), | |
disconnect: vi.fn(), | |
})); | |
// mock Terminal | |
vi.mock("@xterm/xterm", async (importOriginal) => ({ | |
...(await importOriginal<typeof import("@xterm/xterm")>()), | |
Terminal: vi.fn().mockImplementation(() => mockTerminal), | |
})); | |
}); | |
afterEach(() => { | |
vi.clearAllMocks(); | |
}); | |
it("should render", () => { | |
renderWithProviders(<TestTerminalComponent commands={[]} />, { | |
preloadedState: { | |
agent: { curAgentState: AgentState.RUNNING }, | |
cmd: { commands: [] }, | |
}, | |
}); | |
}); | |
it("should render the commands in the terminal", () => { | |
const commands: Command[] = [ | |
{ content: "echo hello", type: "input" }, | |
{ content: "hello", type: "output" }, | |
]; | |
renderWithProviders(<TestTerminalComponent commands={commands} />, { | |
preloadedState: { | |
agent: { curAgentState: AgentState.RUNNING }, | |
cmd: { commands }, | |
}, | |
}); | |
expect(mockTerminal.writeln).toHaveBeenNthCalledWith(1, "echo hello"); | |
expect(mockTerminal.writeln).toHaveBeenNthCalledWith(2, "hello"); | |
}); | |
// This test is no longer relevant as secrets filtering has been removed | |
it.skip("should hide secrets in the terminal", () => { | |
const secret = "super_secret_github_token"; | |
const anotherSecret = "super_secret_another_token"; | |
const commands: Command[] = [ | |
{ | |
content: `export GITHUB_TOKEN=${secret},${anotherSecret},${secret}`, | |
type: "input", | |
}, | |
{ content: secret, type: "output" }, | |
]; | |
renderWithProviders( | |
<TestTerminalComponent | |
commands={commands} | |
/>, | |
{ | |
preloadedState: { | |
agent: { curAgentState: AgentState.RUNNING }, | |
cmd: { commands }, | |
}, | |
}, | |
); | |
// This test is no longer relevant as secrets filtering has been removed | |
}); | |
}); | |