@@ -9,6 +9,7 @@ const should = require('should');
9
9
const sinon = require ( 'sinon' ) ;
10
10
const GetHandler = require ( '../lib/handlers/GetHandler' ) ;
11
11
const DataStore = require ( '../lib/stores/DataStore' ) ;
12
+ const FileStore = require ( '../lib/stores/FileStore' ) ;
12
13
const { spy } = require ( 'sinon' ) ;
13
14
14
15
const hasHeader = ( res , header ) => {
@@ -18,7 +19,7 @@ const hasHeader = (res, header) => {
18
19
19
20
describe ( 'GetHandler' , ( ) => {
20
21
const path = '/test/output' ;
21
- let req = null ;
22
+ let req = null ;
22
23
let res = null ;
23
24
24
25
beforeEach ( ( done ) => {
@@ -30,135 +31,113 @@ describe('GetHandler', () => {
30
31
describe ( 'test error responses' , ( ) => {
31
32
32
33
it ( 'should 404 when file does not exist' , async ( ) => {
33
- const store = new DataStore ( { path } ) ;
34
- store . read = ( ) => { } ;
34
+ const store = sinon . createStubInstance ( FileStore )
35
+ store . getOffset . rejects ( { status_code : 404 } ) ;
35
36
36
- const fakeStore = sinon . stub ( store )
37
- fakeStore . getOffset . rejects ( { status_code : 404 } ) ;
38
-
39
- const handler = new GetHandler ( fakeStore ) ;
37
+ const handler = new GetHandler ( store , { path } ) ;
40
38
const spy_getFileIdFromRequest = sinon . spy ( handler , 'getFileIdFromRequest' ) ;
41
-
39
+
42
40
req . url = `${ path } /1234` ;
43
- await handler . send ( req , res )
44
- assert . equal ( res . statusCode , 404 ) ;
41
+ await assert . rejects ( ( ) => handler . send ( req , res ) , { status_code : 404 } ) ;
45
42
assert . equal ( spy_getFileIdFromRequest . calledOnceWith ( req ) , true ) ;
46
43
} ) ;
47
-
44
+
48
45
it ( 'should 404 for non registered path' , async ( ) => {
49
- const store = new DataStore ( { path } ) ;
50
- store . read = ( ) => { } ;
46
+ const store = sinon . createStubInstance ( FileStore )
51
47
52
- const fakeStore = sinon . stub ( store )
53
-
54
- const handler = new GetHandler ( fakeStore ) ;
48
+ const handler = new GetHandler ( store , { path } ) ;
55
49
const spy_getFileIdFromRequest = sinon . spy ( handler , 'getFileIdFromRequest' ) ;
56
-
57
- req . url = `/not_a_valid_file_path` ;
58
- await handler . send ( req , res )
59
- assert . equal ( res . statusCode , 404 ) ;
60
50
51
+ req . url = `/not_a_valid_file_path` ;
52
+ await assert . rejects ( ( ) => handler . send ( req , res ) , { status_code : 404 } ) ;
61
53
assert . equal ( spy_getFileIdFromRequest . callCount , 1 ) ;
62
54
} ) ;
63
-
55
+
64
56
it ( 'should 404 when file is not complete' , async ( ) => {
65
- const store = new DataStore ( { path } ) ;
66
- store . read = ( ) => { } ;
57
+ const store = sinon . createStubInstance ( FileStore )
58
+ store . getOffset . resolves ( { size : 512 , upload_length : '1024' } ) ;
59
+
60
+ const handler = new GetHandler ( store , { path } ) ;
67
61
68
- const fakeStore = sinon . stub ( store )
69
- fakeStore . getOffset . resolves ( { size : 512 , upload_length : '1024' } ) ;
70
-
71
- const handler = new GetHandler ( fakeStore ) ;
72
-
73
62
const fileId = '1234' ;
74
63
req . url = `${ path } /${ fileId } ` ;
75
- await handler . send ( req , res )
76
- assert . equal ( res . statusCode , 404 ) ;
77
- assert . equal ( fakeStore . getOffset . calledWith ( fileId ) , true ) ;
64
+ await assert . rejects ( ( ) => handler . send ( req , res ) , { status_code : 404 } ) ;
65
+ assert . equal ( store . getOffset . calledWith ( fileId ) , true ) ;
78
66
} ) ;
79
-
80
- it ( 'should 500 on error store.getOffset error' , async ( ) => {
67
+
68
+ it ( 'should 500 on error store.getOffset error' , ( ) => {
81
69
const store = new DataStore ( { path } ) ;
82
70
store . read = ( ) => { } ;
83
71
84
72
const fakeStore = sinon . stub ( store )
85
- fakeStore . getOffset . rejects ( { } ) ;
86
-
73
+ fakeStore . getOffset . rejects ( ) ;
74
+
87
75
const handler = new GetHandler ( fakeStore ) ;
88
-
76
+
89
77
req . url = `${ path } /1234` ;
90
- await handler . send ( req , res ) ;
91
- assert . equal ( res . statusCode , 500 ) ;
78
+ return assert . rejects ( ( ) => handler . send ( req , res ) ) ;
92
79
} ) ;
93
80
94
81
it ( 'test invalid stream' , async ( ) => {
95
- const store = new DataStore ( { path } ) ;
96
- store . read = ( ) => { } ;
82
+ const store = sinon . createStubInstance ( FileStore )
97
83
98
- const fakeStore = sinon . stub ( store )
99
-
100
84
const size = 512 ;
101
- fakeStore . getOffset . resolves ( { size, upload_length : size . toString ( ) } ) ;
102
- fakeStore . read . returns ( stream . Readable . from ( fs . createReadStream ( 'invalid_path' ) ) ) ;
103
-
104
- const handler = new GetHandler ( fakeStore ) ;
105
-
85
+ store . getOffset . resolves ( { size, upload_length : size . toString ( ) } ) ;
86
+ store . read . returns ( stream . Readable . from ( fs . createReadStream ( 'invalid_path' ) ) ) ;
87
+
88
+ const handler = new GetHandler ( store , { path } ) ;
89
+
106
90
const fileId = '1234' ;
107
91
req . url = `${ path } /${ fileId } ` ;
108
92
await handler . send ( req , res ) ;
109
93
110
94
assert . equal ( res . statusCode , 200 ) ;
111
- assert . equal ( fakeStore . getOffset . calledWith ( fileId ) , true ) ;
112
- assert . equal ( fakeStore . read . calledWith ( fileId ) , true ) ;
95
+ assert . equal ( store . getOffset . calledWith ( fileId ) , true ) ;
96
+ assert . equal ( store . read . calledWith ( fileId ) , true ) ;
113
97
} ) ;
114
98
} )
115
99
116
100
describe ( 'send()' , ( ) => {
117
101
118
102
it ( 'test if `file_id` is properly passed to store' , async ( ) => {
119
- const store = new DataStore ( { path } ) ;
120
- store . read = ( ) => { } ;
103
+ const store = sinon . createStubInstance ( FileStore ) ;
104
+
105
+ store . getOffset . resolves ( { size : 512 , upload_length : '512' } ) ;
106
+ store . read . returns ( stream . Readable . from ( Buffer . alloc ( 512 ) ) ) ;
107
+
108
+ const handler = new GetHandler ( store , { path } ) ;
121
109
122
- const fakeStore = sinon . stub ( store )
123
- fakeStore . getOffset . resolves ( { size : 512 , upload_length : '512' } ) ;
124
- fakeStore . read . returns ( stream . Readable . from ( Buffer . alloc ( 512 ) ) ) ;
125
-
126
- const handler = new GetHandler ( fakeStore ) ;
127
-
128
110
const fileId = '1234'
129
111
req . url = `${ path } /${ fileId } ` ;
130
112
await handler . send ( req , res ) ;
131
-
132
- assert . equal ( fakeStore . getOffset . calledWith ( fileId ) , true ) ;
133
- assert . equal ( fakeStore . read . calledWith ( fileId ) , true ) ;
113
+
114
+ assert . equal ( store . getOffset . calledWith ( fileId ) , true ) ;
115
+ assert . equal ( store . read . calledWith ( fileId ) , true ) ;
134
116
} ) ;
135
117
136
118
it ( 'test successful response' , async ( ) => {
137
- const store = new DataStore ( { path } ) ;
138
- store . read = ( ) => { } ;
119
+ const store = sinon . createStubInstance ( FileStore ) ;
139
120
140
- const fakeStore = sinon . stub ( store )
141
-
142
121
const size = 512 ;
143
- fakeStore . getOffset . resolves ( { size, upload_length : size . toString ( ) } ) ;
144
- fakeStore . read . returns ( stream . Readable . from ( Buffer . alloc ( size ) , { objectMode : false } ) ) ;
145
-
146
- const handler = new GetHandler ( fakeStore ) ;
147
-
122
+ store . getOffset . resolves ( { size, upload_length : size . toString ( ) } ) ;
123
+ store . read . returns ( stream . Readable . from ( Buffer . alloc ( size ) , { objectMode : false } ) ) ;
124
+
125
+ const handler = new GetHandler ( store , { path } ) ;
126
+
148
127
const fileId = '1234' ;
149
128
req . url = `${ path } /${ fileId } ` ;
150
129
await handler . send ( req , res ) ;
151
-
130
+
152
131
assert ( res . statusCode , 200 ) ;
153
132
assert ( hasHeader ( res , { 'Content-Length' : size } ) , true ) ;
154
- assert ( fakeStore . getOffset . calledOnceWith ( fileId ) , true ) ;
155
- assert ( fakeStore . read . calledOnceWith ( fileId ) , true ) ;
133
+ assert ( store . getOffset . calledOnceWith ( fileId ) , true ) ;
134
+ assert ( store . read . calledOnceWith ( fileId ) , true ) ;
156
135
} ) ;
157
136
} ) ;
158
137
159
138
describe ( 'registerPath()' , ( ) => {
160
139
it ( 'should call registered path handler' , async ( ) => {
161
- const fakeStore = sinon . stub ( new DataStore ( { path } ) )
140
+ const fakeStore = sinon . stub ( new DataStore ( ) )
162
141
const handler = new GetHandler ( fakeStore ) ;
163
142
164
143
const customPath1 = `/path1` ;
@@ -168,7 +147,7 @@ describe('GetHandler', () => {
168
147
const customPath2 = `/path2` ;
169
148
const pathHandler2 = sinon . spy ( ) ;
170
149
handler . registerPath ( customPath2 , pathHandler2 ) ;
171
-
150
+
172
151
req . url = `${ customPath1 } ` ;
173
152
await handler . send ( req , res )
174
153
assert . equal ( pathHandler1 . calledOnceWith ( req , res ) , true ) ;
@@ -181,14 +160,14 @@ describe('GetHandler', () => {
181
160
} ) ;
182
161
183
162
it ( 'should not call DataStore when path matches registered path' , async ( ) => {
184
- const fakeStore = sinon . stub ( new DataStore ( { path } ) )
163
+ const fakeStore = sinon . stub ( new DataStore ( ) )
185
164
const handler = new GetHandler ( fakeStore ) ;
186
-
165
+
187
166
const spy_getFileIdFromRequest = sinon . spy ( handler , 'getFileIdFromRequest' ) ;
188
167
189
168
const customPath = `/path` ;
190
169
handler . registerPath ( customPath , ( ) => { } ) ;
191
-
170
+
192
171
req . url = `${ customPath } ` ;
193
172
await handler . send ( req , res )
194
173
assert . equal ( spy_getFileIdFromRequest . callCount , 0 ) ;
@@ -199,15 +178,13 @@ describe('GetHandler', () => {
199
178
describe ( 'DataStore without `read` method' , ( ) => {
200
179
201
180
it ( 'should 404 if not implemented' , async ( ) => {
202
- const fakeStore = sinon . stub ( new DataStore ( { path } ) )
181
+ const fakeStore = sinon . stub ( new DataStore ( ) )
203
182
fakeStore . getOffset . resolves ( { size : 512 , upload_length : '512' } ) ;
204
183
205
184
const handler = new GetHandler ( fakeStore ) ;
206
-
207
- req . url = `/${ path } /1234` ;
208
- await handler . send ( req , res ) ;
209
185
210
- assert . equal ( res . statusCode , 404 ) ;
186
+ req . url = `/${ path } /1234` ;
187
+ await assert . rejects ( ( ) => handler . send ( req , res ) , { status_code : 404 } ) ;
211
188
} ) ;
212
189
} )
213
190
0 commit comments