@@ -2,150 +2,184 @@ const fs = require('fs');
2
2
const path = require ( 'path' ) ;
3
3
const request = require ( 'supertest' ) ;
4
4
const server = require ( './server' ) ;
5
- // const clearUploadsDir = server.clearUploadsDir;
5
+ const clearUploadsDir = server . clearUploadsDir ;
6
6
const fileDir = server . fileDir ;
7
7
const uploadDir = server . uploadDir ;
8
8
9
- describe ( 'SafeFileNames' , function ( ) {
10
- it ( `Does nothing to your filename when disabled.` , function ( done ) {
11
- const app = server . setup ( { safeFileNames : false } ) ;
9
+ describe ( 'File Upload Options Tests' , function ( ) {
10
+ afterEach ( function ( done ) {
11
+ clearUploadsDir ( ) ;
12
+ done ( ) ;
13
+ } ) ;
12
14
13
- request ( app )
14
- . post ( '/upload/single' )
15
- . attach ( 'testFile' , path . join ( fileDir , 'my$Invalid#fileName.png123' ) )
16
- . expect ( 200 )
17
- . end ( function ( err , res ) {
18
- if ( err )
19
- return done ( err ) ;
15
+ describe ( 'Testing [safeFileNames] option to ensure:' , function ( ) {
16
+ it ( 'Does nothing to your filename when disabled.' ,
17
+ function ( done ) {
18
+ const fileUploadOptions = { safeFileNames : false } ;
19
+ const actualFileName = 'my$Invalid#fileName.png123' ;
20
+ const expectedFileName = 'my$Invalid#fileName.png123' ;
20
21
21
- let uploadedFilePath = path . join ( uploadDir , 'my$Invalid#fileName.png123' ) ;
22
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
23
+ } ) ;
22
24
23
- fs . stat ( uploadedFilePath , done ) ;
25
+ it ( 'Is disabled by default.' ,
26
+ function ( done ) {
27
+ const fileUploadOptions = null ;
28
+ const actualFileName = 'my$Invalid#fileName.png123' ;
29
+ const expectedFileName = 'my$Invalid#fileName.png123' ;
30
+
31
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
24
32
} ) ;
25
- } ) ;
26
33
27
- it ( `Strips away all illegal characters (including spaces) when enabled.` , function ( done ) {
28
- const app = server . setup ( { safeFileNames : true } ) ;
34
+ it ( 'Strips away all non-alphanumeric characters (excluding hyphens/underscores) when enabled.' ,
35
+ function ( done ) {
36
+ const fileUploadOptions = { safeFileNames : true } ;
37
+ const actualFileName = 'my$Invalid#fileName.png123' ;
38
+ const expectedFileName = 'myInvalidfileNamepng123' ;
29
39
30
- request ( app )
31
- . post ( '/upload/single' )
32
- . attach ( 'testFile' , path . join ( fileDir , 'my$Invalid#fileName.png123' ) )
33
- . expect ( 200 )
34
- . end ( function ( err , res ) {
35
- if ( err )
36
- return done ( err ) ;
40
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
41
+ } ) ;
37
42
38
- let uploadedFilePath = path . join ( uploadDir , 'myInvalidfileNamepng123' ) ;
43
+ it ( 'Accepts a regex for stripping (decidedly) "invalid" characters from filename.' ,
44
+ function ( done ) {
45
+ const fileUploadOptions = { safeFileNames : / [ \$ # ] / g} ;
46
+ const actualFileName = 'my$Invalid#fileName.png123' ;
47
+ const expectedFileName = 'myInvalidfileName.png123' ;
39
48
40
- fs . stat ( uploadedFilePath , done ) ;
49
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
41
50
} ) ;
42
51
} ) ;
43
52
44
- it ( `Respects a regex for stripping 'invalid' characters from filename.` , function ( done ) {
45
- const app = server . setup ( { safeFileNames : / [ \$ # ] / g} ) ;
53
+ describe ( 'Testing [preserveExtension] option to ensure:' , function ( ) {
54
+ it ( 'Does not preserve the extension of your filename when disabled.' ,
55
+ function ( done ) {
56
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : false } ;
57
+ const actualFileName = 'my$Invalid#fileName.png123' ;
58
+ const expectedFileName = 'myInvalidfileNamepng123' ;
46
59
47
- request ( app )
48
- . post ( '/upload/single' )
49
- . attach ( 'testFile' , path . join ( fileDir , 'my$Invalid#fileName.png123' ) )
50
- . expect ( 200 )
51
- . end ( function ( err , res ) {
52
- if ( err )
53
- return done ( err ) ;
60
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
61
+ } ) ;
54
62
55
- let uploadedFilePath = path . join ( uploadDir , 'myInvalidfileName.png123' ) ;
63
+ it ( 'Is disabled by default.' ,
64
+ function ( done ) {
65
+ const fileUploadOptions = { safeFileNames : true } ;
66
+ const actualFileName = 'my$Invalid#fileName.png123' ;
67
+ const expectedFileName = 'myInvalidfileNamepng123' ;
56
68
57
- fs . stat ( uploadedFilePath , done ) ;
69
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
58
70
} ) ;
59
- } ) ;
60
- } ) ;
61
71
62
- describe ( `preserveExtension` , function ( ) {
63
- it ( `Does nothing to your filename when disabled.` , function ( done ) {
64
- const app = server . setup ( { safeFileNames : true , preserveExtension : false } ) ;
72
+ it ( 'Shortens your extension to the default(3) when enabled, if the extension found is larger.' ,
73
+ function ( done ) {
74
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : true } ;
75
+ const actualFileName = 'my$Invalid#fileName.png123' ;
76
+ const expectedFileName = 'myInvalidfileNamepng.123' ;
65
77
66
- request ( app )
67
- . post ( '/upload/single' )
68
- . attach ( 'testFile' , path . join ( fileDir , 'my$Invalid#fileName.png123' ) )
69
- . expect ( 200 )
70
- . end ( function ( err , res ) {
71
- if ( err )
72
- return done ( err ) ;
78
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
79
+ } ) ;
73
80
74
- let uploadedFilePath = path . join ( uploadDir , 'myInvalidfileNamepng123' ) ;
81
+ it ( 'Leaves your extension alone when enabled, if the extension found is <= default(3) length' ,
82
+ function ( done ) {
83
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : true } ;
84
+ const actualFileName = 'car.png' ;
85
+ const expectedFileName = 'car.png' ;
75
86
76
- fs . stat ( uploadedFilePath , done ) ;
87
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
88
+ } ) ;
89
+
90
+ it ( 'Can be configured for an extension length > default(3).' ,
91
+ function ( done ) {
92
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : 7 } ;
93
+ const actualFileName = 'my$Invalid#fileName.png123' ;
94
+ const expectedFileName = 'myInvalidfileName.png123' ;
95
+
96
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
97
+ } ) ;
98
+
99
+ it ( 'Can be configured for an extension length < default(3).' ,
100
+ function ( done ) {
101
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : 2 } ;
102
+ const actualFileName = 'my$Invalid#fileName.png123' ;
103
+ const expectedFileName = 'myInvalidfileNamepng1.23' ;
104
+
105
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
106
+ } ) ;
107
+
108
+ it ( 'Will use the absolute value of your extension length when negative.' ,
109
+ function ( done ) {
110
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : - 5 } ;
111
+ const actualFileName = 'my$Invalid#fileName.png123' ;
112
+ const expectedFileName = 'myInvalidfileNamep.ng123' ;
113
+
114
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
115
+ } ) ;
116
+
117
+ it ( 'Will leave no extension when the extension length == 0.' ,
118
+ function ( done ) {
119
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : 0 } ;
120
+ const actualFileName = 'car.png' ;
121
+ const expectedFileName = 'car' ;
122
+
123
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
124
+ } ) ;
125
+
126
+ it ( 'Will accept numbers as strings, if they can be resolved with parseInt.' ,
127
+ function ( done ) {
128
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : '3' } ;
129
+ const actualFileName = 'my$Invalid#fileName.png123' ;
130
+ const expectedFileName = 'myInvalidfileNamepng.123' ;
131
+
132
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
133
+ } ) ;
134
+
135
+ it ( 'Will be evaluated for truthy-ness if it cannot be parsed as an int.' ,
136
+ function ( done ) {
137
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : 'not-a-#-but-truthy' } ;
138
+ const actualFileName = 'my$Invalid#fileName.png123' ;
139
+ const expectedFileName = 'myInvalidfileNamepng.123' ;
140
+
141
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
142
+ } ) ;
143
+
144
+ it ( 'Will ignore any decimal amount when evaluating for extension length.' ,
145
+ function ( done ) {
146
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : 4.98 } ;
147
+ const actualFileName = 'my$Invalid#fileName.png123' ;
148
+ const expectedFileName = 'myInvalidfileNamepn.g123' ;
149
+
150
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
151
+ } ) ;
152
+
153
+ it ( 'Only considers the last dotted part as the extension.' ,
154
+ function ( done ) {
155
+ const fileUploadOptions = { safeFileNames : true , preserveExtension : true } ;
156
+ const actualFileName = 'basket.ball.bp' ;
157
+ const expectedFileName = 'basketball.bp' ;
158
+
159
+ executeFileUploadTestWalk ( fileUploadOptions , actualFileName , expectedFileName , done ) ;
77
160
} ) ;
78
161
} ) ;
79
162
80
- it ( `Shortens your extension to the default(3) when enabled, if the extension found is larger` ,
81
- function ( done ) {
82
- const app = server . setup ( { safeFileNames : true , preserveExtension : true } ) ;
163
+ function executeFileUploadTestWalk ( options ,
164
+ actualFileNameToUpload ,
165
+ expectedFilNameOnFileSystem ,
166
+ done ) {
167
+ const argsUnderTest = options ;
168
+ const app = server . setup ( argsUnderTest ) ;
169
+ const actualFileName = actualFileNameToUpload ;
170
+ const expectedFileName = expectedFilNameOnFileSystem ;
83
171
84
172
request ( app )
85
173
. post ( '/upload/single' )
86
- . attach ( 'testFile' , path . join ( fileDir , 'my$Invalid#fileName.png123' ) )
174
+ . attach ( 'testFile' , path . join ( fileDir , actualFileName ) )
87
175
. expect ( 200 )
88
- . end ( function ( err , res ) {
176
+ . end ( function ( err ) {
89
177
if ( err )
90
178
return done ( err ) ;
91
179
92
- let uploadedFilePath = path . join ( uploadDir , 'myInvalidfileNamepng.123' ) ;
180
+ const uploadedFilePath = path . join ( uploadDir , expectedFileName ) ;
93
181
94
182
fs . stat ( uploadedFilePath , done ) ;
95
183
} ) ;
96
- } ) ;
97
-
98
- it ( `Leaves your extension alone when enabled, if the extension found is <= default(3) length` ,
99
- function ( done ) {
100
- const app = server . setup ( { safeFileNames : true , preserveExtension : true } ) ;
101
-
102
- request ( app )
103
- . post ( '/upload/single' )
104
- . attach ( 'testFile' , path . join ( fileDir , 'car.png' ) )
105
- . expect ( 200 )
106
- . end ( function ( err , res ) {
107
- if ( err )
108
- return done ( err ) ;
109
-
110
- let uploadedFilePath = path . join ( uploadDir , 'car.png' ) ;
111
-
112
- fs . stat ( uploadedFilePath , done ) ;
113
- } ) ;
114
- } ) ;
115
-
116
- it ( `Leaves your extension alone when set to a number >= the extension length.` ,
117
- function ( done ) {
118
- const app = server . setup ( { safeFileNames : true , preserveExtension : 7 } ) ;
119
-
120
- request ( app )
121
- . post ( '/upload/single' )
122
- . attach ( 'testFile' , path . join ( fileDir , 'my$Invalid#fileName.png123' ) )
123
- . expect ( 200 )
124
- . end ( function ( err , res ) {
125
- if ( err )
126
- return done ( err ) ;
127
-
128
- let uploadedFilePath = path . join ( uploadDir , 'myInvalidfileName.png123' ) ;
129
-
130
- fs . stat ( uploadedFilePath , done ) ;
131
- } ) ;
132
- } ) ;
133
-
134
- it ( `Only considers the last dotted part the extension.` ,
135
- function ( done ) {
136
- const app = server . setup ( { safeFileNames : true , preserveExtension : true } ) ;
137
-
138
- request ( app )
139
- . post ( '/upload/single' )
140
- . attach ( 'testFile' , path . join ( fileDir , 'basket.ball.bp' ) )
141
- . expect ( 200 )
142
- . end ( function ( err , res ) {
143
- if ( err )
144
- return done ( err ) ;
145
-
146
- let uploadedFilePath = path . join ( uploadDir , 'basketball.bp' ) ;
147
-
148
- fs . stat ( uploadedFilePath , done ) ;
149
- } ) ;
150
- } ) ;
184
+ }
151
185
} ) ;
0 commit comments