import { describe, it, expect, vi } from "vitest"; import { fireEvent, render, screen } from "@testing-library/react"; import { useState } from "react"; import { UpdateAvailableBanner } from "../UpdateAvailableBanner"; describe("UpdateAvailableBanner", () => { it("renders version information with release notes and learn more links", () => { render( , ); expect(screen.getByText(/Update available: v0.7.0 \(current: v0.6.0\)/)).toBeInTheDocument(); expect(screen.getByText("npm i -g @runfusion/fusion")).toBeInTheDocument(); expect(screen.getByRole("link", { name: "Release notes" })).toHaveAttribute( "href", "https://github.com/Runfusion/Fusion/blob/main/CHANGELOG.md", ); expect(screen.getByRole("link", { name: "Learn more" })).toHaveAttribute("href", "https://runfusion.ai"); }); it("dismiss button calls onDismiss", () => { const onDismiss = vi.fn(); render( , ); fireEvent.click(screen.getByRole("button", { name: "Dismiss update notice" })); expect(onDismiss).toHaveBeenCalledTimes(1); }); it("can be hidden by parent on dismiss", () => { function Harness() { const [visible, setVisible] = useState(true); if (!visible) return null; return ( setVisible(false)} /> ); } render(); expect(screen.getByRole("status")).toBeInTheDocument(); fireEvent.click(screen.getByRole("button", { name: "Dismiss update notice" })); expect(screen.queryByRole("status")).toBeNull(); }); });