@@ -329,8 +329,10 @@ mod tests {
329329 use super :: processors:: room:: msc4186:: cache_latest_events;
330330 use crate :: {
331331 rooms:: normal:: { RoomHero , RoomInfoNotableUpdateReasons } ,
332+ store:: { RoomLoadSettings , StoreConfig } ,
332333 test_utils:: logged_in_base_client,
333334 BaseClient , EncryptionState , RequestedRequiredStates , RoomInfoNotableUpdate , RoomState ,
335+ SessionMeta ,
334336 } ;
335337 #[ cfg( feature = "e2e-encryption" ) ]
336338 use crate :: { store:: MemoryStore , Room } ;
@@ -1087,6 +1089,68 @@ mod tests {
10871089 assert ! ( client_room. name( ) . is_none( ) ) ;
10881090 }
10891091
1092+ #[ async_test]
1093+ async fn test_display_name_is_persisted_from_sliding_sync ( ) {
1094+ let user_id = user_id ! ( "@u:e.uk" ) ;
1095+ let room_id = room_id ! ( "!r:e.uk" ) ;
1096+ let session_meta = SessionMeta { user_id : user_id. to_owned ( ) , device_id : "FOOBAR" . into ( ) } ;
1097+ let state_store;
1098+
1099+ {
1100+ let client = {
1101+ let store = StoreConfig :: new ( "cross-process-foo" . to_owned ( ) ) ;
1102+ state_store = store. state_store . clone ( ) ;
1103+
1104+ let client = BaseClient :: new ( store) ;
1105+ client
1106+ . activate (
1107+ session_meta. clone ( ) ,
1108+ RoomLoadSettings :: default ( ) ,
1109+ #[ cfg( feature = "e2e-encryption" ) ]
1110+ None ,
1111+ )
1112+ . await
1113+ . expect ( "`activate` failed!" ) ;
1114+
1115+ client
1116+ } ;
1117+
1118+ // When the sliding sync response contains an explicit room name as well as an
1119+ // alias
1120+ let room = room_with_name ( "Hello World" , user_id) ;
1121+ let response = response_with_room ( room_id, room) ;
1122+ client
1123+ . process_sliding_sync ( & response, & ( ) , & RequestedRequiredStates :: default ( ) )
1124+ . await
1125+ . expect ( "Failed to process sync" ) ;
1126+
1127+ let room = client. get_room ( room_id) . expect ( "No room found" ) ;
1128+ assert_eq ! ( room. cached_display_name( ) . unwrap( ) . to_string( ) , "Hello World" ) ;
1129+ }
1130+
1131+ {
1132+ let client = {
1133+ let mut store = StoreConfig :: new ( "cross-process-foo" . to_owned ( ) ) ;
1134+ store. state_store = state_store;
1135+ let client = BaseClient :: new ( store) ;
1136+ client
1137+ . activate (
1138+ session_meta,
1139+ RoomLoadSettings :: default ( ) ,
1140+ #[ cfg( feature = "e2e-encryption" ) ]
1141+ None ,
1142+ )
1143+ . await
1144+ . expect ( "`activate` failed!" ) ;
1145+
1146+ client
1147+ } ;
1148+
1149+ let room = client. get_room ( room_id) . expect ( "No room found" ) ;
1150+ assert_eq ! ( room. cached_display_name( ) . unwrap( ) . to_string( ) , "Hello World" ) ;
1151+ }
1152+ }
1153+
10901154 #[ async_test]
10911155 async fn test_compute_heroes_from_sliding_sync ( ) {
10921156 // Given a logged-in client
@@ -2404,6 +2468,16 @@ mod tests {
24042468 room
24052469 }
24062470
2471+ fn room_with_name ( name : & str , user_id : & UserId ) -> http:: response:: Room {
2472+ let mut room = http:: response:: Room :: new ( ) ;
2473+
2474+ let name_event_content = RoomNameEventContent :: new ( name. to_owned ( ) ) ;
2475+
2476+ room. required_state . push ( make_state_event ( user_id, "" , name_event_content, None ) ) ;
2477+
2478+ room
2479+ }
2480+
24072481 fn room_with_timeline ( events : & [ serde_json:: Value ] ) -> http:: response:: Room {
24082482 let mut room = http:: response:: Room :: new ( ) ;
24092483 room. timeline . extend (
0 commit comments