@@ -482,10 +482,27 @@ 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+
492+
487493 use super :: * ;
488494
495+ use crate :: { RoomState , StateChanges , StateStore , store:: MemoryStore } ;
496+
497+ fn make_room_test_helper ( room_type : RoomState ) -> ( Arc < MemoryStore > , Room ) {
498+ let store = Arc :: new ( MemoryStore :: new ( ) ) ;
499+ let user_id = user_id ! ( "@me:example.org" ) ;
500+ let room_id = room_id ! ( "!test:localhost" ) ;
501+ let ( sender, _receiver) = tokio:: sync:: broadcast:: channel ( 1 ) ;
502+
503+ ( store. clone ( ) , Room :: new ( user_id, store, room_id, room_type, sender) )
504+ }
505+
489506 prop_compose ! {
490507 fn arb_int( ) ( id in any:: <i64 >( ) ) -> Int {
491508 id. try_into( ) . unwrap_or_default( )
@@ -530,4 +547,85 @@ mod tests {
530547 assert ! ( normalized >= 0 ) ;
531548 assert ! ( normalized <= 100 ) ;
532549 }
550+
551+ #[ async_test]
552+ async fn test_room_member_from_parts ( ) {
553+ let ( store, room) = make_room_test_helper ( RoomState :: Joined ) ;
554+
555+ let carol = user_id ! ( "@carol:example.org" ) ;
556+ let denis = user_id ! ( "@denis:example.org" ) ;
557+ let erica = user_id ! ( "@erica:example.org" ) ;
558+ let fred = user_id ! ( "@fred:example.org" ) ;
559+ let fredo = user_id ! ( "@fredo:example.org" ) ;
560+ let bob = user_id ! ( "@bob:example.org" ) ;
561+ let julie = user_id ! ( "@julie:example.org" ) ;
562+ let me = user_id ! ( "@me:example.org" ) ;
563+ let mewto = user_id ! ( "@mewto:example.org" ) ;
564+
565+ let mut changes = StateChanges :: new ( "" . to_owned ( ) ) ;
566+
567+ let f = EventFactory :: new ( ) . room ( room_id ! ( "!test:localhost" ) ) ;
568+
569+ {
570+ let members = changes
571+ . state
572+ . entry ( room. room_id ( ) . to_owned ( ) )
573+ . or_default ( )
574+ . entry ( StateEventType :: RoomMember )
575+ . or_default ( ) ;
576+ members. insert ( carol. into ( ) , f. member ( carol) . display_name ( "Carol" ) . into ( ) ) ;
577+
578+ members. insert ( fred. into ( ) , f. member ( fred) . display_name ( "Fred" ) . into ( ) ) ;
579+ members. insert ( fredo. into ( ) , f. member ( fredo) . display_name ( "Fred" ) . membership ( MembershipState :: Knock ) . into ( ) ) ;
580+ members. insert ( denis. into ( ) , f. member ( denis) . display_name ( "Fred" ) . membership ( MembershipState :: Leave ) . into ( ) ) ;
581+ members. insert ( erica. into ( ) , f. member ( erica) . display_name ( "Fred" ) . membership ( MembershipState :: Ban ) . into ( ) ) ;
582+
583+ members. insert ( bob. into ( ) , f. member ( bob) . display_name ( "Bob" ) . membership ( MembershipState :: Invite ) . into ( ) ) ;
584+ members. insert ( julie. into ( ) , f. member ( me) . display_name ( "Bob" ) . into ( ) ) ;
585+
586+ members. insert ( me. into ( ) , f. member ( me) . display_name ( "Me" ) . into ( ) ) ;
587+ members. insert ( mewto. into ( ) , f. member ( mewto) . display_name ( "Me" ) . into ( ) ) ;
588+
589+ store. save_changes ( & changes) . await . unwrap ( ) ;
590+ }
591+
592+ assert ! (
593+ !room. get_member( carol) . await . unwrap( ) . expect( "Carol user" ) . name_ambiguous( )
594+ ) ;
595+
596+ assert ! (
597+ !room. get_member( fred) . await . unwrap( ) . expect( "Fred user" ) . name_ambiguous( )
598+ ) ;
599+ assert ! (
600+ !room. get_member( fredo) . await . unwrap( ) . expect( "Fredo user" ) . name_ambiguous( )
601+ ) ;
602+ assert ! (
603+ !room. get_member( denis) . await . unwrap( ) . expect( "Denis user" ) . name_ambiguous( )
604+ ) ;
605+ assert ! (
606+ !room. get_member( erica) . await . unwrap( ) . expect( "Erica user" ) . name_ambiguous( )
607+ ) ;
608+
609+ assert ! (
610+ !room. get_member( bob) . await . unwrap( ) . expect( "Bob user" ) . name_ambiguous( )
611+ ) ;
612+
613+ assert ! (
614+ !room. get_member( julie) . await . unwrap( ) . expect( "Julie user" ) . name_ambiguous( )
615+ ) ;
616+ assert ! (
617+ !room. get_member( bob) . await . unwrap( ) . expect( "Bob user" ) . name_ambiguous( )
618+ ) ;
619+
620+ assert_eq ! ( room. get_member( me) . await . unwrap( ) . expect( "Me user" ) . display_name( ) , Some ( "Me" ) ) ;
621+ assert_eq ! ( room. get_member( mewto) . await . unwrap( ) . expect( "Mewto user" ) . display_name( ) , Some ( "Me" ) ) ;
622+
623+ assert ! (
624+ room. get_member( me) . await . unwrap( ) . expect( "Me user" ) . name_ambiguous( )
625+ ) ;
626+ assert ! (
627+ room. get_member( mewto) . await . unwrap( ) . expect( "Mewto user" ) . name_ambiguous( )
628+ ) ;
629+
630+ }
533631}
0 commit comments