@@ -29,13 +29,14 @@ import { WidgetApiDirection } from '../src/interfaces/WidgetApiDirection';
2929import { Widget } from '../src/models/Widget' ;
3030import { PostmessageTransport } from '../src/transport/PostmessageTransport' ;
3131import {
32+ IDownloadFileActionFromWidgetActionRequest ,
3233 IReadEventFromWidgetActionRequest ,
3334 ISendEventFromWidgetActionRequest ,
3435 IUpdateDelayedEventFromWidgetActionRequest ,
36+ IUploadFileActionFromWidgetActionRequest ,
3537 UpdateDelayedEventAction ,
3638} from '../src' ;
3739import { IGetMediaConfigActionFromWidgetActionRequest } from '../src/interfaces/GetMediaConfigAction' ;
38- import { IUploadFileActionFromWidgetActionRequest } from '../src/interfaces/UploadFileAction' ;
3940
4041jest . mock ( '../src/transport/PostmessageTransport' )
4142
@@ -91,6 +92,7 @@ describe('ClientWidgetApi', () => {
9192 searchUserDirectory : jest . fn ( ) ,
9293 getMediaConfig : jest . fn ( ) ,
9394 uploadFile : jest . fn ( ) ,
95+ downloadFile : jest . fn ( ) ,
9496 } as Partial < WidgetDriver > as jest . Mocked < WidgetDriver > ;
9597
9698 clientWidgetApi = new ClientWidgetApi (
@@ -1083,7 +1085,7 @@ describe('ClientWidgetApi', () => {
10831085 } ) ;
10841086 } ) ;
10851087
1086- describe ( 'org.matrix.msc4039.upload_file action ' , ( ) => {
1088+ describe ( 'MSC4039 ' , ( ) => {
10871089 it ( 'should present as supported api version' , ( ) => {
10881090 const event : ISupportedVersionsActionRequest = {
10891091 api : WidgetApiDirection . FromWidget ,
@@ -1101,7 +1103,9 @@ describe('ClientWidgetApi', () => {
11011103 ] ) ,
11021104 } ) ;
11031105 } ) ;
1106+ } ) ;
11041107
1108+ describe ( 'org.matrix.msc4039.upload_file action' , ( ) => {
11051109 it ( 'should handle and process the request' , async ( ) => {
11061110 driver . uploadFile . mockResolvedValue ( {
11071111 contentUri : 'mxc://...' ,
@@ -1180,4 +1184,84 @@ describe('ClientWidgetApi', () => {
11801184 } ) ;
11811185 } ) ;
11821186 } ) ;
1187+
1188+ describe ( 'org.matrix.msc4039.download_file action' , ( ) => {
1189+ it ( 'should handle and process the request' , async ( ) => {
1190+ driver . downloadFile . mockResolvedValue ( {
1191+ file : 'test contents' ,
1192+ } ) ;
1193+
1194+ const event : IDownloadFileActionFromWidgetActionRequest = {
1195+ api : WidgetApiDirection . FromWidget ,
1196+ widgetId : 'test' ,
1197+ requestId : '0' ,
1198+ action : WidgetApiFromWidgetAction . MSC4039DownloadFileAction ,
1199+ data : {
1200+ content_uri : 'mxc://example.com/test_file' ,
1201+ } ,
1202+ } ;
1203+
1204+ await loadIframe ( [
1205+ 'org.matrix.msc4039.download_file' ,
1206+ ] ) ;
1207+
1208+ emitEvent ( new CustomEvent ( '' , { detail : event } ) ) ;
1209+
1210+ await waitFor ( ( ) => {
1211+ expect ( transport . reply ) . toHaveBeenCalledWith ( event , {
1212+ file : 'test contents' ,
1213+ } ) ;
1214+ } ) ;
1215+
1216+ expect ( driver . downloadFile ) . toHaveBeenCalledWith ( 'mxc://example.com/test_file' ) ;
1217+ } ) ;
1218+
1219+ it ( 'should reject requests when the capability was not requested' , async ( ) => {
1220+ const event : IDownloadFileActionFromWidgetActionRequest = {
1221+ api : WidgetApiDirection . FromWidget ,
1222+ widgetId : 'test' ,
1223+ requestId : '0' ,
1224+ action : WidgetApiFromWidgetAction . MSC4039DownloadFileAction ,
1225+ data : {
1226+ content_uri : 'mxc://example.com/test_file' ,
1227+ } ,
1228+ } ;
1229+
1230+ emitEvent ( new CustomEvent ( '' , { detail : event } ) ) ;
1231+
1232+ expect ( transport . reply ) . toBeCalledWith ( event , {
1233+ error : { message : 'Missing capability' } ,
1234+ } ) ;
1235+
1236+ expect ( driver . uploadFile ) . not . toBeCalled ( ) ;
1237+ } ) ;
1238+
1239+ it ( 'should reject requests when the driver throws an exception' , async ( ) => {
1240+ driver . getMediaConfig . mockRejectedValue (
1241+ new Error ( "M_LIMIT_EXCEEDED: Too many requests" ) ,
1242+ ) ;
1243+
1244+ const event : IDownloadFileActionFromWidgetActionRequest = {
1245+ api : WidgetApiDirection . FromWidget ,
1246+ widgetId : 'test' ,
1247+ requestId : '0' ,
1248+ action : WidgetApiFromWidgetAction . MSC4039DownloadFileAction ,
1249+ data : {
1250+ content_uri : 'mxc://example.com/test_file' ,
1251+ } ,
1252+ } ;
1253+
1254+ await loadIframe ( [
1255+ 'org.matrix.msc4039.download_file' ,
1256+ ] ) ;
1257+
1258+ emitEvent ( new CustomEvent ( '' , { detail : event } ) ) ;
1259+
1260+ await waitFor ( ( ) => {
1261+ expect ( transport . reply ) . toBeCalledWith ( event , {
1262+ error : { message : 'Unexpected error while downloading a file' } ,
1263+ } ) ;
1264+ } ) ;
1265+ } ) ;
1266+ } ) ;
11831267} ) ;
0 commit comments