import { describe, it, expect } from "vitest"; import { DELETE } from "./route"; import { prisma } from "@/lib/db"; import type { Prisma } from "@prisma/client"; function del(id: string) { return new Request(`http://localhost/api/requests/${id}`, { method: "DELETE" }); } async function seed(jobData: Prisma.JobCreateWithoutRequestInput) { return prisma.request.create({ data: { artist: "A", album: "B", status: "pending", job: { create: jobData } }, include: { job: true }, }); } describe("remove request API", () => { it("deletes a queued request and cascades its job", async () => { const created = await seed({ state: "requested" }); const res = await DELETE(del(created.id), { params: Promise.resolve({ id: created.id }) }); expect(res.status).toBe(200); expect(await prisma.request.findUnique({ where: { id: created.id } })).toBeNull(); expect(await prisma.job.findUnique({ where: { id: created.job!.id } })).toBeNull(); }); it("refuses to remove an in-flight job", async () => { const created = await seed({ state: "downloading" }); const res = await DELETE(del(created.id), { params: Promise.resolve({ id: created.id }) }); expect(res.status).toBe(400); expect(await prisma.request.findUnique({ where: { id: created.id } })).not.toBeNull(); }); it("404s for a missing request", async () => { const res = await DELETE(del("nope"), { params: Promise.resolve({ id: "nope" }) }); expect(res.status).toBe(404); }); });