Skip to content

Commit 9fe5da3

Browse files
FINERACT-2455: Add minimumPaymentType to WC delinquency RESCHEDULE action
1 parent 5e96b4d commit 9fe5da3

File tree

11 files changed

+809
-519
lines changed

11 files changed

+809
-519
lines changed

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalDelinquencyRescheduleStepDef.java

Lines changed: 68 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -96,31 +96,75 @@ public void createWcDelinquencyBucket(final int frequency, final String frequenc
9696
frequencyType, minimumPayment, minimumPaymentType);
9797
}
9898

99-
@When("Admin creates WC delinquency reschedule action with minimumPayment {int} and frequency {int} {word}")
100-
public void createRescheduleAction(final int minimumPayment, final int frequency, final String frequencyType) {
101-
createRescheduleActionInternal(new BigDecimal(minimumPayment), frequency, frequencyType);
99+
@When("Admin creates WC delinquency reschedule action with the following parameters:")
100+
public void createRescheduleAction(final DataTable table) {
101+
final Map<String, String> params = table.asMaps().get(0);
102+
final PostWorkingCapitalLoansDelinquencyActionRequest request = new PostWorkingCapitalLoansDelinquencyActionRequest();
103+
request.setAction("reschedule");
104+
request.setLocale("en");
105+
Optional.ofNullable(params.get("minimumPayment")).ifPresent(v -> request.setMinimumPayment(new BigDecimal(v)));
106+
Optional.ofNullable(params.get("minimumPaymentType")).ifPresent(request::setMinimumPaymentType);
107+
Optional.ofNullable(params.get("frequency")).ifPresent(v -> request.setFrequency(Integer.parseInt(v)));
108+
Optional.ofNullable(params.get("frequencyType")).ifPresent(request::setFrequencyType);
109+
executeRescheduleAction(request);
102110
}
103111

104-
@Then("Admin fails to create WC delinquency reschedule action with minimumPayment {int} and frequency {int} {word}")
105-
public void failToCreateRescheduleAction(final int minimumPayment, final int frequency, final String frequencyType) {
112+
@Then("Admin fails to create WC delinquency reschedule action with minimumPayment {int} {word} and frequency {int} {word}")
113+
public void failToCreateRescheduleAction(final int minimumPayment, final String minimumPaymentType, final int frequency,
114+
final String frequencyType) {
106115
final Long loanId = getLoanId();
107-
final PostWorkingCapitalLoansDelinquencyActionRequest request = buildRescheduleRequest(new BigDecimal(minimumPayment), frequency,
108-
frequencyType);
109-
log.info("Attempting to create RESCHEDULE action for WC loan {} (expecting failure): minimumPayment={}, frequency={} {}", loanId,
110-
minimumPayment, frequency, frequencyType);
116+
final PostWorkingCapitalLoansDelinquencyActionRequest request = buildRescheduleRequest(new BigDecimal(minimumPayment),
117+
minimumPaymentType, frequency, frequencyType);
118+
log.info("Attempting to create RESCHEDULE action for WC loan {} (expecting failure): minimumPayment={} {}, frequency={} {}", loanId,
119+
minimumPayment, minimumPaymentType, frequency, frequencyType);
111120

112121
fail(() -> fineractFeignClient.workingCapitalLoanDelinquencyActions().createDelinquencyAction(loanId, request));
113122
}
114123

115-
@Then("Admin fails to create WC delinquency reschedule action with minimumPayment {int} and frequency {int} {word} with error containing {string}")
116-
public void failToCreateRescheduleActionWithMessage(final int minimumPayment, final int frequency, final String frequencyType,
117-
final String expectedMessage) {
124+
@Then("Admin fails to create WC delinquency reschedule action with minimumPayment {int} {word} and frequency {int} {word} with error containing {string}")
125+
public void failToCreateRescheduleActionWithMessage(final int minimumPayment, final String minimumPaymentType, final int frequency,
126+
final String frequencyType, final String expectedMessage) {
118127
final Long loanId = getLoanId();
119-
final PostWorkingCapitalLoansDelinquencyActionRequest request = buildRescheduleRequest(new BigDecimal(minimumPayment), frequency,
120-
frequencyType);
128+
final PostWorkingCapitalLoansDelinquencyActionRequest request = buildRescheduleRequest(new BigDecimal(minimumPayment),
129+
minimumPaymentType, frequency, frequencyType);
121130
log.info(
122-
"Attempting to create RESCHEDULE action for WC loan {} (expecting HTTP 400 and message '{}'): minimumPayment={}, frequency={} {}",
123-
loanId, expectedMessage, minimumPayment, frequency, frequencyType);
131+
"Attempting to create RESCHEDULE action for WC loan {} (expecting HTTP 400 and message '{}'): minimumPayment={} {}, frequency={} {}",
132+
loanId, expectedMessage, minimumPayment, minimumPaymentType, frequency, frequencyType);
133+
134+
final CallFailedRuntimeException exception = fail(
135+
() -> fineractFeignClient.workingCapitalLoanDelinquencyActions().createDelinquencyAction(loanId, request));
136+
assertThat(exception.getStatus()).as("HTTP status code").isEqualTo(400);
137+
assertThat(exception.getDeveloperMessage()).as("Developer message").contains(expectedMessage);
138+
}
139+
140+
@Then("Admin fails to create WC delinquency reschedule action with error containing {string} and the following parameters:")
141+
public void failToCreateRescheduleActionWithTableAndMessage(final String expectedMessage, final DataTable table) {
142+
final Long loanId = getLoanId();
143+
final Map<String, String> params = table.asMaps().get(0);
144+
final PostWorkingCapitalLoansDelinquencyActionRequest request = new PostWorkingCapitalLoansDelinquencyActionRequest();
145+
request.setAction("reschedule");
146+
request.setLocale("en");
147+
Optional.ofNullable(params.get("minimumPayment")).ifPresent(v -> request.setMinimumPayment(new BigDecimal(v)));
148+
Optional.ofNullable(params.get("minimumPaymentType")).ifPresent(request::setMinimumPaymentType);
149+
Optional.ofNullable(params.get("frequency")).ifPresent(v -> request.setFrequency(Integer.parseInt(v)));
150+
Optional.ofNullable(params.get("frequencyType")).ifPresent(request::setFrequencyType);
151+
log.info("Attempting to create RESCHEDULE action for WC loan {} (expecting HTTP 400 and message '{}'): {}", loanId, expectedMessage,
152+
params);
153+
154+
final CallFailedRuntimeException exception = fail(
155+
() -> fineractFeignClient.workingCapitalLoanDelinquencyActions().createDelinquencyAction(loanId, request));
156+
assertThat(exception.getStatus()).as("HTTP status code").isEqualTo(400);
157+
assertThat(exception.getDeveloperMessage()).as("Developer message").contains(expectedMessage);
158+
}
159+
160+
@Then("Admin fails to create WC delinquency reschedule action with no parameters with error containing {string}")
161+
public void failToCreateEmptyRescheduleAction(final String expectedMessage) {
162+
final Long loanId = getLoanId();
163+
final PostWorkingCapitalLoansDelinquencyActionRequest request = new PostWorkingCapitalLoansDelinquencyActionRequest();
164+
request.setAction("reschedule");
165+
request.setLocale("en");
166+
log.info("Attempting to create empty RESCHEDULE action for WC loan {} (expecting HTTP 400 and message '{}')", loanId,
167+
expectedMessage);
124168

125169
final CallFailedRuntimeException exception = fail(
126170
() -> fineractFeignClient.workingCapitalLoanDelinquencyActions().createDelinquencyAction(loanId, request));
@@ -185,16 +229,9 @@ public void verifySpecificPeriods(final DataTable table) {
185229
}
186230
}
187231

188-
@When("Admin creates WC delinquency reschedule action with decimal minimumPayment {string} and frequency {int} {word}")
189-
public void createRescheduleActionWithDecimal(final String minimumPayment, final int frequency, final String frequencyType) {
190-
createRescheduleActionInternal(new BigDecimal(minimumPayment), frequency, frequencyType);
191-
}
192-
193-
private void createRescheduleActionInternal(final BigDecimal minimumPayment, final int frequency, final String frequencyType) {
232+
private void executeRescheduleAction(final PostWorkingCapitalLoansDelinquencyActionRequest request) {
194233
final Long loanId = getLoanId();
195-
final PostWorkingCapitalLoansDelinquencyActionRequest request = buildRescheduleRequest(minimumPayment, frequency, frequencyType);
196-
log.info("Creating RESCHEDULE action for WC loan {}: minimumPayment={}, frequency={} {}", loanId, minimumPayment, frequency,
197-
frequencyType);
234+
log.info("Creating RESCHEDULE action for WC loan {}: {}", loanId, request);
198235

199236
final PostWorkingCapitalLoansDelinquencyActionResponse result = ok(
200237
() -> fineractFeignClient.workingCapitalLoanDelinquencyActions().createDelinquencyAction(loanId, request));
@@ -216,6 +253,9 @@ private void verifyActionField(final WorkingCapitalLoanDelinquencyActionData act
216253
() -> assertThat(actual.getEndDate()).as("endDate").isNull());
217254
case "minimumPayment" ->
218255
assertThat(actual.getMinimumPayment()).as("minimumPayment").isEqualByComparingTo(new BigDecimal(expected));
256+
case "minimumPaymentType" ->
257+
verifyOptionalField(expected, v -> assertThat(actual.getMinimumPaymentType().name()).as("minimumPaymentType").isEqualTo(v),
258+
() -> assertThat(actual.getMinimumPaymentType()).as("minimumPaymentType").isNull());
219259
case "frequency" -> assertThat(actual.getFrequency()).as("frequency").isEqualTo(Integer.parseInt(expected));
220260
case "frequencyType" -> assertThat(actual.getFrequencyType().name()).as("frequencyType").isEqualTo(expected);
221261
default -> throw new IllegalArgumentException("Unknown action field: " + field);
@@ -255,11 +295,12 @@ private Long getLoanId() {
255295
return loanResponse.getLoanId();
256296
}
257297

258-
private PostWorkingCapitalLoansDelinquencyActionRequest buildRescheduleRequest(final BigDecimal minimumPayment, final int frequency,
259-
final String frequencyType) {
298+
private PostWorkingCapitalLoansDelinquencyActionRequest buildRescheduleRequest(final BigDecimal minimumPayment,
299+
final String minimumPaymentType, final int frequency, final String frequencyType) {
260300
final PostWorkingCapitalLoansDelinquencyActionRequest request = new PostWorkingCapitalLoansDelinquencyActionRequest();
261301
request.setAction("reschedule");
262302
request.setMinimumPayment(minimumPayment);
303+
request.setMinimumPaymentType(minimumPaymentType);
263304
request.setFrequency(frequency);
264305
request.setFrequencyType(frequencyType);
265306
request.setLocale("en");

0 commit comments

Comments
 (0)