Skip to content

Commit 4f6705e

Browse files
committed
test: fix existing test in RoomListViewModel
1 parent c8453ce commit 4f6705e

1 file changed

Lines changed: 31 additions & 35 deletions

File tree

apps/web/test/viewmodels/room-list/RoomListViewModel-test.tsx

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import { type MatrixClient, type Room } from "matrix-js-sdk/src/matrix";
99
import { mocked } from "jest-mock";
1010

1111
import { createTestClient, flushPromises, mkStubRoom, stubClient } from "../../test-utils";
12-
import RoomListStoreV3, { RoomListStoreV3Event } from "../../../src/stores/room-list-v3/RoomListStoreV3";
12+
import RoomListStoreV3, { CHATS_TAG, RoomListStoreV3Event } from "../../../src/stores/room-list-v3/RoomListStoreV3";
1313
import SpaceStore from "../../../src/stores/spaces/SpaceStore";
14-
import { FilterKey } from "../../../src/stores/room-list-v3/skip-list/filters";
14+
import { FilterEnum } from "../../../src/stores/room-list-v3/skip-list/filters";
1515
import dispatcher from "../../../src/dispatcher/dispatcher";
1616
import { Action } from "../../../src/dispatcher/actions";
1717
import { SdkContextClass } from "../../../src/contexts/SDKContext";
@@ -46,7 +46,7 @@ describe("RoomListViewModel", () => {
4646

4747
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
4848
spaceId: "home",
49-
rooms: [room1, room2, room3],
49+
sections: [{ tag: CHATS_TAG, rooms: [room1, room2, room3] }],
5050
});
5151

5252
jest.spyOn(RoomListStoreV3.instance, "isLoadingRooms", "get").mockReturnValue(false);
@@ -77,12 +77,12 @@ describe("RoomListViewModel", () => {
7777
it("should initialize with empty room list", () => {
7878
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
7979
spaceId: "home",
80-
rooms: [],
80+
sections: [{ tag: CHATS_TAG, rooms: [] }],
8181
});
8282

8383
viewModel = new RoomListViewModel({ client: matrixClient });
8484

85-
expect(viewModel.getSnapshot().sections[0].roomIds).toEqual([]);
85+
expect(viewModel.getSnapshot().sections).toEqual([]);
8686
expect(viewModel.getSnapshot().isRoomListEmpty).toBe(true);
8787
});
8888

@@ -101,7 +101,7 @@ describe("RoomListViewModel", () => {
101101
const newRoom = mkStubRoom("!room4:server", "Room 4", matrixClient);
102102
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
103103
spaceId: "home",
104-
rooms: [room1, room2, room3, newRoom],
104+
sections: [{ tag: CHATS_TAG, rooms: [room1, room2, room3, newRoom] }],
105105
});
106106

107107
RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate);
@@ -136,7 +136,7 @@ describe("RoomListViewModel", () => {
136136
RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate);
137137

138138
// View model should be still valid
139-
expect(room1VM.isDisposed).toBe(false);
139+
expect(room1VM!.isDisposed).toBe(false);
140140
});
141141
});
142142

@@ -148,7 +148,7 @@ describe("RoomListViewModel", () => {
148148

149149
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
150150
spaceId: "!space:server",
151-
rooms: spaceRoomList,
151+
sections: [{ tag: CHATS_TAG, rooms: spaceRoomList }],
152152
});
153153

154154
jest.spyOn(SpaceStore.instance, "getLastSelectedRoomIdForSpace").mockReturnValue("!room1:server");
@@ -163,16 +163,16 @@ describe("RoomListViewModel", () => {
163163
viewModel = new RoomListViewModel({ client: matrixClient });
164164

165165
// Get view models for visible rooms
166-
const vm1 = viewModel.getRoomItemViewModel("!room1:server");
167-
const vm2 = viewModel.getRoomItemViewModel("!room2:server");
166+
const vm1 = viewModel.getRoomItemViewModel("!room1:server")!;
167+
const vm2 = viewModel.getRoomItemViewModel("!room2:server")!;
168168

169169
const disposeSpy1 = jest.spyOn(vm1, "dispose");
170170
const disposeSpy2 = jest.spyOn(vm2, "dispose");
171171

172172
// Change space
173173
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
174174
spaceId: "!space:server",
175-
rooms: [room3],
175+
sections: [{ tag: CHATS_TAG, rooms: [room3] }],
176176
});
177177

178178
RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate);
@@ -188,7 +188,7 @@ describe("RoomListViewModel", () => {
188188

189189
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
190190
spaceId: "!space:server",
191-
rooms: [newSpaceRoom],
191+
sections: [{ tag: CHATS_TAG, rooms: [newSpaceRoom] }],
192192
});
193193
jest.spyOn(SpaceStore.instance, "getLastSelectedRoomIdForSpace").mockReturnValue(null);
194194

@@ -197,7 +197,7 @@ describe("RoomListViewModel", () => {
197197
// New space room should be accessible
198198
expect(() => viewModel.getRoomItemViewModel("!spaceroom:server")).not.toThrow();
199199
// Old rooms from the home space should not be accessible
200-
expect(() => viewModel.getRoomItemViewModel("!room1:server")).toThrow();
200+
expect(viewModel.getRoomItemViewModel("!room1:server")).toBeUndefined();
201201
});
202202
});
203203

@@ -252,7 +252,7 @@ describe("RoomListViewModel", () => {
252252
// Simulate room list update that would move room2 to front
253253
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
254254
spaceId: "home",
255-
rooms: [room2, room1, room3], // room2 moved to front
255+
sections: [{ tag: CHATS_TAG, rooms: [room2, room1, room3] }], // room2 moved to front
256256
});
257257

