import { describe, it, expect, vi } from 'vitest'; import * as React from "react"; import { render, screen, fireEvent } from "../../tests/test-utils"; import userEvent from "@testing-library/user-event"; import { TitleSelect } from "./TitleSelect"; import type { Title } from "../../types"; // Mock data import titles from '../../mocks/data/titles.json'; const mockItem: Title = titles[0] as Title; // Mock onTitleSelect function const mockOnTitleSelect = vi.fn(); describe("TitleSelect Component", () => { it("renders the filter dropdown with the correct options", async () => { render( ); const filterDropdown = screen.getByRole("combobox"); const options = screen.getAllByRole("option"); expect(filterDropdown).toBeInTheDocument(); expect(options).toHaveLength(3); expect(options[0]).toHaveTextContent("MOVIE"); expect(options[1]).toHaveTextContent("SHOW"); expect(options[2]).toHaveTextContent("ALL"); }); it("updates the active filter when a new option is selected", async () => { render( ); const filterDropdown = screen.getByRole("combobox"); fireEvent.change(filterDropdown, { target: { value: "movie" } }); // Check if the active filter is updated expect(filterDropdown).toHaveValue("movie"); }); it( "calls onTitleSelect when a title is selected", async () => { render(); const query = mockItem.title; const input = screen.getByRole("textbox"); userEvent.type(input, query); const listbox = await screen.findByRole("list"); expect(listbox).toBeInTheDocument(); const suggestion = await screen.findByText(query, { selector: "mark" }, { timeout: 3000 }); expect(suggestion).toBeInTheDocument(); await userEvent.click(suggestion); expect(mockOnTitleSelect).toHaveBeenCalledWith(mockItem); }, 5000 ); it("renders the help text when provided", async () => { const helpText = "Search for a title"; render( {helpText}} /> ); const helpElement = screen.getByText(helpText); expect(helpElement).toBeInTheDocument(); }); it("initializes with the selectedTitle if provided", async () => { render( ); // Check if the input field is pre-filled with the selected title const input = screen.getByRole("textbox"); expect(input).toHaveValue(mockItem.title); }); });