// ABOUTME: Unit tests for NutritionPanel component. // ABOUTME: Tests display of seeds, carb range, and keto guidance. import { render, screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; import type { NutritionGuidance } from "@/types"; import { NutritionPanel } from "./nutrition-panel"; describe("NutritionPanel", () => { const baseNutrition: NutritionGuidance = { seeds: "Flax & Pumpkin", carbRange: "100-150g", ketoGuidance: "Moderate carbs today", }; describe("rendering", () => { it("renders the NUTRITION TODAY heading", () => { render(); expect(screen.getByText("NUTRITION TODAY")).toBeInTheDocument(); }); it("renders seeds guidance with emoji", () => { render(); expect(screen.getByText(/🌱 Flax & Pumpkin/)).toBeInTheDocument(); }); it("renders carb range with emoji", () => { render(); expect(screen.getByText(/🍽️ Carbs: 100-150g/)).toBeInTheDocument(); }); it("renders keto guidance with emoji", () => { render(); expect( screen.getByText(/🥑 Keto: Moderate carbs today/), ).toBeInTheDocument(); }); }); describe("seed cycling phases", () => { it("displays follicular phase seeds (flax & pumpkin)", () => { const nutrition: NutritionGuidance = { ...baseNutrition, seeds: "Flax & Pumpkin", }; render(); expect(screen.getByText(/🌱 Flax & Pumpkin/)).toBeInTheDocument(); }); it("displays luteal phase seeds (sunflower & sesame)", () => { const nutrition: NutritionGuidance = { ...baseNutrition, seeds: "Sunflower & Sesame", }; render(); expect(screen.getByText(/🌱 Sunflower & Sesame/)).toBeInTheDocument(); }); }); describe("carb range variations", () => { it("displays low carb range", () => { const nutrition: NutritionGuidance = { ...baseNutrition, carbRange: "50-75g", }; render(); expect(screen.getByText(/🍽️ Carbs: 50-75g/)).toBeInTheDocument(); }); it("displays high carb range", () => { const nutrition: NutritionGuidance = { ...baseNutrition, carbRange: "150-200g", }; render(); expect(screen.getByText(/🍽️ Carbs: 150-200g/)).toBeInTheDocument(); }); }); describe("keto guidance variations", () => { it("displays keto-friendly guidance", () => { const nutrition: NutritionGuidance = { ...baseNutrition, ketoGuidance: "Good day for keto", }; render(); expect( screen.getByText(/🥑 Keto: Good day for keto/), ).toBeInTheDocument(); }); it("displays carb-loading guidance", () => { const nutrition: NutritionGuidance = { ...baseNutrition, ketoGuidance: "Consider carb loading", }; render(); expect( screen.getByText(/🥑 Keto: Consider carb loading/), ).toBeInTheDocument(); }); }); describe("styling", () => { it("renders within a bordered container", () => { const { container } = render( , ); const panel = container.firstChild as HTMLElement; expect(panel).toHaveClass("rounded-lg", "border", "p-4"); }); it("renders heading with semibold font", () => { render(); const heading = screen.getByText("NUTRITION TODAY"); expect(heading).toHaveClass("font-semibold"); }); }); });