import { beforeEach, describe, expect, it, vi } from "vitest"; const mocks = vi.hoisted(() => ({ updateMessage: vi.fn(), deleteMessage: vi.fn(), })); vi.mock("@hivegrid/chat/message-mutations.server", () => ({ updateChatMessage: mocks.updateMessage, deleteChatMessage: mocks.deleteMessage, })); import { editMemberChatMessage, removeMemberChatMessage } from "./ChatMessageMutationsService.server"; const context = { tenantId: "tenant_1", userId: "user_1", permissions: ["chat.read_own_channels", "chat.write"], } as const; describe("ChatMessageMutationsService", () => { beforeEach(() => vi.clearAllMocks()); it("passes the fresh route context to an edit mutation", async () => { mocks.updateMessage.mockResolvedValue({ replayed: false }); await editMemberChatMessage({ context, chatId: "chat_1", messageId: "message_1", requestId: "request_1", body: "Neu" }); expect(mocks.updateMessage).toHaveBeenCalledWith({ ...context, chatId: "chat_1", messageId: "message_1", requestId: "request_1", body: "Neu", }); }); it("passes the stable request id to a delete mutation", async () => { mocks.deleteMessage.mockResolvedValue({ replayed: false }); await removeMemberChatMessage({ context, chatId: "chat_1", messageId: "message_1", requestId: "request_2" }); expect(mocks.deleteMessage).toHaveBeenCalledWith({ ...context, chatId: "chat_1", messageId: "message_1", requestId: "request_2", }); }); });