258258
RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate);
@@ -295,8 +295,8 @@ describe("RoomListViewModel", () => {
295295

296296
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
297297
spaceId: "home",
298-
rooms: [room1],
299-
filterKeys: [FilterKey.UnreadFilter],
298+
sections: [{ tag: CHATS_TAG, rooms: [room1] }],
299+
filterKeys: [FilterEnum.UnreadFilter],
300300
});
301301

302302
viewModel.onToggleFilter("unread");
@@ -311,8 +311,8 @@ describe("RoomListViewModel", () => {
311311
// Turn filter on
312312
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
313313
spaceId: "home",
314-
rooms: [room1],
315-
filterKeys: [FilterKey.UnreadFilter],
314+
sections: [{ tag: CHATS_TAG, rooms: [room1] }],
315+
filterKeys: [FilterEnum.UnreadFilter],
316316
});
317317
viewModel.onToggleFilter("unread");
318318

@@ -321,7 +321,7 @@ describe("RoomListViewModel", () => {
321321
// Turn filter off
322322
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
323323
spaceId: "home",
324-
rooms: [room1, room2, room3],
324+
sections: [{ tag: CHATS_TAG, rooms: [room1, room2, room3] }],
325325
});
326326
viewModel.onToggleFilter("unread");
327327

@@ -341,7 +341,7 @@ describe("RoomListViewModel", () => {
341341
const itemViewModel = viewModel.getRoomItemViewModel("!room1:server");
342342

343343
expect(itemViewModel).toBeDefined();
344-
expect(itemViewModel.getSnapshot().room).toBe(room1);
344+
expect(itemViewModel!.getSnapshot().room).toBe(room1);
345345
});
346346

347347
it("should reuse existing room item view model", () => {
@@ -353,12 +353,10 @@ describe("RoomListViewModel", () => {
353353
expect(itemViewModel1).toBe(itemViewModel2);
354354
});
355355

356-
it("should throw error when requesting view model for non-existent room", () => {
356+
it("should return undefined for non-existent room", () => {
357357
viewModel = new RoomListViewModel({ client: matrixClient });
358358

359-
expect(() => {
360-
viewModel.getRoomItemViewModel("!nonexistent:server");
361-
}).toThrow();
359+
expect(viewModel.getRoomItemViewModel("!nonexistent:server")).toBeUndefined();
362360
});
363361

364362
it("should not throw when requesting view model for a room removed from the list but still in roomsMap", () => {
@@ -367,31 +365,29 @@ describe("RoomListViewModel", () => {
367365
// Normal list update removes room2 from the list
368366
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
369367
spaceId: "home",
370-
rooms: [room1, room3],
368+
sections: [{ tag: CHATS_TAG, rooms: [room1, room3] }],
371369
});
372370

373371
RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate);
374372

375373
expect(() => viewModel.getRoomItemViewModel("!room2:server")).not.toThrow();
376374
});
377375

378-
it("should throw when requesting view model for a room from old space after space change", () => {
376+
it("should return undefined for a room from old space after space change", () => {
379377
viewModel = new RoomListViewModel({ client: matrixClient });
380378

381379
const spaceRoom = mkStubRoom("!newroom:server", "New Room", matrixClient);
382380

383381
// Space change: new space only has spaceRoom
384382
jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({
385383
spaceId: "!space:server",
386-
rooms: [spaceRoom],
384+
sections: [{ tag: CHATS_TAG, rooms: [spaceRoom] }],
387385
});
388386
jest.spyOn(SpaceStore.instance, "getLastSelectedRoomIdForSpace").mockReturnValue(null);
389387

390388
RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate);
391389

392-
expect(() => viewModel.getRoomItemViewModel("!room1:server")).toThrow(
393-
"Room !room1:server not found in roomsMap",
394-
);
390+
expect(viewModel.getRoomItemViewModel("!room1:server")).toBeUndefined();
395391
});
396392

397393
it("should recover when roomsMap is stale but roomsResult has the room", () => {
@@ -407,9 +403,9 @@ describe("RoomListViewModel", () => {
407403
it("should dispose view models for rooms no longer visible", () => {
408404
viewModel = new RoomListViewModel({ client: matrixClient });
409405

410-
const vm1 = viewModel.getRoomItemViewModel("!room1:server");
411-
const vm2 = viewModel.getRoomItemViewModel("!room2:server");
412-
const vm3 = viewModel.getRoomItemViewModel("!room3:server");
406+
const vm1 = viewModel.getRoomItemViewModel("!room1:server")!;
407+
const vm2 = viewModel.getRoomItemViewModel("!room2:server")!;
408+
const vm3 = viewModel.getRoomItemViewModel("!room3:server")!;
413409

414410
const disposeSpy1 = jest.spyOn(vm1, "dispose");
415411
const disposeSpy3 = jest.spyOn(vm3, "dispose");
@@ -593,8 +589,8 @@ describe("RoomListViewModel", () => {
593589
it("should dispose all room item view models on dispose", () => {
594590
viewModel = new RoomListViewModel({ client: matrixClient });
595591

596-
const vm1 = viewModel.getRoomItemViewModel("!room1:server");
597-
const vm2 = viewModel.getRoomItemViewModel("!room2:server");
592+
const vm1 = viewModel.getRoomItemViewModel("!room1:server")!;
593+
const vm2 = viewModel.getRoomItemViewModel("!room2:server")!;
598594

599595
const disposeSpy1 = jest.spyOn(vm1, "dispose");
600596
const disposeSpy2 = jest.spyOn(vm2, "dispose");

0 commit comments

Comments
 (0)