New room list: add empty state (#29512)

* refactor: extract room creation and right verification

* refactor: update `RoomListHeaderViewModel` to use utils

* feat(room list filter): add filter key to `PrimaryFilter` model

* feat(room list filter): return active primary filter

* feat(room list): add create room action and rights verification

* test: update room list tests

* feat(empty room list): add empty room list

* test(empty room list): add empty room list tests

* feat(room list): use empty room list in `RoomListView`

* test(room list panel): update tests

* test(e2e): add e2e tests for empty room list

* test(e2e): update room list header snapshot
This commit is contained in:
Florian Duros
2025-03-18 11:02:33 +01:00
committed by GitHub
parent 55b0b1107e
commit 7de54a385e
26 changed files with 991 additions and 155 deletions
@@ -0,0 +1,61 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
import { mocked } from "jest-mock";
import { render, screen } from "jest-matrix-react";
import React from "react";
import {
type RoomListViewState,
useRoomListViewModel,
} from "../../../../../../src/components/viewmodels/roomlist/RoomListViewModel";
import { SecondaryFilters } from "../../../../../../src/components/viewmodels/roomlist/useFilteredRooms";
import { SortOption } from "../../../../../../src/components/viewmodels/roomlist/useSorter";
import { RoomListView } from "../../../../../../src/components/views/rooms/RoomListPanel/RoomListView";
import { mkRoom, stubClient } from "../../../../../test-utils";
jest.mock("../../../../../../src/components/viewmodels/roomlist/RoomListViewModel", () => ({
useRoomListViewModel: jest.fn(),
}));
describe("<RoomListView />", () => {
const defaultValue: RoomListViewState = {
rooms: [],
primaryFilters: [],
activateSecondaryFilter: jest.fn().mockReturnValue({}),
activeSecondaryFilter: SecondaryFilters.AllActivity,
sort: jest.fn(),
activeSortOption: SortOption.Activity,
createRoom: jest.fn(),
createChatRoom: jest.fn(),
canCreateRoom: true,
toggleMessagePreview: jest.fn(),
shouldShowMessagePreview: false,
};
const matrixClient = stubClient();
afterEach(() => {
jest.resetAllMocks();
});
it("should render an empty room list", () => {
mocked(useRoomListViewModel).mockReturnValue(defaultValue);
render(<RoomListView />);
expect(screen.getByText("No chats yet")).toBeInTheDocument();
});
it("should render a room list", () => {
mocked(useRoomListViewModel).mockReturnValue({
...defaultValue,
rooms: [mkRoom(matrixClient, "testing room")],
});
render(<RoomListView />);
expect(screen.getByRole("grid", { name: "Room list" })).toBeInTheDocument();
});
});