@@ -65,6 +65,7 @@ class DelinquencyActionParseAndValidatorTest {
6565 public void testParseAndValidationIsOKForPause () throws JsonProcessingException {
6666 Loan loan = Mockito .mock (Loan .class );
6767 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
68+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("07 September 2022" ));
6869
6970 JsonCommand command = delinquencyAction ("pause" , "09 September 2022" , "19 September 2022" );
7071
@@ -96,6 +97,7 @@ public void testParseAndValidationIsOKForResume() throws JsonProcessingException
9697 public void testPauseBothStartAndEndDateIsOverlappingWithAnActivePause () throws JsonProcessingException {
9798 Loan loan = Mockito .mock (Loan .class );
9899 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
100+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("07 September 2022" ));
99101
100102 List <LoanDelinquencyAction > existing = List .of (loanDelinquencyAction (PAUSE , "14 September 2022" , "22 September 2022" ));
101103 JsonCommand command = delinquencyAction ("pause" , "09 September 2022" , "15 September 2022" );
@@ -111,6 +113,7 @@ public void testPauseBothStartAndEndDateIsOverlappingWithAnActivePause() throws
111113 public void testPauseStartIsOverlappingWithAnActivePause () throws JsonProcessingException {
112114 Loan loan = Mockito .mock (Loan .class );
113115 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
116+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("11 September 2022" ));
114117
115118 List <LoanDelinquencyAction > existing = List .of (loanDelinquencyAction (PAUSE , "14 September 2022" , "22 September 2022" ));
116119 JsonCommand command = delinquencyAction ("pause" , "15 September 2022" , "23 September 2022" );
@@ -126,7 +129,7 @@ public void testPauseStartIsOverlappingWithAnActivePause() throws JsonProcessing
126129 public void testNewPauseEndIsOverlappingWithExistingPause () throws JsonProcessingException {
127130 Loan loan = Mockito .mock (Loan .class );
128131 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
129-
132+ Mockito . when ( loan . getDisbursementDate ()). thenReturn ( localDate ( "11 September 2022" ));
130133 List <LoanDelinquencyAction > existing = List .of (loanDelinquencyAction (PAUSE , "15 September 2022" , "22 September 2022" ));
131134 JsonCommand command = delinquencyAction ("pause" , "13 September 2022" , "20 September 2022" );
132135 List <LoanDelinquencyActionData > effectiveList = List .of (loanDelinquencyActionData (existing .get (0 )));
@@ -141,6 +144,7 @@ public void testNewPauseEndIsOverlappingWithExistingPause() throws JsonProcessin
141144 public void testNewPauseIsOverlappingWithExistingPauseBecauseSameDates () throws JsonProcessingException {
142145 Loan loan = Mockito .mock (Loan .class );
143146 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
147+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("11 September 2022" ));
144148
145149 List <LoanDelinquencyAction > existing = List .of (loanDelinquencyAction (PAUSE , "15 September 2022" , "22 September 2022" ));
146150 JsonCommand command = delinquencyAction ("pause" , "15 September 2022" , "22 September 2022" );
@@ -156,6 +160,7 @@ public void testNewPauseIsOverlappingWithExistingPauseBecauseSameDates() throws
156160 public void testNewPauseIsNotOverlappingBecauseThereWasAResume () throws JsonProcessingException {
157161 Loan loan = Mockito .mock (Loan .class );
158162 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
163+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("11 September 2022" ));
159164
160165 JsonCommand command = delinquencyAction ("pause" , "18 September 2022" , "20 September 2022" );
161166
@@ -269,13 +274,15 @@ public void testValidationErrorPausePeriodShouldBeAtLeastOneDay() throws JsonPro
269274 }
270275
271276 @ Test
272- public void testValidationErrorPausePeriodMustBeInFuture () throws JsonProcessingException {
277+ public void testValidationErrorPausePeriodMustNotBeBeforeDisbursement () throws JsonProcessingException {
273278 Loan loan = Mockito .mock (Loan .class );
274279 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
280+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("11 September 2022" ));
275281
276282 JsonCommand command = delinquencyAction ("pause" , "08 September 2022" , "09 September 2022" );
277283
278- assertPlatformValidationException ("Start date of pause period must be in the future" , "loan-delinquency-action-invalid-start-date" ,
284+ assertPlatformValidationException ("Start date of pause period must be after first disbursal date" ,
285+ "loan-delinquency-action-invalid-start-date" ,
279286 () -> underTest .validateAndParseUpdate (command , loan , List .of (), localDate ("09 September 2022" )));
280287 }
281288
@@ -308,6 +315,7 @@ public void testStartDateIsMissingForResume() {
308315 public void testNewPausePeriodStartingOnExistingEndDate () throws JsonProcessingException {
309316 Loan loan = Mockito .mock (Loan .class );
310317 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
318+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("11 September 2022" ));
311319
312320 JsonCommand command = delinquencyAction ("pause" , "18 September 2022" , "20 September 2022" );
313321
@@ -324,6 +332,7 @@ public void testNewPausePeriodStartingOnExistingEndDate() throws JsonProcessingE
324332 public void testNewPauseEndingOnExistingStartDate () throws JsonProcessingException {
325333 Loan loan = Mockito .mock (Loan .class );
326334 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
335+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("11 September 2022" ));
327336
328337 JsonCommand command = delinquencyAction ("pause" , "18 September 2022" , "20 September 2022" );
329338
@@ -340,6 +349,7 @@ public void testNewPauseEndingOnExistingStartDate() throws JsonProcessingExcepti
340349 public void testNewPausePeriodStartingOnExistingEffectiveEndDate () throws JsonProcessingException {
341350 Loan loan = Mockito .mock (Loan .class );
342351 Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
352+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("11 September 2022" ));
343353
344354 JsonCommand command = delinquencyAction ("pause" , "18 September 2022" , "20 September 2022" );
345355
@@ -355,6 +365,21 @@ public void testNewPausePeriodStartingOnExistingEffectiveEndDate() throws JsonPr
355365 Assertions .assertEquals (localDate ("20 September 2022" ), parsedDelinquencyAction .getEndDate ());
356366 }
357367
368+ @ Test
369+ public void testParseAndValidationIsOKForBackdatedPause () throws JsonProcessingException {
370+ Loan loan = Mockito .mock (Loan .class );
371+ Mockito .when (loan .getStatus ()).thenReturn (LoanStatus .ACTIVE );
372+ Mockito .when (loan .getDisbursementDate ()).thenReturn (localDate ("07 September 2022" ));
373+
374+ JsonCommand command = delinquencyAction ("pause" , "08 September 2022" , "19 September 2022" );
375+
376+ LoanDelinquencyAction parsedDelinquencyAction = underTest .validateAndParseUpdate (command , loan , List .of (),
377+ localDate ("09 September 2022" ));
378+ Assertions .assertEquals (PAUSE , parsedDelinquencyAction .getAction ());
379+ Assertions .assertEquals (localDate ("08 September 2022" ), parsedDelinquencyAction .getStartDate ());
380+ Assertions .assertEquals (localDate ("19 September 2022" ), parsedDelinquencyAction .getEndDate ());
381+ }
382+
358383 @ NotNull
359384 private JsonCommand delinquencyAction (@ Nullable String action , @ Nullable String startDate , @ Nullable String endDate )
360385 throws JsonProcessingException {
0 commit comments