@@ -111,29 +111,67 @@ describe('fileUploadStore', () => {
111111 lastModified : Date . UTC ( 2021 , 3 , 25 , 15 , 30 , 0 ) ,
112112 } ,
113113 ]
114+ const localUrls = [ 'local-url:pngimage.png' , 'local-url:jpgimage.jpg' , 'icon-url:text/plain' ]
115+
114116 await store . dispatch ( 'initialiseUpload' , {
115117 uploadId : 'upload-id1' ,
116118 token : 'XXTOKENXX' ,
117119 files,
118120 } )
119121
120122 const uploads = store . getters . getInitialisedUploads ( 'upload-id1' )
121- expect ( Object . keys ( uploads ) . length ) . toBe ( 3 )
122-
123- for ( let i = 0 ; i < files . length ; i ++ ) {
124- expect ( mockedActions . createTemporaryMessage . mock . calls [ i ] [ 1 ] . text ) . toBe ( '{file}' )
125- expect ( mockedActions . createTemporaryMessage . mock . calls [ i ] [ 1 ] . uploadId ) . toBe ( 'upload-id1' )
126- expect ( mockedActions . createTemporaryMessage . mock . calls [ i ] [ 1 ] . index ) . toBeDefined ( )
127- expect ( mockedActions . createTemporaryMessage . mock . calls [ i ] [ 1 ] . file ) . toBe ( files [ i ] )
128- expect ( mockedActions . createTemporaryMessage . mock . calls [ i ] [ 1 ] . token ) . toBe ( 'XXTOKENXX' )
123+ expect ( uploads ) . toHaveLength ( files . length )
124+
125+ for ( const index in files ) {
126+ expect ( mockedActions . createTemporaryMessage . mock . calls [ index ] [ 1 ] ) . toMatchObject ( {
127+ text : '{file}' ,
128+ token : 'XXTOKENXX' ,
129+ uploadId : 'upload-id1' ,
130+ index : expect . anything ( ) ,
131+ file : files [ index ] ,
132+ localUrl : localUrls [ index ] ,
133+ } )
134+ }
135+ } )
136+
137+ test ( 'performs upload and sharing of single file' , async ( ) => {
138+ const file = {
139+ name : 'pngimage.png' ,
140+ type : 'image/png' ,
141+ size : 123 ,
142+ lastModified : Date . UTC ( 2021 , 3 , 27 , 15 , 30 , 0 ) ,
129143 }
144+ const fileBuffer = await new Blob ( [ file ] ) . arrayBuffer ( )
145+
146+ await store . dispatch ( 'initialiseUpload' , {
147+ uploadId : 'upload-id1' ,
148+ token : 'XXTOKENXX' ,
149+ files : [ file ] ,
150+ } )
151+
152+ expect ( store . getters . currentUploadId ) . toBe ( 'upload-id1' )
130153
131- expect ( mockedActions . createTemporaryMessage . mock . calls [ 0 ] [ 1 ] . localUrl ) . toBe ( 'local-url:pngimage.png' )
132- expect ( mockedActions . createTemporaryMessage . mock . calls [ 1 ] [ 1 ] . localUrl ) . toBe ( 'local-url:jpgimage.jpg' )
133- expect ( mockedActions . createTemporaryMessage . mock . calls [ 2 ] [ 1 ] . localUrl ) . toBe ( 'icon-url:text/plain' )
154+ const uniqueFileName = '/Talk/' + file . name + 'uniq'
155+ findUniquePath . mockResolvedValueOnce ( uniqueFileName )
156+ client . putFileContents . mockResolvedValue ( )
157+ shareFile . mockResolvedValue ( )
158+
159+ await store . dispatch ( 'uploadFiles' , { uploadId : 'upload-id1' , caption : 'text-caption' } )
160+
161+ expect ( findUniquePath ) . toHaveBeenCalledTimes ( 1 )
162+ expect ( findUniquePath ) . toHaveBeenCalledWith ( client , '/files/current-user' , '/Talk/' + file . name )
163+
164+ expect ( client . putFileContents ) . toHaveBeenCalledTimes ( 1 )
165+ expect ( client . putFileContents ) . toHaveBeenCalledWith ( `/files/current-user${ uniqueFileName } ` , fileBuffer , expect . anything ( ) )
166+
167+ expect ( shareFile ) . toHaveBeenCalledTimes ( 1 )
168+ expect ( shareFile ) . toHaveBeenCalledWith ( `/${ uniqueFileName } ` , 'XXTOKENXX' , 'reference-id-1' , '{"caption":"text-caption"}' )
169+
170+ expect ( mockedActions . addTemporaryMessage ) . toHaveBeenCalledTimes ( 1 )
171+ expect ( store . getters . currentUploadId ) . not . toBeDefined ( )
134172 } )
135173
136- test ( 'performs upload by uploading then sharing ' , async ( ) => {
174+ test ( 'performs upload and sharing of multiple files ' , async ( ) => {
137175 const file1 = {
138176 name : 'pngimage.png' ,
139177 type : 'image/png' ,
@@ -164,23 +202,25 @@ describe('fileUploadStore', () => {
164202 . mockResolvedValueOnce ( '/Talk/' + files [ 0 ] . name + 'uniq' )
165203 . mockResolvedValueOnce ( '/Talk/' + files [ 1 ] . name + 'uniq' )
166204 client . putFileContents . mockResolvedValue ( )
167- shareFile . mockResolvedValue ( )
205+ shareFile
206+ . mockResolvedValueOnce ( { data : { ocs : { data : { id : '1' } } } } )
207+ . mockResolvedValueOnce ( { data : { ocs : { data : { id : '2' } } } } )
168208
169- await store . dispatch ( 'uploadFiles' , 'upload-id1' )
209+ await store . dispatch ( 'uploadFiles' , { uploadId : 'upload-id1' , caption : 'text-caption' } )
170210
211+ expect ( findUniquePath ) . toHaveBeenCalledTimes ( 2 )
171212 expect ( client . putFileContents ) . toHaveBeenCalledTimes ( 2 )
172213 expect ( shareFile ) . toHaveBeenCalledTimes ( 2 )
173214
174- for ( let i = 0 ; i < files . length ; i ++ ) {
175- expect ( findUniquePath ) . toHaveBeenCalledWith ( client , '/files/current-user' , '/Talk/' + files [ i ] . name )
176- expect ( client . putFileContents . mock . calls [ i ] [ 0 ] ) . toBe ( '/files/current-user/Talk/' + files [ i ] . name + 'uniq' )
177- expect ( client . putFileContents . mock . calls [ i ] [ 1 ] ) . toStrictEqual ( fileBuffers [ i ] )
178-
179- expect ( shareFile . mock . calls [ i ] [ 0 ] ) . toBe ( '//Talk/' + files [ i ] . name + 'uniq' )
180- expect ( shareFile . mock . calls [ i ] [ 1 ] ) . toBe ( 'XXTOKENXX' )
181- expect ( shareFile . mock . calls [ i ] [ 2 ] ) . toBe ( 'reference-id-' + ( i + 1 ) )
215+ for ( const index in files ) {
216+ expect ( findUniquePath ) . toHaveBeenCalledWith ( client , '/files/current-user' , '/Talk/' + files [ index ] . name )
217+ expect ( client . putFileContents ) . toHaveBeenCalledWith ( `/files/current-user/Talk/${ files [ index ] . name } uniq` , fileBuffers [ index ] , expect . anything ( ) )
182218 }
183219
220+ expect ( shareFile ) . toHaveBeenCalledTimes ( 2 )
221+ expect ( shareFile ) . toHaveBeenNthCalledWith ( 1 , '//Talk/' + files [ 0 ] . name + 'uniq' , 'XXTOKENXX' , 'reference-id-1' , '{}' )
222+ expect ( shareFile ) . toHaveBeenNthCalledWith ( 2 , '//Talk/' + files [ 1 ] . name + 'uniq' , 'XXTOKENXX' , 'reference-id-2' , '{"caption":"text-caption"}' )
223+
184224 expect ( mockedActions . addTemporaryMessage ) . toHaveBeenCalledTimes ( 2 )
185225 expect ( store . getters . currentUploadId ) . not . toBeDefined ( )
186226 } )
@@ -209,7 +249,7 @@ describe('fileUploadStore', () => {
209249 } ,
210250 } )
211251
212- await store . dispatch ( 'uploadFiles' , 'upload-id1' )
252+ await store . dispatch ( 'uploadFiles' , { uploadId : 'upload-id1' } )
213253
214254 expect ( client . putFileContents ) . toHaveBeenCalledTimes ( 1 )
215255 expect ( shareFile ) . not . toHaveBeenCalled ( )
@@ -247,7 +287,7 @@ describe('fileUploadStore', () => {
247287 } ,
248288 } )
249289
250- await store . dispatch ( 'uploadFiles' , 'upload-id1' )
290+ await store . dispatch ( 'uploadFiles' , { uploadId : 'upload-id1' } )
251291
252292 expect ( client . putFileContents ) . toHaveBeenCalledTimes ( 1 )
253293 expect ( shareFile ) . toHaveBeenCalledTimes ( 1 )
@@ -286,9 +326,9 @@ describe('fileUploadStore', () => {
286326 await store . dispatch ( 'removeFileFromSelection' , 2 )
287327
288328 const uploads = store . getters . getInitialisedUploads ( 'upload-id1' )
289- expect ( Object . keys ( uploads ) . length ) . toBe ( 1 )
329+ expect ( uploads ) . toHaveLength ( 1 )
290330
291- expect ( Object . values ( uploads ) [ 0 ] . file ) . toBe ( files [ 0 ] )
331+ expect ( uploads [ 0 ] [ 1 ] . file ) . toBe ( files [ 0 ] )
292332 } )
293333
294334 test ( 'discard an entire upload' , async ( ) => {
@@ -316,7 +356,7 @@ describe('fileUploadStore', () => {
316356 await store . dispatch ( 'discardUpload' , 'upload-id1' )
317357
318358 const uploads = store . getters . getInitialisedUploads ( 'upload-id1' )
319- expect ( uploads ) . toStrictEqual ( { } )
359+ expect ( uploads ) . toStrictEqual ( [ ] )
320360
321361 expect ( store . getters . currentUploadId ) . not . toBeDefined ( )
322362 } )
0 commit comments