@@ -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