import { describe, it, expect, vi } from "vitest"; import * as React from "react"; import { render, screen, fireEvent } from "../../tests/test-utils"; import { TitleControls } from "./TitleControls"; import type { Title } from "../../types"; // Mock data import titles from '../../mocks/data/titles.json'; const mockItem: Title = titles[0] as Title; const mockShowItem: Title = titles.find((item) => item.objectType === "show") as Title; // Mock onTitleSelectionChange function const mockOnTitleSelectionChange = vi.fn(); describe("TitleControls Component", () => { it("renders season and episode selectors for a TV show", async () => { render( ); const seasonSelector = screen.getByLabelText("Season"); const episodeSelector = screen.getByLabelText("Episode"); expect(seasonSelector).toBeInTheDocument(); expect(episodeSelector).toBeInTheDocument(); }); it("does not render season and episode selectors for a movie", async () => { render( ); const seasonSelector = screen.queryByLabelText("Season"); const episodeSelector = screen.queryByLabelText("Episode"); expect(seasonSelector).not.toBeInTheDocument(); expect(episodeSelector).not.toBeInTheDocument(); }); it("calls onTitleSelectionChange when a season is selected", async () => { render( ); const seasonSelector = screen.getByLabelText("Season"); fireEvent.change(seasonSelector, { target: { value: "2" } }); expect(mockOnTitleSelectionChange).toHaveBeenCalledWith({ id: mockShowItem.justwatchId, objectType: "show", meta: mockShowItem, seasonNumber: 2, episodeNumber: 1, }); }); it("calls onTitleSelectionChange when an episode is selected", async () => { render( ); const episodeSelector = screen.getByLabelText("Episode"); fireEvent.change(episodeSelector, { target: { value: "5" } }); expect(mockOnTitleSelectionChange).toHaveBeenCalledWith({ id: mockShowItem.justwatchId, objectType: "show", meta: mockShowItem, seasonNumber: 1, episodeNumber: 5, }); }); it("renders help text when no title is selected", async () => { render( ); const helpText = screen.getByText("Search for a title or id (imdb, justwatch, tmdb)"); expect(helpText).toBeInTheDocument(); }); it("renders help text when a title is selected", async () => { render( ); const helpText = screen.getByText(mockItem.title); expect(helpText).toBeInTheDocument(); }); });