Spaces:
Build error
Build error
| import { describe, it, expect, vi } from "vitest"; | |
| import { render, screen } from "@testing-library/react"; | |
| import userEvent from "@testing-library/user-event"; | |
| import { ModelSelector } from "#/components/shared/modals/settings/model-selector"; | |
| // Mock react-i18next | |
| vi.mock("react-i18next", () => ({ | |
| useTranslation: () => ({ | |
| t: (key: string) => { | |
| const translations: { [key: string]: string } = { | |
| LLM$PROVIDER: "LLM Provider", | |
| LLM$MODEL: "LLM Model", | |
| LLM$SELECT_PROVIDER_PLACEHOLDER: "Select a provider", | |
| LLM$SELECT_MODEL_PLACEHOLDER: "Select a model", | |
| }; | |
| return translations[key] || key; | |
| }, | |
| }), | |
| })); | |
| describe("ModelSelector", () => { | |
| const models = { | |
| openai: { | |
| separator: "/", | |
| models: ["gpt-4o", "gpt-4o-mini"], | |
| }, | |
| azure: { | |
| separator: "/", | |
| models: ["ada", "gpt-35-turbo"], | |
| }, | |
| vertex_ai: { | |
| separator: "/", | |
| models: ["chat-bison", "chat-bison-32k"], | |
| }, | |
| cohere: { | |
| separator: ".", | |
| models: ["command-r-v1:0"], | |
| }, | |
| }; | |
| it("should display the provider selector", async () => { | |
| const user = userEvent.setup(); | |
| render(<ModelSelector models={models} />); | |
| const selector = screen.getByLabelText("LLM Provider"); | |
| expect(selector).toBeInTheDocument(); | |
| await user.click(selector); | |
| expect(screen.getByText("OpenAI")).toBeInTheDocument(); | |
| expect(screen.getByText("Azure")).toBeInTheDocument(); | |
| expect(screen.getByText("VertexAI")).toBeInTheDocument(); | |
| expect(screen.getByText("cohere")).toBeInTheDocument(); | |
| }); | |
| it("should disable the model selector if the provider is not selected", async () => { | |
| const user = userEvent.setup(); | |
| render(<ModelSelector models={models} />); | |
| const modelSelector = screen.getByLabelText("LLM Model"); | |
| expect(modelSelector).toBeDisabled(); | |
| const providerSelector = screen.getByLabelText("LLM Provider"); | |
| await user.click(providerSelector); | |
| const vertexAI = screen.getByText("VertexAI"); | |
| await user.click(vertexAI); | |
| expect(modelSelector).not.toBeDisabled(); | |
| }); | |
| it("should display the model selector", async () => { | |
| const user = userEvent.setup(); | |
| render(<ModelSelector models={models} />); | |
| const providerSelector = screen.getByLabelText("LLM Provider"); | |
| await user.click(providerSelector); | |
| const azureProvider = screen.getByText("Azure"); | |
| await user.click(azureProvider); | |
| const modelSelector = screen.getByLabelText("LLM Model"); | |
| await user.click(modelSelector); | |
| expect(screen.getByText("ada")).toBeInTheDocument(); | |
| expect(screen.getByText("gpt-35-turbo")).toBeInTheDocument(); | |
| await user.click(providerSelector); | |
| const vertexProvider = screen.getByText("VertexAI"); | |
| await user.click(vertexProvider); | |
| await user.click(modelSelector); | |
| // Test fails when expecting these values to be present. | |
| // My hypothesis is that it has something to do with NextUI's | |
| // list virtualization | |
| // expect(screen.getByText("chat-bison")).toBeInTheDocument(); | |
| // expect(screen.getByText("chat-bison-32k")).toBeInTheDocument(); | |
| }); | |
| it("should call onModelChange when the model is changed", async () => { | |
| const user = userEvent.setup(); | |
| render(<ModelSelector models={models} />); | |
| const providerSelector = screen.getByLabelText("LLM Provider"); | |
| const modelSelector = screen.getByLabelText("LLM Model"); | |
| await user.click(providerSelector); | |
| await user.click(screen.getByText("Azure")); | |
| await user.click(modelSelector); | |
| await user.click(screen.getByText("ada")); | |
| await user.click(modelSelector); | |
| await user.click(screen.getByText("gpt-35-turbo")); | |
| await user.click(providerSelector); | |
| await user.click(screen.getByText("cohere")); | |
| await user.click(modelSelector); | |
| // Test fails when expecting this values to be present. | |
| // My hypothesis is that it has something to do with NextUI's | |
| // list virtualization | |
| // await user.click(screen.getByText("command-r-v1:0")); | |
| }); | |
| it("should have a default value if passed", async () => { | |
| render(<ModelSelector models={models} currentModel="azure/ada" />); | |
| expect(screen.getByLabelText("LLM Provider")).toHaveValue("Azure"); | |
| expect(screen.getByLabelText("LLM Model")).toHaveValue("ada"); | |
| }); | |
| }); | |