@@ -3,17 +3,19 @@ import { expect } from 'chai';
3
3
import { readFileSync } from 'fs' ;
4
4
import 'mocha' ;
5
5
import { resolve } from 'path' ;
6
- import * as request from 'supertest' ;
7
6
import { app } from '../fixtures/express/server' ;
8
- import TestAgent = require( 'supertest/lib/agent' ) ;
7
+
8
+ import { verifyFileUploadRequest } from './utils' ;
9
9
10
10
const basePath = '/v1' ;
11
11
12
12
describe ( 'Express Server With custom multer' , ( ) => {
13
- describe ( 'file upload With custom multer instance' , ( ) => {
13
+ describe ( 'file upload With custom multer instance' , function ( ) {
14
+ this . timeout ( 15_000 ) ;
15
+
14
16
it ( 'can post a file' , ( ) => {
15
17
const formData = { someFile : '@../package.json' } ;
16
- return verifyFileUploadRequest ( basePath + '/PostTest/File' , formData , ( _err , res ) => {
18
+ return verifyFileUploadRequest ( app , basePath + '/PostTest/File' , formData , ( _err , res ) => {
17
19
const packageJsonBuffer = readFileSync ( resolve ( __dirname , '../package.json' ) ) ;
18
20
const returnedBuffer = Buffer . from ( res . body . buffer ) ;
19
21
expect ( res . body ) . to . not . be . undefined ;
@@ -27,31 +29,31 @@ describe('Express Server With custom multer', () => {
27
29
28
30
it ( 'can post a file without name' , ( ) => {
29
31
const formData = { aFile : '@../package.json' } ;
30
- return verifyFileUploadRequest ( basePath + '/PostTest/FileWithoutName' , formData , ( _err , res ) => {
32
+ return verifyFileUploadRequest ( app , basePath + '/PostTest/FileWithoutName' , formData , ( _err , res ) => {
31
33
expect ( res . body ) . to . not . be . undefined ;
32
34
expect ( res . body . fieldname ) . to . equal ( 'aFile' ) ;
33
35
} ) ;
34
36
} ) ;
35
37
36
38
it ( 'cannot post a file with wrong attribute name' , async ( ) => {
37
39
const formData = { wrongAttributeName : '@../package.json' } ;
38
- verifyFileUploadRequest ( basePath + '/PostTest/File' , formData , ( _err , res ) => {
40
+ verifyFileUploadRequest ( app , basePath + '/PostTest/File' , formData , ( _err , res ) => {
39
41
expect ( res . status ) . to . equal ( 500 ) ;
40
42
expect ( res . text ) . to . equal ( '{"message":"Unexpected field","name":"MulterError","status":500}' ) ;
41
43
} ) ;
42
44
} ) ;
43
45
44
46
it ( 'cannot post a file with no file' , async ( ) => {
45
47
const formData = { notAFileAttribute : 'not a file' } ;
46
- verifyFileUploadRequest ( basePath + '/PostTest/File' , formData , ( _err , res ) => {
48
+ verifyFileUploadRequest ( app , basePath + '/PostTest/File' , formData , ( _err , res ) => {
47
49
expect ( res . status ) . to . equal ( 400 ) ;
48
50
expect ( res . text ) . to . equal ( '{"fields":{"someFile":{"message":"\'someFile\' is required"}},"message":"An error occurred during the request.","name":"ValidateError","status":400}' ) ;
49
51
} ) ;
50
52
} ) ;
51
53
52
54
it ( 'can post a file with no file' , async ( ) => {
53
55
const formData = { notAFileAttribute : 'not a file' } ;
54
- verifyFileUploadRequest ( basePath + '/PostTest/FileOptional' , formData , ( _err , res ) => {
56
+ verifyFileUploadRequest ( app , basePath + '/PostTest/FileOptional' , formData , ( _err , res ) => {
55
57
expect ( res . status ) . to . equal ( 200 ) ;
56
58
expect ( res . text ) . to . equal ( 'no file' ) ;
57
59
} ) ;
@@ -64,7 +66,7 @@ describe('Express Server With custom multer', () => {
64
66
someFiles : [ '@../package.json' , '@../tsconfig.json' ] ,
65
67
} ;
66
68
67
- return verifyFileUploadRequest ( basePath + '/PostTest/ManyFilesAndFormFields' , formData , ( _err , res ) => {
69
+ return verifyFileUploadRequest ( app , basePath + '/PostTest/ManyFilesAndFormFields' , formData , ( _err , res ) => {
68
70
for ( const file of res . body as File [ ] ) {
69
71
const packageJsonBuffer = readFileSync ( resolve ( __dirname , `../${ file . originalname } ` ) ) ;
70
72
const returnedBuffer = Buffer . from ( file . buffer ) ;
@@ -85,7 +87,7 @@ describe('Express Server With custom multer', () => {
85
87
someFiles : [ '@../package.json' ] ,
86
88
} ;
87
89
88
- return verifyFileUploadRequest ( basePath + '/PostTest/ManyFilesAndFormFields' , formData , ( _err , res ) => {
90
+ return verifyFileUploadRequest ( app , basePath + '/PostTest/ManyFilesAndFormFields' , formData , ( _err , res ) => {
89
91
expect ( res . body ) . to . be . length ( 1 ) ;
90
92
} ) ;
91
93
} ) ;
@@ -95,7 +97,7 @@ describe('Express Server With custom multer', () => {
95
97
file_a : '@../package.json' ,
96
98
file_b : '@../tsconfig.json' ,
97
99
} ;
98
- return verifyFileUploadRequest ( `${ basePath } /PostTest/ManyFilesInDifferentFields` , formData , ( _err , res ) => {
100
+ return verifyFileUploadRequest ( app , `${ basePath } /PostTest/ManyFilesInDifferentFields` , formData , ( _err , res ) => {
99
101
for ( const file of res . body as File [ ] ) {
100
102
const packageJsonBuffer = readFileSync ( resolve ( __dirname , `../${ file . originalname } ` ) ) ;
101
103
const returnedBuffer = Buffer . from ( file . buffer ) ;
@@ -115,7 +117,7 @@ describe('Express Server With custom multer', () => {
115
117
file_b : '@../tsoa.json' ,
116
118
files_c : [ '@../tsconfig.json' , '@../package.json' ] ,
117
119
} ;
118
- return verifyFileUploadRequest ( `${ basePath } /PostTest/ManyFilesInDifferentArrayFields` , formData , ( _err , res ) => {
120
+ return verifyFileUploadRequest ( app , `${ basePath } /PostTest/ManyFilesInDifferentArrayFields` , formData , ( _err , res ) => {
119
121
for ( const fileList of res . body as File [ ] [ ] ) {
120
122
for ( const file of fileList ) {
121
123
const packageJsonBuffer = readFileSync ( resolve ( __dirname , `../${ file . originalname } ` ) ) ;
@@ -136,7 +138,7 @@ describe('Express Server With custom multer', () => {
136
138
username : 'test' ,
137
139
avatar : '@../tsconfig.json' ,
138
140
} ;
139
- return verifyFileUploadRequest ( `${ basePath } /PostTest/MixedFormDataWithFilesContainsOptionalFile` , formData , ( _err , res ) => {
141
+ return verifyFileUploadRequest ( app , `${ basePath } /PostTest/MixedFormDataWithFilesContainsOptionalFile` , formData , ( _err , res ) => {
140
142
const file = res . body . avatar ;
141
143
const packageJsonBuffer = readFileSync ( resolve ( __dirname , `../${ file . originalname } ` ) ) ;
142
144
const returnedBuffer = Buffer . from ( file . buffer ) ;
@@ -157,7 +159,7 @@ describe('Express Server With custom multer', () => {
157
159
avatar : '@../tsconfig.json' ,
158
160
optionalAvatar : '@../package.json' ,
159
161
} ;
160
- return verifyFileUploadRequest ( `${ basePath } /PostTest/MixedFormDataWithFilesContainsOptionalFile` , formData , ( _err , res ) => {
162
+ return verifyFileUploadRequest ( app , `${ basePath } /PostTest/MixedFormDataWithFilesContainsOptionalFile` , formData , ( _err , res ) => {
161
163
expect ( res . body . username ) . to . equal ( formData . username ) ;
162
164
for ( const fieldName of [ 'avatar' , 'optionalAvatar' ] ) {
163
165
const file = res . body [ fieldName ] ;
@@ -172,58 +174,5 @@ describe('Express Server With custom multer', () => {
172
174
}
173
175
} ) ;
174
176
} ) ;
175
-
176
- function verifyFileUploadRequest (
177
- path : string ,
178
- formData : any ,
179
- verifyResponse : ( err : any , res : request . Response ) => any = ( ) => {
180
- /**/
181
- } ,
182
- expectedStatus ?: number ,
183
- ) {
184
- return verifyRequest (
185
- verifyResponse ,
186
- request =>
187
- Object . keys ( formData ) . reduce ( ( req , key ) => {
188
- const values = [ ] . concat ( formData [ key ] ) ;
189
- values . forEach ( ( v : string ) => {
190
- if ( v . startsWith ( '@' ) ) {
191
- req . attach ( key , resolve ( __dirname , v . slice ( 1 ) ) ) ;
192
- } else {
193
- req . field ( key , v ) ;
194
- }
195
- } ) ;
196
- return req ;
197
- } , request . post ( path ) ) ,
198
- expectedStatus ,
199
- ) ;
200
- }
201
177
} ) ;
202
-
203
- function verifyRequest ( verifyResponse : ( err : any , res : request . Response ) => any , methodOperation : ( request : TestAgent < request . Test > ) => request . Test , expectedStatus = 200 ) {
204
- return new Promise < void > ( ( resolve , reject ) => {
205
- methodOperation ( request ( app ) )
206
- . expect ( expectedStatus )
207
- . end ( ( err : any , res : any ) => {
208
- let parsedError : any ;
209
- try {
210
- parsedError = JSON . parse ( res . error ) ;
211
- } catch ( err ) {
212
- parsedError = res ?. error ;
213
- }
214
-
215
- if ( err ) {
216
- verifyResponse ( err , res ) ;
217
- reject ( {
218
- error : err ,
219
- response : parsedError ,
220
- } ) ;
221
- return ;
222
- }
223
-
224
- verifyResponse ( parsedError , res ) ;
225
- resolve ( ) ;
226
- } ) ;
227
- } ) ;
228
- }
229
178
} ) ;
0 commit comments