Files
fusion/packages/dashboard/app/api/__tests__/chat-rooms-api.test.ts
Fusion 8051bea95a fix(FN-3808): increase create-room member role typography
- Increase the member role text sizing in CreateRoomModal for better readability
- Update CreateRoomModal.css with the adjusted typography value
- Keep the change scoped to create-room role styling only

Fusion-Task-Id: FN-3808
2026-05-09 10:31:05 -07:00

95 lines
4.0 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
import {
addChatRoomMember,
createChatRoom,
deleteChatRoom,
deleteChatRoomMessage,
fetchChatRoom,
fetchChatRoomMembers,
fetchChatRoomMessages,
fetchChatRooms,
postChatRoomMessage,
removeChatRoomMember,
updateChatRoom,
} from "../legacy";
function jsonResponse(payload: unknown): Response {
return new Response(JSON.stringify(payload), { status: 200, headers: { "content-type": "application/json" } });
}
describe("chat room legacy API client", () => {
afterEach(() => {
vi.restoreAllMocks();
});
it("builds request for fetchChatRooms", async () => {
const fetchMock = vi.spyOn(globalThis, "fetch").mockImplementation(async () => jsonResponse({ rooms: [] }));
await fetchChatRooms({ status: "active", agentId: "agent-1" }, "proj-1");
const [url, init] = fetchMock.mock.calls[0] as [string, RequestInit];
expect(url).toContain("/api/chat/rooms?");
expect(url).toContain("projectId=proj-1");
expect(url).toContain("status=active");
expect(url).toContain("agentId=agent-1");
expect(init.method).toBeUndefined();
});
it("builds CRUD room endpoints", async () => {
const fetchMock = vi.spyOn(globalThis, "fetch").mockImplementation(async () => jsonResponse({ success: true }));
await fetchChatRoom("room-1", "proj-1");
await createChatRoom({ name: "Engineering" }, "proj-1");
await updateChatRoom("room-1", { description: "desc" }, "proj-1");
await deleteChatRoom("room-1", "proj-1");
expect((fetchMock.mock.calls[0] as [string])[0]).toContain("/api/chat/rooms/room-1?projectId=proj-1");
const [, createInit] = fetchMock.mock.calls[1] as [string, RequestInit];
expect(createInit.method).toBe("POST");
expect(createInit.body).toBe(JSON.stringify({ name: "Engineering", projectId: "proj-1" }));
const [, updateInit] = fetchMock.mock.calls[2] as [string, RequestInit];
expect(updateInit.method).toBe("PATCH");
expect(updateInit.body).toBe(JSON.stringify({ description: "desc" }));
const [, deleteInit] = fetchMock.mock.calls[3] as [string, RequestInit];
expect(deleteInit.method).toBe("DELETE");
});
it("builds member endpoints", async () => {
const fetchMock = vi.spyOn(globalThis, "fetch").mockImplementation(async () => jsonResponse({ success: true }));
await fetchChatRoomMembers("room-1", "proj-2");
await addChatRoomMember("room-1", { agentId: "agent-2", role: "owner" }, "proj-2");
await removeChatRoomMember("room-1", "agent-2", "proj-2");
expect((fetchMock.mock.calls[0] as [string])[0]).toContain("/api/chat/rooms/room-1/members?projectId=proj-2");
const [, addInit] = fetchMock.mock.calls[1] as [string, RequestInit];
expect(addInit.method).toBe("POST");
expect(addInit.body).toBe(JSON.stringify({ agentId: "agent-2", role: "owner" }));
expect((fetchMock.mock.calls[2] as [string])[0]).toContain("/api/chat/rooms/room-1/members/agent-2?projectId=proj-2");
});
it("builds message endpoints", async () => {
const fetchMock = vi.spyOn(globalThis, "fetch").mockImplementation(async () => jsonResponse({ success: true }));
await fetchChatRoomMessages("room-1", { limit: 2, offset: 1, before: "2026-01-01" }, "proj-3");
await postChatRoomMessage("room-1", { content: "hello", mentions: ["agent-x"] }, "proj-3");
await deleteChatRoomMessage("room-1", "msg-1", "proj-3");
const [listUrl] = fetchMock.mock.calls[0] as [string, RequestInit];
expect(listUrl).toContain("/api/chat/rooms/room-1/messages?");
expect(listUrl).toContain("projectId=proj-3");
expect(listUrl).toContain("limit=2");
expect(listUrl).toContain("offset=1");
expect(listUrl).toContain("before=2026-01-01");
const [, postInit] = fetchMock.mock.calls[1] as [string, RequestInit];
expect(postInit.method).toBe("POST");
expect(postInit.body).toBe(JSON.stringify({ content: "hello", mentions: ["agent-x"] }));
const [, delInit] = fetchMock.mock.calls[2] as [string, RequestInit];
expect(delInit.method).toBe("DELETE");
});
});