import { render, screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; import { InstanceCard } from "./InstanceCard"; import type { Instance, License } from "@/lib/api"; const base: Instance = { instance_id: "6a0fe3f0-49d2-4aa1-967c-a3094b200b5d", account_id: "a1", name: "Acme Production", slug: "acme", deployment: "cloud", tier: "professional", status: "active", current_license: "l1", relink_count: 0, created_at: "2026-01-01T00:00:00Z", }; function licence(daysFromNow: number): License { return { license_id: "l1", instance_id: base.instance_id, account_id: "a1", tier: "professional", deployment: "cloud", limits: { max_servers: -1, max_secret_groups: -1, max_channels: -1 }, features: ["console", "oidc"], issued_at: "2026-01-01T00:00:00Z", expires_at: new Date(Date.now() + daysFromNow * 86_400_000).toISOString(), issued_by: "staff@example.com", reason: "new", }; } describe("InstanceCard", () => { it("shows a valid licence with days remaining", () => { render(); expect(screen.getByText("Valid")).toBeInTheDocument(); expect(screen.getByText(/367 days remaining/)).toBeInTheDocument(); }); it("warns inside fourteen days", () => { render(); expect(screen.getByText("Expiring")).toBeInTheDocument(); expect(screen.getByText(/9 days remaining/)).toBeInTheDocument(); }); it("names what still works when expired", () => { render(); expect(screen.getByText("Expired")).toBeInTheDocument(); // The reassurance is the point: this is the first thing a worried // customer needs, and the backend really does keep these running. expect(screen.getByText(/servers and monitors are still running/i)).toBeInTheDocument(); expect(screen.getByText(/changes are disabled/i)).toBeInTheDocument(); }); it("prompts to link when paid but never linked", () => { render( , ); expect(screen.getByText("Awaiting link")).toBeInTheDocument(); expect(screen.getByText(/not attached to an install yet/i)).toBeInTheDocument(); expect(screen.getByRole("link", { name: /link an install/i })).toBeInTheDocument(); }); it("links to the instance's own subdomain for cloud", () => { render(); expect(screen.getByRole("link", { name: /open/i })).toBeInTheDocument(); }); });