test(FN-4403): complete Step 3 — cover rooms/mobile footer behavior

Fusion-Task-Id: FN-4403
Fusion-Task-Lineage: 9bbfbed9-c40b-4ad2-a739-c8d93f9f691f
This commit is contained in:
Fusion
2026-05-14 06:24:51 -07:00
committed by gsxdsm
parent ba25ad5543
commit 3c7d41e60a
2 changed files with 45 additions and 2 deletions

View File

@@ -247,6 +247,31 @@ describe("ChatView — rooms (FN-3805..FN-3811 contract)", () => {
expect(selectRoom).toHaveBeenCalledWith("room-b");
});
it("shows Create room in mobile footer for Rooms scope and hides New Chat + rooms header", () => {
const viewportSpy = mockMobileViewport();
const { container } = render(<ChatView projectId="proj-123" addToast={vi.fn()} experimentalFeatures={{ chatRooms: true }} />);
const createRoomButton = screen.getByTestId("chat-create-room-btn");
expect(createRoomButton.closest(".chat-sidebar-footer")).toBeInTheDocument();
expect(screen.queryByTestId("chat-new-btn")).not.toBeInTheDocument();
expect(container.querySelector(".chat-sidebar-rooms-header")).not.toBeInTheDocument();
viewportSpy.mockRestore();
});
it("keeps Create room in rooms header on desktop and omits rooms footer", () => {
const viewportSpy = mockDesktopViewport();
const { container } = render(<ChatView projectId="proj-123" addToast={vi.fn()} experimentalFeatures={{ chatRooms: true }} />);
const createRoomButton = screen.getByTestId("chat-create-room-btn");
expect(createRoomButton.closest(".chat-sidebar-rooms-header")).toBeInTheDocument();
expect(container.querySelector(".chat-sidebar-footer")).not.toBeInTheDocument();
viewportSpy.mockRestore();
});
it.each([
{ memberCount: 1, expectedText: "1 member" },
{ memberCount: 2, expectedText: "2 members" },

View File

@@ -2836,16 +2836,32 @@ describe("ChatView sidebar structure", () => {
expect(screen.getByTestId("chat-new-btn")).toBeInTheDocument();
});
it("renders mobile footer New Chat button", () => {
it("renders mobile footer New Chat button in Direct scope", () => {
setupMockChat({ sessions: [], filteredSessions: [] });
const viewportSpy = mockViewportMode("mobile");
render(<ChatView projectId="proj-123" addToast={vi.fn()} />);
expect(screen.getByTestId("chat-new-btn")).toBeInTheDocument();
viewportSpy.mockRestore();
});
it("opens new chat dialog when clicking mobile footer New Chat button", async () => {
it("hides mobile footer New Chat button in Rooms scope", async () => {
setupMockChat({ sessions: [], filteredSessions: [] });
const viewportSpy = mockViewportMode("mobile");
render(<ChatView projectId="proj-123" addToast={vi.fn()} experimentalFeatures={{ chatRooms: true }} />);
await userEvent.click(screen.getByTestId("chat-sidebar-scope-rooms"));
expect(screen.queryByTestId("chat-new-btn")).not.toBeInTheDocument();
viewportSpy.mockRestore();
});
it("opens new chat dialog when clicking mobile footer New Chat button in Direct scope", async () => {
setupMockChat({ sessions: [], filteredSessions: [] });
const viewportSpy = mockViewportMode("mobile");
render(<ChatView projectId="proj-123" addToast={vi.fn()} />);
@@ -2853,6 +2869,8 @@ describe("ChatView sidebar structure", () => {
const dialog = document.querySelector(".chat-new-dialog") as HTMLElement | null;
expect(dialog).toBeInTheDocument();
viewportSpy.mockRestore();
});
it("session list has both chat-session-list and chat-sidebar-list classes", () => {