Spaces:
Build error
Build error
import { describe, it, expect, vi, beforeEach } from "vitest"; | |
import { render, waitFor } from "@testing-library/react"; | |
import React from "react"; | |
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; | |
import { | |
updateStatusWhenErrorMessagePresent, | |
WsClientProvider, | |
useWsClient, | |
} from "#/context/ws-client-provider"; | |
describe("Propagate error message", () => { | |
it("should do nothing when no message was passed from server", () => { | |
updateStatusWhenErrorMessagePresent(null); | |
updateStatusWhenErrorMessagePresent(undefined); | |
updateStatusWhenErrorMessagePresent({}); | |
updateStatusWhenErrorMessagePresent({ message: null }); | |
}); | |
it.todo("should display error to user when present"); | |
it.todo("should display error including translation id when present"); | |
}); | |
// Create a mock for socket.io-client | |
const mockEmit = vi.fn(); | |
const mockOn = vi.fn(); | |
const mockOff = vi.fn(); | |
const mockDisconnect = vi.fn(); | |
vi.mock("socket.io-client", () => ({ | |
io: vi.fn(() => ({ | |
emit: mockEmit, | |
on: mockOn, | |
off: mockOff, | |
disconnect: mockDisconnect, | |
io: { | |
opts: { | |
query: {}, | |
}, | |
}, | |
})), | |
})); | |
// Mock component to test the hook | |
function TestComponent() { | |
const { send } = useWsClient(); | |
React.useEffect(() => { | |
// Send a test event | |
send({ type: "test_event" }); | |
}, [send]); | |
return <div>Test Component</div>; | |
} | |
describe("WsClientProvider", () => { | |
beforeEach(() => { | |
vi.clearAllMocks(); | |
vi.mock("#/hooks/query/use-active-conversation", () => ({ | |
useActiveConversation: () => { | |
return { data: { | |
conversation_id: "1", | |
title: "Conversation 1", | |
selected_repository: null, | |
last_updated_at: "2021-10-01T12:00:00Z", | |
created_at: "2021-10-01T12:00:00Z", | |
status: "RUNNING" as const, | |
url: null, | |
session_api_key: null, | |
}}}, | |
})); | |
}); | |
it("should emit oh_user_action event when send is called", async () => { | |
const { getByText } = render(<TestComponent />, { | |
wrapper: ({ children }) => ( | |
<QueryClientProvider client={new QueryClient()}> | |
<WsClientProvider conversationId="test-conversation-id"> | |
{children} | |
</WsClientProvider> | |
</QueryClientProvider> | |
), | |
}); | |
// Assert | |
expect(getByText("Test Component")).toBeInTheDocument(); | |
// Wait for the emit call to happen (useEffect needs time to run) | |
await waitFor( | |
() => { | |
expect(mockEmit).toHaveBeenCalledWith("oh_user_action", { | |
type: "test_event", | |
}); | |
}, | |
{ timeout: 1000 }, | |
); | |
}); | |
}); | |