import { beforeEach, expect, it, vi } from "vitest"; import { requirePermission } from "@/lib/admin/guard"; const { execute } = vi.hoisted(() => ({ execute: vi.fn() })); vi.mock("@/features/housekeeping/domains/people/services/mutations", () => ({ createLegacyPeopleMutationContext: vi.fn( (staff, permission, correlationId) => ({ staff, permission, correlationId, }), ), peopleMutationService: { execute }, })); vi.mock("@/lib/admin/guard", () => ({ requirePermission: vi.fn() })); vi.mock("@/lib/permissions", () => ({ PERMS: { USERS_EDIT: "admin.users.edit" }, })); vi.mock("@/lib/db", () => ({ db: {}, User: {}, UsersCurrency: {} })); vi.mock("@/lib/services/staff-activity", () => ({ logStaffActivity: vi.fn() })); import { bulkAdjustCurrency } from "./bulk-users"; beforeEach(() => { vi.clearAllMocks(); vi.mocked(requirePermission).mockResolvedValue({ id: 1, rank: 7, username: "admin", } as never); execute.mockResolvedValue({ ok: true, data: { before: { userIds: [7, 8] }, after: { completed: 2, total: 2, failedIds: [] }, }, correlationId: "bulk-adjust", }); }); it("keeps one ACL check while delegating a positive bulk adjustment", async () => { await expect( bulkAdjustCurrency({ userIds: [7, 8], amount: 25, type: "credits", }), ).resolves.toEqual({ ok: true, data: { adjusted: 2, total: 2, failedIds: [] }, }); expect(requirePermission).toHaveBeenCalledTimes(1); expect(execute).toHaveBeenCalledWith( expect.anything(), "users.bulk-currency", { userIds: [7, 8], amount: 25, type: "credits" }, ); });