22
33import  com .azure .core .util .BinaryData ;
44import  com .fasterxml .jackson .databind .ObjectMapper ;
5+ import  org .jetbrains .annotations .NotNull ;
56import  org .junit .jupiter .api .AfterAll ;
67import  org .junit .jupiter .api .BeforeAll ;
78import  org .junit .jupiter .api .BeforeEach ;
1718import  uk .gov .hmcts .darts .arm .model .blobs .ArmBatchResponses ;
1819import  uk .gov .hmcts .darts .arm .model .blobs .ArmResponseBatchData ;
1920import  uk .gov .hmcts .darts .arm .model .blobs .ContinuationTokenBlobs ;
21+ import  uk .gov .hmcts .darts .arm .model .record .armresponse .ArmResponseInputUploadFileRecord ;
22+ import  uk .gov .hmcts .darts .arm .model .record .armresponse .ArmResponseUploadFileRecord ;
2023import  uk .gov .hmcts .darts .arm .service .DeleteArmResponseFilesHelper ;
2124import  uk .gov .hmcts .darts .arm .service .ExternalObjectDirectoryService ;
2225import  uk .gov .hmcts .darts .arm .util .files .BatchInputUploadFileFilenameProcessor ;
3639
3740import  java .time .Duration ;
3841import  java .time .OffsetDateTime ;
42+ import  java .time .format .DateTimeFormatter ;
3943import  java .util .ArrayList ;
4044import  java .util .Collections ;
4145import  java .util .List ;
4246import  java .util .Map ;
4347import  java .util .UUID ;
4448
49+ import  static  org .junit .jupiter .api .Assertions .assertEquals ;
50+ import  static  org .junit .jupiter .api .Assertions .assertThrows ;
4551import  static  org .mockito .ArgumentMatchers .any ;
4652import  static  org .mockito .ArgumentMatchers .anyList ;
4753import  static  org .mockito .Mockito .doNothing ;
@@ -78,7 +84,7 @@ class ArmBatchProcessResponseFilesImplTest {
7884    private  static  final  Integer  BATCH_SIZE  = 2 ;
7985    private  static  final  String  DATETIMEKEY  = "<datetimekey>" ;
8086    private  static  final  String  INPUT_UPLOAD_RESPONSE_DATETIME  = "2021-08-01T10:08:28.316382+00:00" ;
81-     private  static  final  String  UPLOAD_RESPONSE_TIMESTAMP_FORAMT  = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS[XXXX][XXXXX]" ;
87+     private  static  final  String  UPLOAD_RESPONSE_TIMESTAMP_FORAMT  = "yyyy-MM-dd'T'HH:mm:ss[ .SSSSSS] [XXXX][XXXXX]" ;
8288
8389    @ Mock 
8490    private  ExternalObjectDirectoryRepository  externalObjectDirectoryRepository ;
@@ -104,14 +110,15 @@ class ArmBatchProcessResponseFilesImplTest {
104110    private  AsyncTaskConfig  asyncTaskConfig ;
105111
106112    private  ArmBatchProcessResponseFilesImplProtectedMethodSupport  armBatchProcessResponseFiles ;
113+     private  ObjectMapper  objectMapper ;
107114
108115    @ BeforeEach 
109116    void  setupData () {
110117        lenient ().when (asyncTaskConfig .getThreads ()).thenReturn (1 );
111118        lenient ().when (asyncTaskConfig .getAsyncTimeout ()).thenReturn (Duration .ofSeconds (10 ));
112119
113120        ObjectMapperConfig  objectMapperConfig  = new  ObjectMapperConfig ();
114-         ObjectMapper   objectMapper  = objectMapperConfig .objectMapper ();
121+         objectMapper  = objectMapperConfig .objectMapper ();
115122
116123        when (armDataManagementConfiguration .getInputUploadResponseTimestampFormat ()).thenReturn (UPLOAD_RESPONSE_TIMESTAMP_FORAMT );
117124
@@ -501,6 +508,139 @@ void processResponseFiles_throwsInterruptedException() {
501508        }
502509    }
503510
511+     @ Test 
512+     void  getInputUploadFileTimestamp_shouldReturnParsedOffsetDateTime_WithMilliseconds () {
513+         // given 
514+         ArmBatchProcessResponseFilesImpl  armBatchProcessResponse  = new  ArmBatchProcessResponseFilesImpl (
515+             externalObjectDirectoryRepository ,
516+             armDataManagementApi ,
517+             fileOperationService ,
518+             armDataManagementConfiguration ,
519+             objectMapper ,
520+             userIdentity ,
521+             currentTimeHelper ,
522+             externalObjectDirectoryService ,
523+             logApi ,
524+             deleteArmResponseFilesHelper 
525+         );
526+         String  timestamp  = "2023-06-10T14:08:28.316382+00:00" ;
527+         ArmResponseInputUploadFileRecord  inputUploadFileRecord  = new  ArmResponseInputUploadFileRecord ();
528+         inputUploadFileRecord .setTimestamp (timestamp );
529+ 
530+         DateTimeFormatter  formatter  = DateTimeFormatter .ofPattern (UPLOAD_RESPONSE_TIMESTAMP_FORAMT );
531+ 
532+         // when 
533+         OffsetDateTime  result  = armBatchProcessResponse .getInputUploadFileTimestamp (inputUploadFileRecord );
534+ 
535+         // then 
536+         assertEquals (OffsetDateTime .parse (timestamp , formatter ), result );
537+     }
538+ 
539+     @ Test 
540+     void  getInputUploadFileTimestamp_shouldThrowException_WhereDateIsInvalid () {
541+         // given 
542+         ArmBatchProcessResponseFilesImpl  armBatchProcessResponse  = getArmBatchProcessResponseFiles ();
543+         String  invalidTimestamp  = "2023-06-10T14:08:28+00:00Z" ;
544+         ArmResponseInputUploadFileRecord  inputUploadFileRecord  = new  ArmResponseInputUploadFileRecord ();
545+         inputUploadFileRecord .setTimestamp (invalidTimestamp );
546+ 
547+         // when 
548+         assertThrows (IllegalArgumentException .class ,
549+                      () -> armBatchProcessResponse .getInputUploadFileTimestamp (inputUploadFileRecord ));
550+ 
551+     }
552+ 
553+     @ Test 
554+     void  getUploadFileRecordProcessTime_shouldReturnParsedOffsetDateTime_WithMilliseconds () {
555+         // given 
556+         ArmBatchProcessResponseFilesImpl  armBatchProcessResponse  = getArmBatchProcessResponseFiles ();
557+         String  timestamp  = "2023-06-10T14:08:28.316382+00:00" ;
558+         ArmResponseUploadFileRecord  armResponseUploadFileRecord  = new  ArmResponseUploadFileRecord ();
559+         armResponseUploadFileRecord .setProcessTime (timestamp );
560+ 
561+         DateTimeFormatter  formatter  = DateTimeFormatter .ofPattern (UPLOAD_RESPONSE_TIMESTAMP_FORAMT );
562+ 
563+         // when 
564+         OffsetDateTime  result  = armBatchProcessResponse .getUploadFileRecordProcessTime (armResponseUploadFileRecord );
565+ 
566+         // then 
567+         assertEquals (OffsetDateTime .parse (timestamp , formatter ), result );
568+     }
569+ 
570+     @ Test 
571+     void  getUploadFileRecordProcessTime_shouldReturnParsedOffsetDateTime_WithoutMilliseconds () {
572+         // given 
573+         ArmBatchProcessResponseFilesImpl  armBatchProcessResponse  = getArmBatchProcessResponseFiles ();
574+         String  timestamp  = "2023-06-10T14:08:28+00:00" ;
575+         ArmResponseUploadFileRecord  armResponseUploadFileRecord  = new  ArmResponseUploadFileRecord ();
576+         armResponseUploadFileRecord .setProcessTime (timestamp );
577+ 
578+         DateTimeFormatter  formatter  = DateTimeFormatter .ofPattern (UPLOAD_RESPONSE_TIMESTAMP_FORAMT );
579+ 
580+         // when 
581+         OffsetDateTime  result  = armBatchProcessResponse .getUploadFileRecordProcessTime (armResponseUploadFileRecord );
582+ 
583+         // then 
584+         assertEquals (OffsetDateTime .parse (timestamp , formatter ), result );
585+     }
586+ 
587+     @ Test 
588+     void  getUploadFileRecordProcessTime_shouldThrowException_WhereDateIsInvalid () {
589+         // given 
590+         ArmBatchProcessResponseFilesImpl  armBatchProcessResponse  = getArmBatchProcessResponseFiles ();
591+         String  invalidTimestamp  = "2023-06-10T14:08:28+00:00Z" ;
592+         ArmResponseUploadFileRecord  armResponseUploadFileRecord  = new  ArmResponseUploadFileRecord ();
593+         armResponseUploadFileRecord .setProcessTime (invalidTimestamp );
594+ 
595+         // when 
596+         assertThrows (IllegalArgumentException .class ,
597+                      () -> armBatchProcessResponse .getUploadFileRecordProcessTime (armResponseUploadFileRecord ));
598+ 
599+     }
600+ 
601+     @ Test 
602+     void  getInputUploadFileTimestamp_shouldReturnParsedOffsetDateTime_WithoutMilliseconds () {
603+         // given 
604+         ArmBatchProcessResponseFilesImpl  armBatchProcessResponse  = new  ArmBatchProcessResponseFilesImpl (
605+             externalObjectDirectoryRepository ,
606+             armDataManagementApi ,
607+             fileOperationService ,
608+             armDataManagementConfiguration ,
609+             objectMapper ,
610+             userIdentity ,
611+             currentTimeHelper ,
612+             externalObjectDirectoryService ,
613+             logApi ,
614+             deleteArmResponseFilesHelper 
615+         );
616+         String  timestamp  = "2023-06-10T14:08:28+00:00" ;
617+         ArmResponseInputUploadFileRecord  inputUploadFileRecord  = new  ArmResponseInputUploadFileRecord ();
618+         inputUploadFileRecord .setTimestamp (timestamp );
619+ 
620+         DateTimeFormatter  formatter  = DateTimeFormatter .ofPattern (UPLOAD_RESPONSE_TIMESTAMP_FORAMT );
621+ 
622+         // when 
623+         OffsetDateTime  result  = armBatchProcessResponse .getInputUploadFileTimestamp (inputUploadFileRecord );
624+ 
625+         // then 
626+         assertEquals (OffsetDateTime .parse (timestamp , formatter ), result );
627+     }
628+ 
629+     private  @ NotNull  ArmBatchProcessResponseFilesImpl  getArmBatchProcessResponseFiles () {
630+         return  new  ArmBatchProcessResponseFilesImpl (
631+             externalObjectDirectoryRepository ,
632+             armDataManagementApi ,
633+             fileOperationService ,
634+             armDataManagementConfiguration ,
635+             objectMapper ,
636+             userIdentity ,
637+             currentTimeHelper ,
638+             externalObjectDirectoryService ,
639+             logApi ,
640+             deleteArmResponseFilesHelper 
641+         );
642+     }
643+ 
504644    class  ArmBatchProcessResponseFilesImplProtectedMethodSupport  extends  ArmBatchProcessResponseFilesImpl  {
505645
506646        public  ArmBatchProcessResponseFilesImplProtectedMethodSupport (ExternalObjectDirectoryRepository  externalObjectDirectoryRepository ,
0 commit comments