UNPKG

3.78 kBJavaScriptView Raw
1const fs = require('fs');
2const md5 = require('md5');
3const path = require('path');
4const request = require('supertest');
5const server = require('./server');
6const clearUploadsDir =
7 server.clearUploadsDir;
8const fileDir =
9 server.fileDir;
10const uploadDir =
11 server.uploadDir;
12describe('File Upload Options Tests', function() {
13 afterEach(function(done) {
14 clearUploadsDir();
15 done();
16 });
17 /**
18 * Upload the file for testing and verify the expected filename.
19 * @param {object} options The expressFileUpload options.
20 * @param {string} actualFileNameToUpload The name of the file to upload.
21 * @param {string} expectedFileNameOnFileSystem The name of the file after upload.
22 * @param {function} done The mocha continuation function.
23 */
24 function executeFileUploadTestWalk(
25 options,
26 actualFileNameToUpload,
27 expectedFileNameOnFileSystem,
28 done
29 ) {
30
31 let filePath = path.join(fileDir, actualFileNameToUpload);
32 let fileBuffer = fs.readFileSync(filePath);
33 let fileHash = md5(fileBuffer);
34 let fileStat = fs.statSync(filePath);
35 let uploadedFilePath = path.join(uploadDir, expectedFileNameOnFileSystem);
36
37 request(
38 server.setup(options)
39 )
40 .post('/upload/single')
41 .attach('testFile', filePath)
42 .expect((res)=>{
43 res.body.uploadDir = '';
44 res.body.uploadPath = '';
45 })
46 .expect(200, {
47 name: expectedFileNameOnFileSystem,
48 md5: fileHash,
49 size: fileStat.size,
50 uploadDir: '',
51 uploadPath: ''
52 })
53 .end(function(err) {
54 if (err) {
55 return done(err);
56 }
57
58 fs.stat(uploadedFilePath, done);
59 });
60 }
61 describe('Testing [safeFileNames with useTempFiles] option to ensure:', function() {
62 it('Does nothing to your filename when disabled.', function(done) {
63 const fileUploadOptions = {
64 safeFileNames: false,
65 useTempFiles: true,
66 tempFileDir: '/tmp/'
67 };
68 const actualFileName =
69 'my$Invalid#fileName.png123';
70 const expectedFileName =
71 'my$Invalid#fileName.png123';
72 executeFileUploadTestWalk(
73 fileUploadOptions,
74 actualFileName,
75 expectedFileName,
76 done
77 );
78 });
79 it('Is disabled by default.', function(done) {
80 const fileUploadOptions = {
81 useTempFiles: true,
82 tempFileDir: '/tmp/'
83 };
84 const actualFileName =
85 'my$Invalid#fileName.png123';
86 const expectedFileName =
87 'my$Invalid#fileName.png123';
88 executeFileUploadTestWalk(
89 fileUploadOptions,
90 actualFileName,
91 expectedFileName,
92 done
93 );
94 });
95
96 it(
97 'Strips away all non-alphanumeric characters (excluding hyphens/underscores) when enabled.',
98 function(done) {
99 const fileUploadOptions = {
100 safeFileNames: true,
101 useTempFiles: true,
102 tempFileDir: '/tmp/'
103 };
104 const actualFileName = 'my$Invalid#fileName.png123';
105 const expectedFileName = 'myInvalidfileNamepng123';
106 executeFileUploadTestWalk(
107 fileUploadOptions,
108 actualFileName,
109 expectedFileName,
110 done
111 );
112 });
113
114 it(
115 'Accepts a regex for stripping (decidedly) "invalid" characters from filename.',
116 function(done) {
117 const fileUploadOptions = {
118 safeFileNames: /[$#]/g,
119 useTempFiles: true,
120 tempFileDir: '/tmp/'
121 };
122 const actualFileName = 'my$Invalid#fileName.png123';
123 const expectedFileName = 'myInvalidfileName.png123';
124 executeFileUploadTestWalk(
125 fileUploadOptions,
126 actualFileName,
127 expectedFileName,
128 done
129 );
130 });
131 });
132});