/* Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import React from "react"; import { render, fireEvent } from "@testing-library/react"; import dis from "../../../../src/dispatcher/dispatcher"; import RightPanelStore from "../../../../src/stores/right-panel/RightPanelStore"; import { RightPanelPhases } from "../../../../src/stores/right-panel/RightPanelStorePhases"; import { RightPanelTabs } from "../../../../src/components/views/right_panel/RightPanelTabs"; import { Action } from "../../../../src/dispatcher/actions"; describe("", () => { it("Component renders the correct tabs", () => { const { container, getByRole } = render(); expect(container).toMatchSnapshot(); // We expect Info, People and Threads as tabs expect(getByRole("tab", { name: "Info" })).toBeDefined(); expect(getByRole("tab", { name: "People" })).toBeDefined(); expect(getByRole("tab", { name: "Threads" })).toBeDefined(); }); it("Correct tab is active", () => { const { container } = render(); expect(container).toMatchSnapshot(); // Assert that the active tab is Info expect(container.querySelectorAll("[aria-selected='true']").length).toEqual(1); expect(container.querySelector("[aria-selected='true']")).toHaveAccessibleName("People"); }); it("Renders nothing for some phases, eg: FilePanel", () => { const { container } = render(); expect(container).toBeEmptyDOMElement(); }); it("onClick behaviors work as expected", () => { const spy = jest.spyOn(RightPanelStore.instance, "pushCard"); const { getByRole } = render(); // Info -> People fireEvent.click(getByRole("tab", { name: "People" })); expect(spy).toHaveBeenLastCalledWith({ phase: RightPanelPhases.RoomMemberList }, true); // People -> Threads fireEvent.click(getByRole("tab", { name: "Threads" })); expect(spy).toHaveBeenLastCalledWith({ phase: RightPanelPhases.ThreadPanel }, true); // Threads -> Info fireEvent.click(getByRole("tab", { name: "Info" })); expect(spy).toHaveBeenLastCalledWith({ phase: RightPanelPhases.RoomSummary }, true); }); it("Threads tab is focused on action", () => { const { getByRole } = render(); dis.dispatch({ action: Action.FocusThreadsPanel }, true); expect(getByRole("tab", { name: "Threads" })).toHaveFocus(); }); });