Spaces:
Build error
Build error
| import { QueryClientProvider, QueryClient } from "@tanstack/react-query"; | |
| import { render, screen } from "@testing-library/react"; | |
| import { Provider } from "react-redux"; | |
| import { createRoutesStub } from "react-router"; | |
| import { setupStore } from "test-utils"; | |
| import { describe, expect, it, vi } from "vitest"; | |
| import userEvent from "@testing-library/user-event"; | |
| import { HomeHeader } from "#/components/features/home/home-header"; | |
| import OpenHands from "#/api/open-hands"; | |
| // Mock the translation function | |
| vi.mock("react-i18next", async () => { | |
| const actual = await vi.importActual("react-i18next"); | |
| return { | |
| ...actual, | |
| useTranslation: () => ({ | |
| t: (key: string) => { | |
| // Return a mock translation for the test | |
| const translations: Record<string, string> = { | |
| "HOME$LETS_START_BUILDING": "Let's start building", | |
| "HOME$LAUNCH_FROM_SCRATCH": "Launch from Scratch", | |
| "HOME$LOADING": "Loading...", | |
| "HOME$OPENHANDS_DESCRIPTION": "OpenHands is an AI software engineer", | |
| "HOME$NOT_SURE_HOW_TO_START": "Not sure how to start?", | |
| "HOME$READ_THIS": "Read this" | |
| }; | |
| return translations[key] || key; | |
| }, | |
| i18n: { language: "en" }, | |
| }), | |
| }; | |
| }); | |
| const renderHomeHeader = () => { | |
| const RouterStub = createRoutesStub([ | |
| { | |
| Component: HomeHeader, | |
| path: "/", | |
| }, | |
| { | |
| Component: () => <div data-testid="conversation-screen" />, | |
| path: "/conversations/:conversationId", | |
| }, | |
| ]); | |
| return render(<RouterStub />, { | |
| wrapper: ({ children }) => ( | |
| <Provider store={setupStore()}> | |
| <QueryClientProvider client={new QueryClient()}> | |
| {children} | |
| </QueryClientProvider> | |
| </Provider> | |
| ), | |
| }); | |
| }; | |
| describe("HomeHeader", () => { | |
| it("should create an empty conversation and redirect when pressing the launch from scratch button", async () => { | |
| const createConversationSpy = vi.spyOn(OpenHands, "createConversation"); | |
| renderHomeHeader(); | |
| const launchButton = screen.getByRole("button", { | |
| name: /Launch from Scratch/i, | |
| }); | |
| await userEvent.click(launchButton); | |
| expect(createConversationSpy).toHaveBeenCalledExactlyOnceWith( | |
| undefined, | |
| undefined, | |
| undefined, | |
| [], | |
| undefined, | |
| undefined, | |
| undefined, | |
| ); | |
| // expect to be redirected to /conversations/:conversationId | |
| await screen.findByTestId("conversation-screen"); | |
| }); | |
| it("should change the launch button text to 'Loading...' when creating a conversation", async () => { | |
| renderHomeHeader(); | |
| const launchButton = screen.getByRole("button", { | |
| name: /Launch from Scratch/i, | |
| }); | |
| await userEvent.click(launchButton); | |
| expect(launchButton).toHaveTextContent(/Loading.../i); | |
| expect(launchButton).toBeDisabled(); | |
| }); | |
| }); | |