import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; const mocks = vi.hoisted(() => ({ getProviderConnectionById: vi.fn(), getApiKeys: vi.fn(), getConsistentMachineId: vi.fn(), })); vi.mock("@/lib/localDb", () => ({ getProviderConnectionById: mocks.getProviderConnectionById, getApiKeys: mocks.getApiKeys, })); vi.mock("@/shared/utils/machineId", () => ({ getConsistentMachineId: mocks.getConsistentMachineId, })); vi.mock("next/server", () => ({ NextResponse: { json(body, init = {}) { return new Response(JSON.stringify(body), { status: init.status || 200, headers: { "Content-Type": "application/json" }, }); }, }, })); const originalFetch = global.fetch; describe("provider test-models route kind routing", () => { beforeEach(() => { vi.clearAllMocks(); mocks.getProviderConnectionById.mockResolvedValue({ id: "conn-hf", provider: "huggingface", }); mocks.getApiKeys.mockResolvedValue([{ key: "sk-internal", isActive: true }]); mocks.getConsistentMachineId.mockResolvedValue("cli-token"); global.fetch = vi.fn((url) => { if (String(url).includes("/api/v1/images/generations")) { return Promise.resolve(new Response(JSON.stringify({ created: 1, data: [{ b64_json: "abc" }], }), { status: 200, headers: { "Content-Type": "application/json" }, })); } return Promise.resolve(new Response(JSON.stringify({ choices: [{ message: { role: "assistant", content: "ok" } }], }), { status: 200, headers: { "Content-Type": "application/json" }, })); }); }); afterEach(() => { global.fetch = originalFetch; }); it("routes huggingface image models to /api/v1/images/generations", async () => { const { POST } = await import("../../src/app/api/providers/[id]/test-models/route.js"); const req = new Request("http://localhost/api/providers/conn-hf/test-models", { method: "POST", headers: { "Content-Type": "application/json" }, }); const res = await POST(req, { params: Promise.resolve({ id: "conn-hf" }) }); const body = await res.json(); expect(body.provider).toBe("huggingface"); expect(body.results.some((r) => r.modelId === "black-forest-labs/FLUX.1-schnell" && r.ok)).toBe(true); expect(global.fetch).toHaveBeenCalledWith( expect.stringContaining("/api/v1/images/generations"), expect.objectContaining({ method: "POST", }) ); }); });