]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - shared/extra-utils/requests/requests.ts
Fix silent 500 after resumable upload
[github/Chocobozzz/PeerTube.git] / shared / extra-utils / requests / requests.ts
index 70f7902222d2fb795fe1670e9c2a6068c61f8daa..501e0b374b949ad613c26090fc768e2a29de0aee 100644 (file)
@@ -1,7 +1,7 @@
 /* eslint-disable @typescript-eslint/no-floating-promises */
 
 import { decode } from 'querystring'
-import * as request from 'supertest'
+import request from 'supertest'
 import { URL } from 'url'
 import { HttpStatusCode } from '@shared/models'
 import { buildAbsoluteFixturePath } from '../miscs/tests'
@@ -29,9 +29,12 @@ function makeRawRequest (url: string, expectedStatus?: HttpStatusCode, range?: s
 
 function makeGetRequest (options: CommonRequestParams & {
   query?: any
+  rawQuery?: string
 }) {
   const req = request(options.url).get(options.path)
-                                  .query(options.query)
+
+  if (options.query) req.query(options.query)
+  if (options.rawQuery) req.query(options.rawQuery)
 
   return buildRequest(req, { contentType: 'application/json', expectedStatus: HttpStatusCode.BAD_REQUEST_400, ...options })
 }
@@ -54,9 +57,15 @@ function makeActivityPubGetRequest (url: string, path: string, expectedStatus =
   })
 }
 
-function makeDeleteRequest (options: CommonRequestParams) {
+function makeDeleteRequest (options: CommonRequestParams & {
+  query?: any
+  rawQuery?: string
+}) {
   const req = request(options.url).delete(options.path)
 
+  if (options.query) req.query(options.query)
+  if (options.rawQuery) req.query(options.rawQuery)
+
   return buildRequest(req, { accept: 'application/json', expectedStatus: HttpStatusCode.BAD_REQUEST_400, ...options })
 }
 
@@ -121,6 +130,20 @@ function unwrapText (test: request.Test): Promise<string> {
   return test.then(res => res.text)
 }
 
+function unwrapBodyOrDecodeToJSON <T> (test: request.Test): Promise<T> {
+  return test.then(res => {
+    if (res.body instanceof Buffer) {
+      return JSON.parse(new TextDecoder().decode(res.body))
+    }
+
+    return res.body
+  })
+}
+
+function unwrapTextOrDecode (test: request.Test): Promise<string> {
+  return test.then(res => res.text || new TextDecoder().decode(res.body))
+}
+
 // ---------------------------------------------------------------------------
 
 export {
@@ -134,6 +157,8 @@ export {
   makeRawRequest,
   makeActivityPubGetRequest,
   unwrapBody,
+  unwrapTextOrDecode,
+  unwrapBodyOrDecodeToJSON,
   unwrapText
 }
 
@@ -169,7 +194,7 @@ function buildFields (req: request.Test, fields: { [ fieldName: string ]: any },
     if (fields[key] === undefined) continue
 
     if (Array.isArray(fields[key]) && fields[key].length === 0) {
-      req.field(key, null)
+      req.field(key, [])
       continue
     }