@@ -9,9 +9,9 @@ import { type MatrixClient, type Room } from "matrix-js-sdk/src/matrix";
99import { mocked } from "jest-mock" ;
1010
1111import { 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" ;
1313import 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" ;
1515import dispatcher from "../../../src/dispatcher/dispatcher" ;
1616import { Action } from "../../../src/dispatcher/actions" ;
1717import { 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