@@ -600,6 +600,117 @@ async fn send_room_name() {
600600 mock_server. verify ( ) . await ;
601601}
602602
603+ #[ async_test]
604+ async fn send_future_room_message ( ) {
605+ let ( _, mock_server, driver_handle) = run_test_driver ( false ) . await ;
606+
607+ // let a= "{\"action\":\"send_event\",\"api\":\"fromWidget\",\"data\":{\"content\":{\"body\":\"Message from a widget!\",\"msgtype\":\"m.text\"},\"type\":\"m.room.message\"},\"future_timeout\":1000,\"requestId\":\"send-room-message\",\"widgetId\":\"test-widget\"}";
608+
609+ negotiate_capabilities ( & driver_handle, json ! ( [ "org.matrix.msc2762.send.event:m.room.message" ] ) )
610+ . await ;
611+
612+ Mock :: given ( method ( "PUT" ) )
613+ . and ( path_regex (
614+ r"^/_matrix/client/unstable/org.matrix.msc4140/rooms/.*/send_future/m.room.message/.*$" ,
615+ ) )
616+ . respond_with ( ResponseTemplate :: new ( 200 ) . set_body_json ( json ! ( {
617+ "future_group_id" : "1234" ,
618+ "send_token" : "my_send_token" ,
619+ "refresh_token" : "my_refresh_token" ,
620+ "cancel_token" : "my_cancel_token"
621+ } ) ) )
622+ . expect ( 1 )
623+ . mount ( & mock_server)
624+ . await ;
625+
626+ send_request (
627+ & driver_handle,
628+ "send-room-message" ,
629+ "send_event" ,
630+ json ! ( {
631+ "type" : "m.room.message" ,
632+ "content" : {
633+ "msgtype" : "m.text" ,
634+ "body" : "Message from a widget!" ,
635+ } ,
636+ "future_timeout" : 1000 ,
637+ } ) ,
638+ )
639+ . await ;
640+
641+ // Receive the response
642+ let msg = recv_message ( & driver_handle) . await ;
643+ assert_eq ! ( msg[ "api" ] , "fromWidget" ) ;
644+ assert_eq ! ( msg[ "action" ] , "send_event" ) ;
645+ let future_group_id = msg[ "response" ] [ "future_group_id" ] . as_str ( ) . unwrap ( ) ;
646+ assert_eq ! ( future_group_id, "1234" ) ;
647+ let cancel_token = msg[ "response" ] [ "cancel_token" ] . as_str ( ) . unwrap ( ) ;
648+ assert_eq ! ( cancel_token, "my_cancel_token" ) ;
649+ let refresh_token = msg[ "response" ] [ "refresh_token" ] . as_str ( ) . unwrap ( ) ;
650+ assert_eq ! ( refresh_token, "my_refresh_token" ) ;
651+ let send_token = msg[ "response" ] [ "send_token" ] . as_str ( ) . unwrap ( ) ;
652+ assert_eq ! ( send_token, "my_send_token" ) ;
653+
654+ // Make sure the event-sending endpoint was hit exactly once
655+ mock_server. verify ( ) . await ;
656+ }
657+
658+ #[ async_test]
659+ async fn send_future_state ( ) {
660+ let ( _, mock_server, driver_handle) = run_test_driver ( false ) . await ;
661+
662+ negotiate_capabilities (
663+ & driver_handle,
664+ json ! ( [ "org.matrix.msc2762.send.state_event:m.room.name#" ] ) ,
665+ )
666+ . await ;
667+
668+ Mock :: given ( method ( "PUT" ) )
669+ . and ( path_regex (
670+ r"^/_matrix/client/unstable/org.matrix.msc4140/rooms/.*/state_future/m.room.name/?$" ,
671+ ) )
672+ . respond_with ( ResponseTemplate :: new ( 200 ) . set_body_json ( json ! ( {
673+ "future_group_id" : "1234" ,
674+ "send_token" : "my_send_token" ,
675+ "refresh_token" : "my_refresh_token" ,
676+ "cancel_token" : "my_cancel_token"
677+ } ) ) )
678+ . expect ( 1 )
679+ . mount ( & mock_server)
680+ . await ;
681+
682+ send_request (
683+ & driver_handle,
684+ "send-room-message" ,
685+ "send_event" ,
686+ json ! ( {
687+ "type" : "m.room.name" ,
688+ "state_key" : "" ,
689+ "content" : {
690+ "name" : "Room Name set by Widget" ,
691+ } ,
692+ "future_timeout" : 1000 ,
693+ } ) ,
694+ )
695+ . await ;
696+
697+ // Receive the response
698+ let msg = recv_message ( & driver_handle) . await ;
699+ assert_eq ! ( msg[ "api" ] , "fromWidget" ) ;
700+ assert_eq ! ( msg[ "action" ] , "send_event" ) ;
701+ let future_group_id = msg[ "response" ] [ "future_group_id" ] . as_str ( ) . unwrap ( ) ;
702+ assert_eq ! ( future_group_id, "1234" ) ;
703+ let cancel_token = msg[ "response" ] [ "cancel_token" ] . as_str ( ) . unwrap ( ) ;
704+ assert_eq ! ( cancel_token, "my_cancel_token" ) ;
705+ let refresh_token = msg[ "response" ] [ "refresh_token" ] . as_str ( ) . unwrap ( ) ;
706+ assert_eq ! ( refresh_token, "my_refresh_token" ) ;
707+ let send_token = msg[ "response" ] [ "send_token" ] . as_str ( ) . unwrap ( ) ;
708+ assert_eq ! ( send_token, "my_send_token" ) ;
709+
710+ // Make sure the event-sending endpoint was hit exactly once
711+ mock_server. verify ( ) . await ;
712+ }
713+
603714async fn negotiate_capabilities ( driver_handle : & WidgetDriverHandle , caps : JsonValue ) {
604715 {
605716 // Receive toWidget capabilities request
0 commit comments