@@ -128,7 +128,9 @@ describe("ClientWidgetApi", () => {
128128 readEventRelations : jest . fn ( ) ,
129129 sendEvent : jest . fn ( ) ,
130130 sendDelayedEvent : jest . fn ( ) ,
131- updateDelayedEvent : jest . fn ( ) ,
131+ cancelScheduledDelayedEvent : jest . fn ( ) ,
132+ restartScheduledDelayedEvent : jest . fn ( ) ,
133+ sendScheduledDelayedEvent : jest . fn ( ) ,
132134 sendToDevice : jest . fn ( ) ,
133135 askOpenID : jest . fn ( ) ,
134136 readRoomAccountData : jest . fn ( ) ,
@@ -903,7 +905,57 @@ describe("ClientWidgetApi", () => {
903905 } ) ;
904906
905907 describe ( "update_delayed_event action" , ( ) => {
906- it ( "fails to update delayed events" , async ( ) => {
908+ it ( "fails to cancel delayed events" , async ( ) => {
909+ const event : IUpdateDelayedEventFromWidgetActionRequest = {
910+ api : WidgetApiDirection . FromWidget ,
911+ widgetId : "test" ,
912+ requestId : "0" ,
913+ action : WidgetApiFromWidgetAction . MSC4157UpdateDelayedEvent ,
914+ data : {
915+ delay_id : "f" ,
916+ action : UpdateDelayedEventAction . Cancel ,
917+ } ,
918+ } ;
919+
920+ await loadIframe ( [ ] ) ; // Without the required capability
921+
922+ emitEvent ( new CustomEvent ( "" , { detail : event } ) ) ;
923+
924+ await waitFor ( ( ) => {
925+ expect ( transport . reply ) . toBeCalledWith ( event , {
926+ error : { message : expect . any ( String ) } ,
927+ } ) ;
928+ } ) ;
929+
930+ expect ( driver . cancelScheduledDelayedEvent ) . not . toBeCalled ( ) ;
931+ } ) ;
932+
933+ it ( "fails to restart delayed events" , async ( ) => {
934+ const event : IUpdateDelayedEventFromWidgetActionRequest = {
935+ api : WidgetApiDirection . FromWidget ,
936+ widgetId : "test" ,
937+ requestId : "0" ,
938+ action : WidgetApiFromWidgetAction . MSC4157UpdateDelayedEvent ,
939+ data : {
940+ delay_id : "f" ,
941+ action : UpdateDelayedEventAction . Restart ,
942+ } ,
943+ } ;
944+
945+ await loadIframe ( [ ] ) ; // Without the required capability
946+
947+ emitEvent ( new CustomEvent ( "" , { detail : event } ) ) ;
948+
949+ await waitFor ( ( ) => {
950+ expect ( transport . reply ) . toBeCalledWith ( event , {
951+ error : { message : expect . any ( String ) } ,
952+ } ) ;
953+ } ) ;
954+
955+ expect ( driver . restartScheduledDelayedEvent ) . not . toBeCalled ( ) ;
956+ } ) ;
957+
958+ it ( "fails to send delayed events" , async ( ) => {
907959 const event : IUpdateDelayedEventFromWidgetActionRequest = {
908960 api : WidgetApiDirection . FromWidget ,
909961 widgetId : "test" ,
@@ -925,7 +977,7 @@ describe("ClientWidgetApi", () => {
925977 } ) ;
926978 } ) ;
927979
928- expect ( driver . updateDelayedEvent ) . not . toBeCalled ( ) ;
980+ expect ( driver . sendScheduledDelayedEvent ) . not . toBeCalled ( ) ;
929981 } ) ;
930982
931983 it ( "fails to update delayed events with unsupported action" , async ( ) => {
@@ -950,42 +1002,88 @@ describe("ClientWidgetApi", () => {
9501002 } ) ;
9511003 } ) ;
9521004
953- expect ( driver . updateDelayedEvent ) . not . toBeCalled ( ) ;
1005+ expect ( driver . cancelScheduledDelayedEvent ) . not . toBeCalled ( ) ;
1006+ expect ( driver . restartScheduledDelayedEvent ) . not . toBeCalled ( ) ;
1007+ expect ( driver . sendScheduledDelayedEvent ) . not . toBeCalled ( ) ;
9541008 } ) ;
9551009
956- it ( "updates delayed events" , async ( ) => {
957- driver . updateDelayedEvent . mockResolvedValue ( undefined ) ;
1010+ it ( "can cancel delayed events" , async ( ) => {
1011+ driver . cancelScheduledDelayedEvent . mockResolvedValue ( undefined ) ;
9581012
959- for ( const action of [
960- UpdateDelayedEventAction . Cancel ,
961- UpdateDelayedEventAction . Restart ,
962- UpdateDelayedEventAction . Send ,
963- ] ) {
964- const event : IUpdateDelayedEventFromWidgetActionRequest = {
965- api : WidgetApiDirection . FromWidget ,
966- widgetId : "test" ,
967- requestId : "0" ,
968- action : WidgetApiFromWidgetAction . MSC4157UpdateDelayedEvent ,
969- data : {
970- delay_id : "f" ,
971- action,
972- } ,
973- } ;
1013+ const event : IUpdateDelayedEventFromWidgetActionRequest = {
1014+ api : WidgetApiDirection . FromWidget ,
1015+ widgetId : "test" ,
1016+ requestId : "0" ,
1017+ action : WidgetApiFromWidgetAction . MSC4157UpdateDelayedEvent ,
1018+ data : {
1019+ delay_id : "f" ,
1020+ action : UpdateDelayedEventAction . Cancel ,
1021+ } ,
1022+ } ;
9741023
975- await loadIframe ( [ "org.matrix.msc4157.update_delayed_event" ] ) ;
1024+ await loadIframe ( [ "org.matrix.msc4157.update_delayed_event" ] ) ;
9761025
977- emitEvent ( new CustomEvent ( "" , { detail : event } ) ) ;
1026+ emitEvent ( new CustomEvent ( "" , { detail : event } ) ) ;
9781027
979- await waitFor ( ( ) => {
980- expect ( transport . reply ) . toHaveBeenCalledWith ( event , { } ) ;
981- } ) ;
1028+ await waitFor ( ( ) => {
1029+ expect ( transport . reply ) . toHaveBeenCalledWith ( event , { } ) ;
1030+ } ) ;
1031+
1032+ expect ( driver . cancelScheduledDelayedEvent ) . toHaveBeenCalledWith ( event . data . delay_id ) ;
1033+ } ) ;
1034+
1035+ it ( "can restart delayed events" , async ( ) => {
1036+ driver . restartScheduledDelayedEvent . mockResolvedValue ( undefined ) ;
1037+
1038+ const event : IUpdateDelayedEventFromWidgetActionRequest = {
1039+ api : WidgetApiDirection . FromWidget ,
1040+ widgetId : "test" ,
1041+ requestId : "0" ,
1042+ action : WidgetApiFromWidgetAction . MSC4157UpdateDelayedEvent ,
1043+ data : {
1044+ delay_id : "f" ,
1045+ action : UpdateDelayedEventAction . Restart ,
1046+ } ,
1047+ } ;
1048+
1049+ await loadIframe ( [ "org.matrix.msc4157.update_delayed_event" ] ) ;
1050+
1051+ emitEvent ( new CustomEvent ( "" , { detail : event } ) ) ;
1052+
1053+ await waitFor ( ( ) => {
1054+ expect ( transport . reply ) . toHaveBeenCalledWith ( event , { } ) ;
1055+ } ) ;
1056+
1057+ expect ( driver . restartScheduledDelayedEvent ) . toHaveBeenCalledWith ( event . data . delay_id ) ;
1058+ } ) ;
1059+
1060+ it ( "can send delayed events" , async ( ) => {
1061+ driver . sendScheduledDelayedEvent . mockResolvedValue ( undefined ) ;
1062+
1063+ const event : IUpdateDelayedEventFromWidgetActionRequest = {
1064+ api : WidgetApiDirection . FromWidget ,
1065+ widgetId : "test" ,
1066+ requestId : "0" ,
1067+ action : WidgetApiFromWidgetAction . MSC4157UpdateDelayedEvent ,
1068+ data : {
1069+ delay_id : "f" ,
1070+ action : UpdateDelayedEventAction . Send ,
1071+ } ,
1072+ } ;
1073+
1074+ await loadIframe ( [ "org.matrix.msc4157.update_delayed_event" ] ) ;
1075+
1076+ emitEvent ( new CustomEvent ( "" , { detail : event } ) ) ;
1077+
1078+ await waitFor ( ( ) => {
1079+ expect ( transport . reply ) . toHaveBeenCalledWith ( event , { } ) ;
1080+ } ) ;
9821081
983- expect ( driver . updateDelayedEvent ) . toHaveBeenCalledWith ( event . data . delay_id , event . data . action ) ;
984- }
1082+ expect ( driver . sendScheduledDelayedEvent ) . toHaveBeenCalledWith ( event . data . delay_id ) ;
9851083 } ) ;
9861084
9871085 it ( "should reject requests when the driver throws an exception" , async ( ) => {
988- driver . updateDelayedEvent . mockRejectedValue ( new Error ( "M_BAD_JSON: Content must be a JSON object" ) ) ;
1086+ driver . sendScheduledDelayedEvent . mockRejectedValue ( new Error ( "M_BAD_JSON: Content must be a JSON object" ) ) ;
9891087
9901088 const event : IUpdateDelayedEventFromWidgetActionRequest = {
9911089 api : WidgetApiDirection . FromWidget ,
@@ -1012,7 +1110,7 @@ describe("ClientWidgetApi", () => {
10121110 it ( "should reject with Matrix API error response thrown by driver" , async ( ) => {
10131111 driver . processError . mockImplementation ( processCustomMatrixError ) ;
10141112
1015- driver . updateDelayedEvent . mockRejectedValue (
1113+ driver . sendScheduledDelayedEvent . mockRejectedValue (
10161114 new CustomMatrixError ( "failed to update delayed event" , 400 , "M_NOT_JSON" , {
10171115 reason : "Content must be a JSON object." ,
10181116 } ) ,
0 commit comments