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:
@@ -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" },
|
||||
|
||||
@@ -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", () => {
|
||||
|
||||
Reference in New Issue
Block a user