import { beforeEach, describe, expect, it, vi } from "vitest"; import { GET as getQueueStats } from "@/app/api/admin/queues/stats/route"; import { GET as getBullBoard } from "@/app/api/admin/queues/[[...slug]]/route"; vi.mock("@/workers/rpa/queue", () => ({ getQuoteRpaQueue: vi.fn(), getQuoteRpaQueueCounts: vi.fn().mockResolvedValue({ waiting: 2, active: 1, delayed: 3, failed: 4, completed: 100, }), })); vi.mock("@/lib/bull-board/setup", () => ({ getBullBoardHandler: vi.fn(() => async () => new Response("Bull Board", { status: 200, headers: { "Content-Type": "text/html" }, }), ), })); const ADMIN_HEADERS = { "x-auth-type": "admin", "x-user-id": "U_admin_demo", "x-user-role": "admin", }; const SERVICE_HEADERS = { "x-auth-type": "service", "x-customer-id": "CUST_001", "x-permissions": "", }; beforeEach(() => { vi.clearAllMocks(); }); describe("admin queues API(task-132)", () => { it("GET /api/admin/queues/stats → 200 + counts", async () => { const response = await getQueueStats( new Request("http://localhost/api/admin/queues/stats", { headers: ADMIN_HEADERS, }), ); const json = await response.json(); expect(response.status).toBe(200); expect(json.code).toBe(0); expect(json.data.queue_name).toBe("quote-rpa"); expect(json.data.depth).toBe(6); expect(json.data.failed).toBe(4); expect(json.data.delayed).toBe(3); }); it("GET /api/admin/queues/stats 非 admin → 403", async () => { const response = await getQueueStats( new Request("http://localhost/api/admin/queues/stats", { headers: SERVICE_HEADERS, }), ); const json = await response.json(); expect(response.status).toBe(403); expect(json.code).toBe("FORBIDDEN"); }); it("GET /api/admin/queues Bull Board admin → 200 HTML", async () => { const response = await getBullBoard( new Request("http://localhost/api/admin/queues", { headers: ADMIN_HEADERS, }), { params: Promise.resolve({}) }, ); expect(response.status).toBe(200); expect(await response.text()).toContain("Bull Board"); }); it("GET /api/admin/queues 非 admin → 403", async () => { const response = await getBullBoard( new Request("http://localhost/api/admin/queues", { headers: SERVICE_HEADERS, }), { params: Promise.resolve({}) }, ); const json = await response.json(); expect(response.status).toBe(403); expect(json.code).toBe("FORBIDDEN"); }); });