FINERACT-1992 Fixing consecutive pause periods

This commit is contained in:
Peter Bagrij
2023-11-30 11:47:01 +01:00
committed by Adam Saghy
parent 570b67b18e
commit b08fd9b573
2 changed files with 83 additions and 31 deletions
@@ -111,32 +111,6 @@ class DelinquencyActionParseAndValidatorTest {
() -> underTest.validateAndParseUpdate(command, loan, existing, localDate("09 September 2022")));
}
@Test
public void testNewPauseEndIsTheSameAsExistingPauseStart() throws JsonProcessingException {
Loan loan = Mockito.mock(Loan.class);
Mockito.when(loan.getStatus()).thenReturn(LoanStatus.ACTIVE);
List<LoanDelinquencyAction> existing = List.of(loanDelinquencyAction(PAUSE, "15 September 2022", "22 September 2022"));
JsonCommand command = delinquencyAction("pause", "09 September 2022", "15 September 2022");
assertPlatformValidationException("Delinquency pause period cannot overlap with another pause period",
"loan-delinquency-action-overlapping",
() -> underTest.validateAndParseUpdate(command, loan, existing, localDate("09 September 2022")));
}
@Test
public void testNewPauseEndIsTheSameAsExistingPauseEnd() throws JsonProcessingException {
Loan loan = Mockito.mock(Loan.class);
Mockito.when(loan.getStatus()).thenReturn(LoanStatus.ACTIVE);
List<LoanDelinquencyAction> existing = List.of(loanDelinquencyAction(PAUSE, "15 September 2022", "22 September 2022"));
JsonCommand command = delinquencyAction("pause", "22 September 2022", "25 September 2022");
assertPlatformValidationException("Delinquency pause period cannot overlap with another pause period",
"loan-delinquency-action-overlapping",
() -> underTest.validateAndParseUpdate(command, loan, existing, localDate("09 September 2022")));
}
@Test
public void testNewPauseEndIsOverlappingWithExistingPause() throws JsonProcessingException {
Loan loan = Mockito.mock(Loan.class);
@@ -276,6 +250,57 @@ class DelinquencyActionParseAndValidatorTest {
.validateAndParseUpdate(delinquencyAction("resume", null, null), loan, List.of(), localDate("09 September 2022")));
}
@Test
public void testNewPausePeriodStartingOnExistingEndDate() throws JsonProcessingException {
Loan loan = Mockito.mock(Loan.class);
Mockito.when(loan.getStatus()).thenReturn(LoanStatus.ACTIVE);
JsonCommand command = delinquencyAction("pause", "18 September 2022", "20 September 2022");
List<LoanDelinquencyAction> existing = List.of(loanDelinquencyAction(PAUSE, "15 September 2022", "18 September 2022"));
LoanDelinquencyAction parsedDelinquencyAction = underTest.validateAndParseUpdate(command, loan, existing,
localDate("18 September 2022"));
Assertions.assertEquals(PAUSE, parsedDelinquencyAction.getAction());
Assertions.assertEquals(localDate("18 September 2022"), parsedDelinquencyAction.getStartDate());
Assertions.assertEquals(localDate("20 September 2022"), parsedDelinquencyAction.getEndDate());
}
@Test
public void testNewPauseEndingOnExistingStartDate() throws JsonProcessingException {
Loan loan = Mockito.mock(Loan.class);
Mockito.when(loan.getStatus()).thenReturn(LoanStatus.ACTIVE);
JsonCommand command = delinquencyAction("pause", "18 September 2022", "20 September 2022");
List<LoanDelinquencyAction> existing = List.of(loanDelinquencyAction(PAUSE, "20 September 2022", "25 September 2022"));
LoanDelinquencyAction parsedDelinquencyAction = underTest.validateAndParseUpdate(command, loan, existing,
localDate("18 September 2022"));
Assertions.assertEquals(PAUSE, parsedDelinquencyAction.getAction());
Assertions.assertEquals(localDate("18 September 2022"), parsedDelinquencyAction.getStartDate());
Assertions.assertEquals(localDate("20 September 2022"), parsedDelinquencyAction.getEndDate());
}
@Test
public void testNewPausePeriodStartingOnExistingEffectiveEndDate() throws JsonProcessingException {
Loan loan = Mockito.mock(Loan.class);
Mockito.when(loan.getStatus()).thenReturn(LoanStatus.ACTIVE);
JsonCommand command = delinquencyAction("pause", "18 September 2022", "20 September 2022");
List<LoanDelinquencyAction> existing = List.of(//
loanDelinquencyAction(PAUSE, "15 September 2022", "20 September 2022"), //
loanDelinquencyAction(RESUME, "18 September 2022") //
);
LoanDelinquencyAction parsedDelinquencyAction = underTest.validateAndParseUpdate(command, loan, existing,
localDate("18 September 2022"));
Assertions.assertEquals(PAUSE, parsedDelinquencyAction.getAction());
Assertions.assertEquals(localDate("18 September 2022"), parsedDelinquencyAction.getStartDate());
Assertions.assertEquals(localDate("20 September 2022"), parsedDelinquencyAction.getEndDate());
}
@NotNull
private JsonCommand delinquencyAction(@Nullable String action, @Nullable String startDate, @Nullable String endDate)
throws JsonProcessingException {