import React from "react"; import { render } from "@testing-library/react"; import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { CopilotKitProvider } from "../CopilotKitProvider"; import { CopilotKitCoreErrorCode } from "@copilotkit/core"; describe("CopilotKitProvider onError", () => { const originalFetch = global.fetch; const originalWindow = (globalThis as { window?: unknown }).window; beforeEach(() => { (globalThis as { window?: unknown }).window = {}; }); afterEach(() => { vi.restoreAllMocks(); global.fetch = originalFetch; if (originalWindow === undefined) { delete (globalThis as { window?: unknown }).window; } else { (globalThis as { window?: unknown }).window = originalWindow; } }); it("onError fires when runtime info fetch fails (no publicApiKey required)", async () => { global.fetch = vi.fn().mockRejectedValue(new Error("network failure")); const onError = vi.fn(); render(
child
, ); // Wait for the async /info fetch to fail and onError to fire await vi.waitFor(() => { expect(onError).toHaveBeenCalled(); }); const event = onError.mock.calls[0][0]; expect(event.code).toBe(CopilotKitCoreErrorCode.RUNTIME_INFO_FETCH_FAILED); expect(event.error).toBeInstanceOf(Error); expect(event.error.message).toContain("network failure"); }); it("onError fires without publicApiKey", async () => { global.fetch = vi.fn().mockRejectedValue(new Error("network failure")); const onError = vi.fn(); // No publicApiKey — onError should still fire (unlike v1) render(
child
, ); await vi.waitFor(() => { expect(onError).toHaveBeenCalled(); }); }); });