// 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()
})
})