66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
// @ts-nocheck
|
|
import { revalidatePath } from "next/cache";
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { requirePermission } from "@/lib/admin/guard";
|
|
import { deleteMedia, uploadMedia, uploadMediaAndReturn } from "./admin-media";
|
|
|
|
const { execute } = vi.hoisted(() => ({ execute: vi.fn() }));
|
|
vi.mock("@/features/housekeeping/domains/content/services/mutations", () => ({
|
|
contentMutationService: { execute },
|
|
createContentMutationInvocation: (actor, correlationId) => ({
|
|
expectedActorId: actor.id,
|
|
correlationId,
|
|
legacy: true,
|
|
}),
|
|
}));
|
|
vi.mock("@/lib/admin/guard", () => ({ requirePermission: vi.fn() }));
|
|
vi.mock("@/lib/permissions", () => ({ PERMS: { PAGES_EDIT: "pages.edit" } }));
|
|
vi.mock("next/cache", () => ({ revalidatePath: vi.fn() }));
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
vi.mocked(requirePermission).mockResolvedValue({
|
|
id: 1,
|
|
rank: 7,
|
|
username: "admin",
|
|
});
|
|
execute.mockResolvedValue({
|
|
ok: true,
|
|
data: {
|
|
before: null,
|
|
after: { name: "photo.png" },
|
|
output: { url: "/api/media/photo.png" },
|
|
},
|
|
correlationId: "legacy",
|
|
});
|
|
});
|
|
|
|
describe("Content media legacy wrappers", () => {
|
|
it("retains no-file validation", async () => {
|
|
expect(await uploadMedia(new FormData())).toEqual({
|
|
ok: false,
|
|
error: "No file provided",
|
|
});
|
|
expect(await uploadMediaAndReturn(new FormData())).toBe("");
|
|
expect(execute).not.toHaveBeenCalled();
|
|
});
|
|
it("delegates a valid upload and preserves both result shapes", async () => {
|
|
const file = new File(["bytes"], "photo.png", { type: "image/png" });
|
|
const form = new FormData();
|
|
form.set("file", file);
|
|
expect(await uploadMedia(form)).toEqual({ ok: true });
|
|
expect(await uploadMediaAndReturn(form)).toBe("/api/media/photo.png");
|
|
expect(execute).toHaveBeenCalledWith(expect.anything(), "media.upload", {
|
|
file,
|
|
});
|
|
});
|
|
it("delegates deletion and preserves revalidation", async () => {
|
|
await deleteMedia("photo.png");
|
|
expect(execute).toHaveBeenCalledWith(expect.anything(), "media.delete", {
|
|
filename: "photo.png",
|
|
});
|
|
expect(revalidatePath).toHaveBeenCalledWith("/api/media");
|
|
expect(revalidatePath).toHaveBeenCalledWith("/ase/content/media/library");
|
|
});
|
|
});
|