// npx jest src/components/chat/__tests__/TaskHeader.test.tsx import React from "react" import { render, screen } from "@testing-library/react" import TaskHeader from "../TaskHeader" import { ApiConfiguration } from "@roo/shared/api" // Mock the vscode API jest.mock("@/utils/vscode", () => ({ vscode: { postMessage: jest.fn(), }, })) // Mock the VSCodeBadge component jest.mock("@vscode/webview-ui-toolkit/react", () => ({ VSCodeBadge: ({ children }: { children: React.ReactNode }) =>
{children}
, })) // Mock the ExtensionStateContext jest.mock("@src/context/ExtensionStateContext", () => ({ useExtensionState: () => ({ apiConfiguration: { apiProvider: "anthropic", apiKey: "test-api-key", // Add relevant fields apiModelId: "claude-3-opus-20240229", // Add relevant fields } as ApiConfiguration, // Optional: Add type assertion if ApiConfiguration is imported currentTaskItem: null, }), })) describe("TaskHeader", () => { const defaultProps = { task: { text: "Test task", images: [] }, tokensIn: 100, tokensOut: 50, doesModelSupportPromptCache: true, totalCost: 0.05, contextTokens: 200, onClose: jest.fn(), } it("should display cost when totalCost is greater than 0", () => { render( , ) expect(screen.getByText("$0.05")).toBeInTheDocument() }) it("should not display cost when totalCost is 0", () => { render( , ) expect(screen.queryByText("$0.0000")).not.toBeInTheDocument() }) it("should not display cost when totalCost is null", () => { render( , ) expect(screen.queryByText(/\$/)).not.toBeInTheDocument() }) it("should not display cost when totalCost is undefined", () => { render( , ) expect(screen.queryByText(/\$/)).not.toBeInTheDocument() }) it("should not display cost when totalCost is NaN", () => { render( , ) expect(screen.queryByText(/\$/)).not.toBeInTheDocument() }) })