openclaw/ui/src/ui/app-lifecycle.node.test.ts

45 lines
1.4 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { handleDisconnected } from "./app-lifecycle.ts";
function createHost() {
return {
basePath: "",
client: { stop: vi.fn() },
connected: true,
tab: "chat",
assistantName: "OpenClaw",
assistantAvatar: null,
assistantAgentId: null,
chatHasAutoScrolled: false,
chatManualRefreshInFlight: false,
chatLoading: false,
chatMessages: [],
chatToolMessages: [],
chatStream: null,
logsAutoFollow: false,
logsAtBottom: true,
logsEntries: [],
popStateHandler: vi.fn(),
topbarObserver: { disconnect: vi.fn() } as unknown as ResizeObserver,
};
}
describe("handleDisconnected", () => {
it("stops and clears gateway client on teardown", () => {
const removeSpy = vi.spyOn(window, "removeEventListener").mockImplementation(() => undefined);
const host = createHost();
const disconnectSpy = (
host.topbarObserver as unknown as { disconnect: ReturnType<typeof vi.fn> }
).disconnect;
handleDisconnected(host as unknown as Parameters<typeof handleDisconnected>[0]);
expect(removeSpy).toHaveBeenCalledWith("popstate", host.popStateHandler);
expect(host.client).toBeNull();
expect(host.connected).toBe(false);
expect(disconnectSpy).toHaveBeenCalledTimes(1);
expect(host.topbarObserver).toBeNull();
removeSpy.mockRestore();
});
});