1 | const fs = require('fs');
|
2 | const md5 = require('md5');
|
3 | const path = require('path');
|
4 | const request = require('supertest');
|
5 | const server = require('./server');
|
6 | const clearUploadsDir =
|
7 | server.clearUploadsDir;
|
8 | const fileDir =
|
9 | server.fileDir;
|
10 | const uploadDir =
|
11 | server.uploadDir;
|
12 | describe('File Upload Options Tests', function() {
|
13 | afterEach(function(done) {
|
14 | clearUploadsDir();
|
15 | done();
|
16 | });
|
17 | |
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
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 | });
|