brackt/app/components/__tests__/RecentPicksFeed.test.tsx
Chris Parsons c18deb1455 Mobile draft room improvements: watchlist, collapsible picks feed, autodraft controls
- Add watchlist feature: eye icon per participant, "Watched Only" filter, DB
  table + migration, toggle API route, socket sync on reconnect
- Make RecentPicksFeed collapsible on mobile participants tab (chevron toggle,
  defaults expanded)
- Add AutodraftSettings to mobile controls tab (was desktop-only)
- Pin Pause/Resume Draft and Exit Draft Room buttons to the bottom of the
  mobile controls tab

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 11:40:06 -07:00

66 lines
2.7 KiB
TypeScript

import { describe, it, expect } from "vitest";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { RecentPicksFeed } from "~/components/draft/RecentPicksFeed";
const makePick = (n: number) => ({
id: String(n),
pickNumber: n,
participant: { name: `Participant ${n}` },
sport: { name: "NFL" },
team: { name: `Team ${n}` },
});
describe("RecentPicksFeed", () => {
it("renders the Latest Picks header", () => {
render(<RecentPicksFeed picks={[]} />);
expect(screen.getByText("Latest Picks")).toBeInTheDocument();
});
it("shows picks by default (expanded)", () => {
render(<RecentPicksFeed picks={[makePick(1), makePick(2)]} />);
expect(screen.getByText("Participant 1")).toBeInTheDocument();
expect(screen.getByText("Participant 2")).toBeInTheDocument();
});
it("shows empty message when no picks and expanded", () => {
render(<RecentPicksFeed picks={[]} />);
expect(screen.getByText("No picks yet")).toBeInTheDocument();
});
it("collapses picks when header button is clicked", async () => {
const user = userEvent.setup();
render(<RecentPicksFeed picks={[makePick(1), makePick(2)]} />);
await user.click(screen.getByRole("button", { name: "Toggle latest picks" }));
expect(screen.queryByText("Participant 1")).not.toBeInTheDocument();
expect(screen.queryByText("Participant 2")).not.toBeInTheDocument();
});
it("re-expands when header button is clicked again", async () => {
const user = userEvent.setup();
render(<RecentPicksFeed picks={[makePick(1)]} />);
const btn = screen.getByRole("button", { name: "Toggle latest picks" });
await user.click(btn);
await user.click(btn);
expect(screen.getByText("Participant 1")).toBeInTheDocument();
});
it("limits display to the 3 most recent picks", () => {
const picks = [makePick(1), makePick(2), makePick(3), makePick(4), makePick(5)];
render(<RecentPicksFeed picks={picks} />);
expect(screen.queryByText("Participant 1")).not.toBeInTheDocument();
expect(screen.queryByText("Participant 2")).not.toBeInTheDocument();
expect(screen.getByText("Participant 3")).toBeInTheDocument();
expect(screen.getByText("Participant 4")).toBeInTheDocument();
expect(screen.getByText("Participant 5")).toBeInTheDocument();
});
it("sets aria-expanded correctly", async () => {
const user = userEvent.setup();
render(<RecentPicksFeed picks={[makePick(1)]} />);
const btn = screen.getByRole("button", { name: "Toggle latest picks" });
expect(btn).toHaveAttribute("aria-expanded", "true");
await user.click(btn);
expect(btn).toHaveAttribute("aria-expanded", "false");
});
});