@@ -2342,6 +2342,8 @@ pub(crate) mod test {
2342
2342
use matrix_sdk_base:: media:: { MediaFormat , MediaRequest , MediaThumbnailSize , MediaType } ;
2343
2343
use matrix_sdk_test:: { test_json, EventBuilder , EventsJson } ;
2344
2344
use mockito:: { mock, Matcher } ;
2345
+ #[ cfg( feature = "sled_state_store" ) ]
2346
+ use ruma:: api:: client:: r0:: message:: get_message_events:: Direction ;
2345
2347
use ruma:: {
2346
2348
api:: {
2347
2349
client:: {
@@ -3650,4 +3652,182 @@ pub(crate) mod test {
3650
3652
3651
3653
matches:: assert_matches!( encryption_event, AnySyncStateEvent :: RoomEncryption ( _) ) ;
3652
3654
}
3655
+
3656
+ #[ cfg( feature = "sled_state_store" ) ]
3657
+ #[ tokio:: test]
3658
+ async fn messages ( ) {
3659
+ let room_id = room_id ! ( "!SVkFJHzfwvuaIEawgC:localhost" ) ;
3660
+ let client = logged_in_client ( ) . await ;
3661
+
3662
+ let _m = mock ( "GET" , Matcher :: Regex ( r"^/_matrix/client/r0/sync\?.*$" . to_string ( ) ) )
3663
+ . with_status ( 200 )
3664
+ . with_body ( test_json:: MORE_SYNC . to_string ( ) )
3665
+ . match_header ( "authorization" , "Bearer 1234" )
3666
+ . create ( ) ;
3667
+
3668
+ let mocked_messages = mock (
3669
+ "GET" ,
3670
+ Matcher :: Regex (
3671
+ r"^/_matrix/client/r0/rooms/.*/messages.*from=t392-516_47314_0_7_1_1_1_11444_1.*"
3672
+ . to_string ( ) ,
3673
+ ) ,
3674
+ )
3675
+ . with_status ( 200 )
3676
+ . with_body ( test_json:: SYNC_ROOM_MESSAGES_BATCH_1 . to_string ( ) )
3677
+ . match_header ( "authorization" , "Bearer 1234" )
3678
+ . create ( ) ;
3679
+
3680
+ let _m = mock (
3681
+ "GET" ,
3682
+ Matcher :: Regex (
3683
+ r"^/_matrix/client/r0/rooms/.*/messages.*from=s526_47314_0_7_1_1_1_11444_2"
3684
+ . to_string ( ) ,
3685
+ ) ,
3686
+ )
3687
+ . with_status ( 200 )
3688
+ . match_header ( "authorization" , "Bearer 1234" )
3689
+ . create ( ) ;
3690
+
3691
+ let mocked_context =
3692
+ mock ( "GET" , Matcher :: Regex ( r"^/_matrix/client/r0/rooms/.*/context/.*" . to_string ( ) ) )
3693
+ . with_status ( 200 )
3694
+ . with_body ( test_json:: CONTEXT_MESSAGE . to_string ( ) )
3695
+ . match_header ( "authorization" , "Bearer 1234" )
3696
+ . create ( ) ;
3697
+
3698
+ let sync_settings = SyncSettings :: new ( ) . timeout ( Duration :: from_millis ( 3000 ) ) ;
3699
+
3700
+ let _ = client. sync_once ( sync_settings) . await . unwrap ( ) ;
3701
+
3702
+ let room = client. get_joined_room ( & room_id) . unwrap ( ) ;
3703
+
3704
+ // Try to get the full timeline
3705
+ let events = room. messages ( None , None , 3 , Direction :: Forward ) . await . unwrap ( ) . unwrap ( ) ;
3706
+
3707
+ assert_eq ! ( events. len( ) , 0 ) ;
3708
+
3709
+ let events = room. messages ( None , None , 3 , Direction :: Backward ) . await . unwrap ( ) . unwrap ( ) ;
3710
+
3711
+ let expected_events = [
3712
+ event_id ! ( "$098237280074GZeOm:localhost" ) ,
3713
+ event_id ! ( "$15275047031IXQRi:localhost" ) ,
3714
+ event_id ! ( "$15275046980maRLj:localhost" ) ,
3715
+ ] ;
3716
+
3717
+ assert_eq ! ( events. len( ) , expected_events. len( ) ) ;
3718
+ assert ! ( events
3719
+ . iter( )
3720
+ . map( |event| event. event_id( ) )
3721
+ . zip( & expected_events)
3722
+ . all( |( a, b) | a. as_ref( ) . unwrap( ) == b) ) ;
3723
+
3724
+ // Try to get the timeline starting at an event not known to the store.
3725
+ let events = room
3726
+ . messages ( Some ( & event_id ! ( "$f3h4d129462ha:example.com" ) ) , None , 3 , Direction :: Backward )
3727
+ . await
3728
+ . unwrap ( )
3729
+ . unwrap ( ) ;
3730
+
3731
+ let expected_events = [
3732
+ event_id ! ( "$f3h4d129462ha:example.com" ) ,
3733
+ event_id ! ( "$143273582443PhrSnbefore1:example.org" ) ,
3734
+ event_id ! ( "$143273582443PhrSnbefore2:example.org" ) ,
3735
+ ] ;
3736
+
3737
+ assert_eq ! ( events. len( ) , expected_events. len( ) ) ;
3738
+ assert ! ( events
3739
+ . iter( )
3740
+ . map( |event| event. event_id( ) )
3741
+ . zip( & expected_events)
3742
+ . all( |( a, b) | a. as_ref( ) . unwrap( ) == b) ) ;
3743
+
3744
+ mocked_context. assert ( ) ;
3745
+
3746
+ let expected_events = [
3747
+ event_id ! ( "$152037280074GZeOm:localhost" ) ,
3748
+ event_id ! ( "$1444812213350496Caaaf:example.com" ) ,
3749
+ event_id ! ( "$1444812213350496Cbbbf:example.com" ) ,
3750
+ event_id ! ( "$1444812213350496Ccccf:example.com" ) ,
3751
+ ] ;
3752
+
3753
+ let events = room
3754
+ . messages (
3755
+ Some ( & event_id ! ( "$152037280074GZeOm:localhost" ) ) ,
3756
+ None ,
3757
+ expected_events. len ( ) as u32 ,
3758
+ Direction :: Backward ,
3759
+ )
3760
+ . await
3761
+ . unwrap ( )
3762
+ . unwrap ( ) ;
3763
+
3764
+ assert_eq ! ( events. len( ) , expected_events. len( ) ) ;
3765
+ assert ! ( events
3766
+ . iter( )
3767
+ . map( |event| event. event_id( ) )
3768
+ . zip( & expected_events)
3769
+ . all( |( a, b) | a. as_ref( ) . unwrap( ) == b) ) ;
3770
+
3771
+ let events = room
3772
+ . messages (
3773
+ Some ( & event_id ! ( "$1444812213350496Ccccf:example.com" ) ) ,
3774
+ None ,
3775
+ expected_events. len ( ) as u32 ,
3776
+ Direction :: Forward ,
3777
+ )
3778
+ . await
3779
+ . unwrap ( )
3780
+ . unwrap ( ) ;
3781
+
3782
+ assert_eq ! ( events. len( ) , expected_events. len( ) ) ;
3783
+ assert ! ( events
3784
+ . iter( )
3785
+ . rev( )
3786
+ . map( |event| event. event_id( ) )
3787
+ . zip( & expected_events)
3788
+ . all( |( a, b) | a. as_ref( ) . unwrap( ) == b) ) ;
3789
+
3790
+ let end_event = event_id ! ( "$1444812213350496Cbbbf:example.com" ) ;
3791
+ let events = room
3792
+ . messages (
3793
+ Some ( & event_id ! ( "$152037280074GZeOm:localhost" ) ) ,
3794
+ Some ( & end_event) ,
3795
+ expected_events. len ( ) as u32 ,
3796
+ Direction :: Backward ,
3797
+ )
3798
+ . await
3799
+ . unwrap ( )
3800
+ . unwrap ( ) ;
3801
+
3802
+ assert_eq ! ( events. len( ) , 3 ) ;
3803
+ assert_eq ! ( events. last( ) . unwrap( ) . event_id( ) . unwrap( ) , end_event) ;
3804
+ assert ! ( events
3805
+ . iter( )
3806
+ . map( |event| event. event_id( ) )
3807
+ . zip( & expected_events[ 0 ..4 ] )
3808
+ . any( |( a, b) | a. as_ref( ) . unwrap( ) == b) ) ;
3809
+
3810
+ let end_event = event_id ! ( "$1444812213350496Cbbbf:example.com" ) ;
3811
+ let events = room
3812
+ . messages (
3813
+ Some ( & event_id ! ( "$1444812213350496Ccccf:example.com" ) ) ,
3814
+ Some ( & end_event) ,
3815
+ expected_events. len ( ) as u32 ,
3816
+ Direction :: Forward ,
3817
+ )
3818
+ . await
3819
+ . unwrap ( )
3820
+ . unwrap ( ) ;
3821
+
3822
+ assert_eq ! ( events. len( ) , 2 ) ;
3823
+ assert_eq ! ( events. last( ) . unwrap( ) . event_id( ) . unwrap( ) , end_event) ;
3824
+ assert ! ( events
3825
+ . iter( )
3826
+ . rev( )
3827
+ . map( |event| event. event_id( ) )
3828
+ . zip( & expected_events[ 2 ..] )
3829
+ . all( |( a, b) | a. as_ref( ) . unwrap( ) == b) ) ;
3830
+
3831
+ mocked_messages. assert ( ) ;
3832
+ }
3653
3833
}
0 commit comments