1
1
use super :: { Error , Result } ;
2
- use crate :: constants:: { MAX_FILE_NAME_CHARACTERS , MAX_FILE_SIZE_BYTES , VALID_FILE_MIME_TYPES } ;
2
+ use crate :: constants:: {
3
+ MAX_DOCUMENT_FILE_SIZE_BYTES , MAX_FILE_NAME_CHARACTERS , VALID_FILE_MIME_TYPES ,
4
+ } ;
3
5
use crate :: data:: UploadFileResult ;
4
6
use crate :: persistence:: file_upload:: FileUploadStoreApi ;
5
7
use crate :: { persistence, util} ;
@@ -41,9 +43,13 @@ impl ServiceTraitBounds for FileUploadService {}
41
43
#[ cfg_attr( not( target_arch = "wasm32" ) , async_trait) ]
42
44
impl FileUploadServiceApi for FileUploadService {
43
45
async fn validate_attached_file ( & self , file : & dyn util:: file:: UploadFileHandler ) -> Result < ( ) > {
44
- if file. len ( ) > MAX_FILE_SIZE_BYTES as u64 {
46
+ if file. is_empty ( ) {
47
+ return Err ( Error :: Validation ( ValidationError :: FileIsEmpty ) ) ;
48
+ }
49
+
50
+ if file. len ( ) > MAX_DOCUMENT_FILE_SIZE_BYTES {
45
51
return Err ( Error :: Validation ( ValidationError :: FileIsTooBig (
46
- MAX_FILE_SIZE_BYTES ,
52
+ MAX_DOCUMENT_FILE_SIZE_BYTES ,
47
53
) ) ) ;
48
54
}
49
55
@@ -232,7 +238,8 @@ mod tests {
232
238
async fn validate_attached_file_checks_file_size ( ) {
233
239
let mut file = MockUploadFileHandler :: new ( ) ;
234
240
file. expect_len ( )
235
- . returning ( move || MAX_FILE_SIZE_BYTES as u64 * 2 ) ;
241
+ . returning ( move || MAX_DOCUMENT_FILE_SIZE_BYTES * 2 ) ;
242
+ file. expect_is_empty ( ) . returning ( move || false ) ;
236
243
237
244
let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
238
245
let res = service. validate_attached_file ( & file) . await ;
@@ -244,6 +251,7 @@ mod tests {
244
251
async fn validate_attached_file_checks_file_name ( ) {
245
252
let mut file = MockUploadFileHandler :: new ( ) ;
246
253
file. expect_len ( ) . returning ( move || 100 ) ;
254
+ file. expect_is_empty ( ) . returning ( move || false ) ;
247
255
file. expect_name ( ) . returning ( move || None ) ;
248
256
249
257
let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
@@ -256,6 +264,7 @@ mod tests {
256
264
async fn validate_attached_file_checks_file_name_empty ( ) {
257
265
let mut file = MockUploadFileHandler :: new ( ) ;
258
266
file. expect_len ( ) . returning ( move || 100 ) ;
267
+ file. expect_is_empty ( ) . returning ( move || false ) ;
259
268
file. expect_name ( ) . returning ( move || Some ( String :: from ( "" ) ) ) ;
260
269
261
270
let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
@@ -270,6 +279,7 @@ mod tests {
270
279
file. expect_len ( ) . returning ( move || 100 ) ;
271
280
file. expect_name ( )
272
281
. returning ( move || Some ( "abc" . repeat ( 100 ) ) ) ;
282
+ file. expect_is_empty ( ) . returning ( move || false ) ;
273
283
274
284
let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
275
285
let res = service. validate_attached_file ( & file) . await ;
@@ -283,6 +293,7 @@ mod tests {
283
293
file. expect_len ( ) . returning ( move || 100 ) ;
284
294
file. expect_name ( )
285
295
. returning ( move || Some ( String :: from ( "goodname" ) ) ) ;
296
+ file. expect_is_empty ( ) . returning ( move || false ) ;
286
297
file. expect_detect_content_type ( )
287
298
. returning ( move || Err ( std:: io:: Error :: other ( "test error" ) ) ) ;
288
299
@@ -298,6 +309,7 @@ mod tests {
298
309
file. expect_len ( ) . returning ( move || 100 ) ;
299
310
file. expect_name ( )
300
311
. returning ( move || Some ( String :: from ( "goodname" ) ) ) ;
312
+ file. expect_is_empty ( ) . returning ( move || false ) ;
301
313
file. expect_detect_content_type ( )
302
314
. returning ( move || Ok ( None ) ) ;
303
315
@@ -307,12 +319,24 @@ mod tests {
307
319
assert ! ( res. is_err( ) ) ;
308
320
}
309
321
322
+ #[ tokio:: test]
323
+ async fn validate_attached_file_checks_file_empty ( ) {
324
+ let mut file = MockUploadFileHandler :: new ( ) ;
325
+ file. expect_is_empty ( ) . returning ( move || true ) ;
326
+
327
+ let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
328
+ let res = service. validate_attached_file ( & file) . await ;
329
+
330
+ assert ! ( res. is_err( ) ) ;
331
+ }
332
+
310
333
#[ tokio:: test]
311
334
async fn validate_attached_file_checks_file_type_not_in_list ( ) {
312
335
let mut file = MockUploadFileHandler :: new ( ) ;
313
336
file. expect_len ( ) . returning ( move || 100 ) ;
314
337
file. expect_name ( )
315
338
. returning ( move || Some ( String :: from ( "goodname" ) ) ) ;
339
+ file. expect_is_empty ( ) . returning ( move || false ) ;
316
340
file. expect_detect_content_type ( )
317
341
. returning ( move || Ok ( Some ( String :: from ( "invalidfile" ) ) ) ) ;
318
342
@@ -326,6 +350,7 @@ mod tests {
326
350
async fn validate_attached_file_checks_valid ( ) {
327
351
let mut file = MockUploadFileHandler :: new ( ) ;
328
352
file. expect_len ( ) . returning ( move || 100 ) ;
353
+ file. expect_is_empty ( ) . returning ( move || false ) ;
329
354
file. expect_name ( )
330
355
. returning ( move || Some ( String :: from ( "goodname" ) ) ) ;
331
356
file. expect_detect_content_type ( )
0 commit comments