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();
});
});