@@ -354,7 +354,7 @@ describe('testing POST object via multipart upload', () => {
354
354
expect ( S3Backend . prototype . uploadObject ) . toHaveBeenCalled ( )
355
355
} )
356
356
357
- test ( 'successfully uploading an object with custom metadata' , async ( ) => {
357
+ test ( 'successfully uploading an object with custom metadata using form data ' , async ( ) => {
358
358
const form = new FormData ( )
359
359
form . append ( 'file' , fs . createReadStream ( `./src/test/assets/sadcat.jpg` ) )
360
360
form . append (
@@ -395,6 +395,45 @@ describe('testing POST object via multipart upload', () => {
395
395
} )
396
396
} )
397
397
398
+ test ( 'successfully uploading an object with custom metadata using stream' , async ( ) => {
399
+ const file = fs . createReadStream ( `./src/test/assets/sadcat.jpg` )
400
+
401
+ const headers = {
402
+ authorization : `Bearer ${ serviceKey } ` ,
403
+ 'x-upsert' : 'true' ,
404
+ 'x-metadata' : Buffer . from (
405
+ JSON . stringify ( {
406
+ test1 : 'test1' ,
407
+ test2 : 'test2' ,
408
+ } )
409
+ ) . toString ( 'base64' ) ,
410
+ }
411
+
412
+ const response = await app ( ) . inject ( {
413
+ method : 'POST' ,
414
+ url : '/object/bucket2/sadcat-upload3018.png' ,
415
+ headers,
416
+ payload : file ,
417
+ } )
418
+ expect ( response . statusCode ) . toBe ( 200 )
419
+ expect ( S3Backend . prototype . uploadObject ) . toHaveBeenCalled ( )
420
+
421
+ const client = await getSuperuserPostgrestClient ( )
422
+
423
+ const object = await client
424
+ . table ( 'objects' )
425
+ . select ( '*' )
426
+ . where ( 'name' , 'sadcat-upload3018.png' )
427
+ . where ( 'bucket_id' , 'bucket2' )
428
+ . first ( )
429
+
430
+ expect ( object ) . not . toBeFalsy ( )
431
+ expect ( object ?. user_metadata ) . toEqual ( {
432
+ test1 : 'test1' ,
433
+ test2 : 'test2' ,
434
+ } )
435
+ } )
436
+
398
437
test ( 'fetch object metadata' , async ( ) => {
399
438
const form = new FormData ( )
400
439
form . append ( 'file' , fs . createReadStream ( `./src/test/assets/sadcat.jpg` ) )
@@ -2121,7 +2160,7 @@ describe('testing list objects', () => {
2121
2160
} )
2122
2161
expect ( response . statusCode ) . toBe ( 200 )
2123
2162
const responseJSON = JSON . parse ( response . body )
2124
- expect ( responseJSON ) . toHaveLength ( 8 )
2163
+ expect ( responseJSON ) . toHaveLength ( 9 )
2125
2164
const names = responseJSON . map ( ( ele : any ) => ele . name )
2126
2165
expect ( names ) . toContain ( 'curlimage.jpg' )
2127
2166
expect ( names ) . toContain ( 'private' )
0 commit comments