import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { render, screen, act, waitFor } from "@testing-library/react"; import React from "react"; import { CopilotKitProvider } from "../CopilotKitProvider"; /** * These tests verify that the license banner is driven by the server-reported * licenseStatus field in the /info response — not by client-side token verification. */ function mockFetchWithLicenseStatus(licenseStatus?: string) { return vi.fn().mockResolvedValue({ ok: true, status: 200, json: async () => ({ version: "1.0.0", agents: {}, audioFileTranscriptionEnabled: false, mode: "intelligence", licenseStatus, }), }); } let originalFetch: typeof globalThis.fetch; beforeEach(() => { originalFetch = globalThis.fetch; }); afterEach(() => { globalThis.fetch = originalFetch; }); describe("CopilotKitProvider license (server-driven)", () => { it("shows no_license banner when server reports 'none'", async () => { globalThis.fetch = mockFetchWithLicenseStatus("none") as any; render(
child
, ); await waitFor(() => { expect(screen.getByText(/Powered by CopilotKit/)).toBeTruthy(); }); }); it("shows expired banner when server reports 'expired'", async () => { globalThis.fetch = mockFetchWithLicenseStatus("expired") as any; render(
child
, ); await waitFor(() => { expect(screen.getByText(/expired/i)).toBeTruthy(); }); }); it("shows invalid banner when server reports 'invalid'", async () => { globalThis.fetch = mockFetchWithLicenseStatus("invalid") as any; render(
child
, ); await waitFor(() => { expect( screen.getByText(/Invalid CopilotKit license token/i), ).toBeTruthy(); }); }); it("shows no banner when server reports 'valid'", async () => { globalThis.fetch = mockFetchWithLicenseStatus("valid") as any; render(
child
, ); // Wait for runtime connection to complete await waitFor(() => { expect(screen.queryByText(/Powered by CopilotKit/)).toBeNull(); expect(screen.queryByText(/expired/i)).toBeNull(); expect(screen.queryByText(/Invalid/i)).toBeNull(); }); }); it("shows no banner when licenseStatus is absent (non-intelligence mode)", async () => { globalThis.fetch = mockFetchWithLicenseStatus(undefined) as any; render(
child
, ); await waitFor(() => { expect(screen.queryByText(/Powered by CopilotKit/)).toBeNull(); expect(screen.queryByText(/expired/i)).toBeNull(); }); }); });