@@ -482,10 +482,26 @@ pub fn normalize_power_level(power_level: Int, max_power_level: i64) -> Int {
482482
483483#[ cfg( test) ]
484484mod tests {
485+ use std:: sync:: Arc ;
486+
485487 use proptest:: prelude:: * ;
486488
489+ use matrix_sdk_test:: { async_test, event_factory:: EventFactory } ;
490+ use ruma:: { room_id, user_id} ;
491+
487492 use super :: * ;
488493
494+ use crate :: { RoomState , StateChanges , StateStore , store:: MemoryStore } ;
495+
496+ fn make_room_test_helper ( room_type : RoomState ) -> ( Arc < MemoryStore > , Room ) {
497+ let store = Arc :: new ( MemoryStore :: new ( ) ) ;
498+ let user_id = user_id ! ( "@me:example.org" ) ;
499+ let room_id = room_id ! ( "!test:localhost" ) ;
500+ let ( sender, _receiver) = tokio:: sync:: broadcast:: channel ( 1 ) ;
501+
502+ ( store. clone ( ) , Room :: new ( user_id, store, room_id, room_type, sender) )
503+ }
504+
489505 prop_compose ! {
490506 fn arb_int( ) ( id in any:: <i64 >( ) ) -> Int {
491507 id. try_into( ) . unwrap_or_default( )
@@ -530,4 +546,79 @@ mod tests {
530546 assert ! ( normalized >= 0 ) ;
531547 assert ! ( normalized <= 100 ) ;
532548 }
549+
550+ #[ async_test]
551+ async fn test_room_member_from_parts ( ) {
552+ let ( store, room) = make_room_test_helper ( RoomState :: Joined ) ;
553+
554+ let carol = user_id ! ( "@carol:example.org" ) ;
555+ let denis = user_id ! ( "@denis:example.org" ) ;
556+ let erica = user_id ! ( "@erica:example.org" ) ;
557+ let fred = user_id ! ( "@fred:example.org" ) ;
558+ let fredo = user_id ! ( "@fredo:example.org" ) ;
559+ let bob = user_id ! ( "@bob:example.org" ) ;
560+ let julie = user_id ! ( "@julie:example.org" ) ;
561+ let me = user_id ! ( "@me:example.org" ) ;
562+ let mewto = user_id ! ( "@mewto:example.org" ) ;
563+
564+ let mut changes = StateChanges :: new ( "" . to_owned ( ) ) ;
565+
566+ let f = EventFactory :: new ( ) . room ( room_id ! ( "!test:localhost" ) ) ;
567+
568+ {
569+ let members = changes
570+ . state
571+ . entry ( room. room_id ( ) . to_owned ( ) )
572+ . or_default ( )
573+ . entry ( StateEventType :: RoomMember )
574+ . or_default ( ) ;
575+ members. insert ( carol. into ( ) , f. member ( carol) . display_name ( "Carol" ) . into ( ) ) ;
576+
577+ members. insert ( fred. into ( ) , f. member ( fred) . display_name ( "Fred" ) . into ( ) ) ;
578+ members. insert (
579+ fredo. into ( ) ,
580+ f. member ( fredo) . display_name ( "Fred" ) . membership ( MembershipState :: Knock ) . into ( ) ,
581+ ) ;
582+ members. insert (
583+ denis. into ( ) ,
584+ f. member ( denis) . display_name ( "Fred" ) . membership ( MembershipState :: Leave ) . into ( ) ,
585+ ) ;
586+ members. insert (
587+ erica. into ( ) ,
588+ f. member ( erica) . display_name ( "Fred" ) . membership ( MembershipState :: Ban ) . into ( ) ,
589+ ) ;
590+
591+ members. insert (
592+ bob. into ( ) ,
593+ f. member ( bob) . display_name ( "Bob" ) . membership ( MembershipState :: Invite ) . into ( ) ,
594+ ) ;
595+ members. insert ( julie. into ( ) , f. member ( me) . display_name ( "Bob" ) . into ( ) ) ;
596+
597+ members. insert ( me. into ( ) , f. member ( me) . display_name ( "Me" ) . into ( ) ) ;
598+ members. insert ( mewto. into ( ) , f. member ( mewto) . display_name ( "Me" ) . into ( ) ) ;
599+
600+ store. save_changes ( & changes) . await . unwrap ( ) ;
601+ }
602+
603+ assert ! ( !room. get_member( carol) . await . unwrap( ) . expect( "Carol user" ) . name_ambiguous( ) ) ;
604+
605+ assert ! ( !room. get_member( fred) . await . unwrap( ) . expect( "Fred user" ) . name_ambiguous( ) ) ;
606+ assert ! ( !room. get_member( fredo) . await . unwrap( ) . expect( "Fredo user" ) . name_ambiguous( ) ) ;
607+ assert ! ( !room. get_member( denis) . await . unwrap( ) . expect( "Denis user" ) . name_ambiguous( ) ) ;
608+ assert ! ( !room. get_member( erica) . await . unwrap( ) . expect( "Erica user" ) . name_ambiguous( ) ) ;
609+
610+ assert ! ( !room. get_member( bob) . await . unwrap( ) . expect( "Bob user" ) . name_ambiguous( ) ) ;
611+
612+ assert ! ( !room. get_member( julie) . await . unwrap( ) . expect( "Julie user" ) . name_ambiguous( ) ) ;
613+ assert ! ( !room. get_member( bob) . await . unwrap( ) . expect( "Bob user" ) . name_ambiguous( ) ) ;
614+
615+ assert_eq ! ( room. get_member( me) . await . unwrap( ) . expect( "Me user" ) . display_name( ) , Some ( "Me" ) ) ;
616+ assert_eq ! (
617+ room. get_member( mewto) . await . unwrap( ) . expect( "Mewto user" ) . display_name( ) ,
618+ Some ( "Me" )
619+ ) ;
620+
621+ assert ! ( room. get_member( me) . await . unwrap( ) . expect( "Me user" ) . name_ambiguous( ) ) ;
622+ assert ! ( room. get_member( mewto) . await . unwrap( ) . expect( "Mewto user" ) . name_ambiguous( ) ) ;
623+ }
533624}
0 commit comments