11use 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+ } ;
35use crate :: data:: UploadFileResult ;
46use crate :: persistence:: file_upload:: FileUploadStoreApi ;
57use crate :: { persistence, util} ;
@@ -41,9 +43,13 @@ impl ServiceTraitBounds for FileUploadService {}
4143#[ cfg_attr( not( target_arch = "wasm32" ) , async_trait) ]
4244impl FileUploadServiceApi for FileUploadService {
4345 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 {
4551 return Err ( Error :: Validation ( ValidationError :: FileIsTooBig (
46- MAX_FILE_SIZE_BYTES ,
52+ MAX_DOCUMENT_FILE_SIZE_BYTES ,
4753 ) ) ) ;
4854 }
4955
@@ -232,7 +238,8 @@ mod tests {
232238 async fn validate_attached_file_checks_file_size ( ) {
233239 let mut file = MockUploadFileHandler :: new ( ) ;
234240 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 ) ;
236243
237244 let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
238245 let res = service. validate_attached_file ( & file) . await ;
@@ -244,6 +251,7 @@ mod tests {
244251 async fn validate_attached_file_checks_file_name ( ) {
245252 let mut file = MockUploadFileHandler :: new ( ) ;
246253 file. expect_len ( ) . returning ( move || 100 ) ;
254+ file. expect_is_empty ( ) . returning ( move || false ) ;
247255 file. expect_name ( ) . returning ( move || None ) ;
248256
249257 let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
@@ -256,6 +264,7 @@ mod tests {
256264 async fn validate_attached_file_checks_file_name_empty ( ) {
257265 let mut file = MockUploadFileHandler :: new ( ) ;
258266 file. expect_len ( ) . returning ( move || 100 ) ;
267+ file. expect_is_empty ( ) . returning ( move || false ) ;
259268 file. expect_name ( ) . returning ( move || Some ( String :: from ( "" ) ) ) ;
260269
261270 let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
@@ -270,6 +279,7 @@ mod tests {
270279 file. expect_len ( ) . returning ( move || 100 ) ;
271280 file. expect_name ( )
272281 . returning ( move || Some ( "abc" . repeat ( 100 ) ) ) ;
282+ file. expect_is_empty ( ) . returning ( move || false ) ;
273283
274284 let service = get_service ( MockFileUploadStoreApiMock :: new ( ) ) ;
275285 let res = service. validate_attached_file ( & file) . await ;
@@ -283,6 +293,7 @@ mod tests {
283293 file. expect_len ( ) . returning ( move || 100 ) ;
284294 file. expect_name ( )
285295 . returning ( move || Some ( String :: from ( "goodname" ) ) ) ;
296+ file. expect_is_empty ( ) . returning ( move || false ) ;
286297 file. expect_detect_content_type ( )
287298 . returning ( move || Err ( std:: io:: Error :: other ( "test error" ) ) ) ;
288299
@@ -298,6 +309,7 @@ mod tests {
298309 file. expect_len ( ) . returning ( move || 100 ) ;
299310 file. expect_name ( )
300311 . returning ( move || Some ( String :: from ( "goodname" ) ) ) ;
312+ file. expect_is_empty ( ) . returning ( move || false ) ;
301313 file. expect_detect_content_type ( )
302314 . returning ( move || Ok ( None ) ) ;
303315
@@ -307,12 +319,24 @@ mod tests {
307319 assert ! ( res. is_err( ) ) ;
308320 }
309321
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+
310333 #[ tokio:: test]
311334 async fn validate_attached_file_checks_file_type_not_in_list ( ) {
312335 let mut file = MockUploadFileHandler :: new ( ) ;
313336 file. expect_len ( ) . returning ( move || 100 ) ;
314337 file. expect_name ( )
315338 . returning ( move || Some ( String :: from ( "goodname" ) ) ) ;
339+ file. expect_is_empty ( ) . returning ( move || false ) ;
316340 file. expect_detect_content_type ( )
317341 . returning ( move || Ok ( Some ( String :: from ( "invalidfile" ) ) ) ) ;
318342
@@ -326,6 +350,7 @@ mod tests {
326350 async fn validate_attached_file_checks_valid ( ) {
327351 let mut file = MockUploadFileHandler :: new ( ) ;
328352 file. expect_len ( ) . returning ( move || 100 ) ;
353+ file. expect_is_empty ( ) . returning ( move || false ) ;
329354 file. expect_name ( )
330355 . returning ( move || Some ( String :: from ( "goodname" ) ) ) ;
331356 file. expect_detect_content_type ( )
0 commit comments