Fixed bug whereby a co-signer with empty credit information failed to be persisted.
diff --git a/api/src/test/java/io/mifos/Fixture.java b/api/src/test/java/io/mifos/Fixture.java
index dfc89fe..3608179 100644
--- a/api/src/test/java/io/mifos/Fixture.java
+++ b/api/src/test/java/io/mifos/Fixture.java
@@ -24,10 +24,7 @@
import java.math.BigDecimal;
import java.time.temporal.ChronoUnit;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.*;
import java.util.function.Consumer;
import static io.mifos.individuallending.api.v1.domain.product.AccountDesignators.*;
@@ -137,7 +134,12 @@
cosignerCreditWorthinessSnapshot.setDebts(Collections.emptyList());
cosignerCreditWorthinessSnapshot.setAssets(Collections.singletonList(new CreditWorthinessFactor("a house", fixScale(BigDecimal.valueOf(50000)))));
cosignerCreditWorthinessSnapshot.setIncomeSources(Collections.singletonList(new CreditWorthinessFactor("retirement", fixScale(BigDecimal.valueOf(200)))));
- ret.setCreditWorthinessSnapshots(Arrays.asList(customerCreditWorthinessSnapshot, cosignerCreditWorthinessSnapshot));
+
+ final List<CreditWorthinessSnapshot> creditWorthinessSnapshots = new ArrayList<>();
+ creditWorthinessSnapshots.add(customerCreditWorthinessSnapshot);
+ creditWorthinessSnapshots.add(cosignerCreditWorthinessSnapshot);
+
+ ret.setCreditWorthinessSnapshots(creditWorthinessSnapshots);
return ret;
}
diff --git a/component-test/src/main/java/io/mifos/portfolio/Fixture.java b/component-test/src/main/java/io/mifos/portfolio/Fixture.java
index e6b7bbf..4235516 100644
--- a/component-test/src/main/java/io/mifos/portfolio/Fixture.java
+++ b/component-test/src/main/java/io/mifos/portfolio/Fixture.java
@@ -24,10 +24,7 @@
import java.math.BigDecimal;
import java.time.temporal.ChronoUnit;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.*;
import java.util.function.Consumer;
import static io.mifos.individuallending.api.v1.domain.product.AccountDesignators.*;
@@ -143,7 +140,11 @@
cosignerCreditWorthinessSnapshot.setAssets(Collections.singletonList(new CreditWorthinessFactor("a house", fixScale(BigDecimal.valueOf(50000)))));
cosignerCreditWorthinessSnapshot.setIncomeSources(Collections.singletonList(new CreditWorthinessFactor("retirement", fixScale(BigDecimal.valueOf(200)))));
- ret.setCreditWorthinessSnapshots(Arrays.asList(customerCreditWorthinessSnapshot, cosignerCreditWorthinessSnapshot));
+ final List<CreditWorthinessSnapshot> creditWorthinessSnapshots = new ArrayList<>();
+ creditWorthinessSnapshots.add(customerCreditWorthinessSnapshot);
+ creditWorthinessSnapshots.add(cosignerCreditWorthinessSnapshot);
+
+ ret.setCreditWorthinessSnapshots(creditWorthinessSnapshots);
return ret;
}
diff --git a/component-test/src/main/java/io/mifos/portfolio/TestCases.java b/component-test/src/main/java/io/mifos/portfolio/TestCases.java
index 37e4619..1112a68 100644
--- a/component-test/src/main/java/io/mifos/portfolio/TestCases.java
+++ b/component-test/src/main/java/io/mifos/portfolio/TestCases.java
@@ -19,6 +19,7 @@
import io.mifos.core.test.domain.TimeStampChecker;
import io.mifos.individuallending.api.v1.domain.caseinstance.CaseParameters;
import io.mifos.individuallending.api.v1.domain.caseinstance.CreditWorthinessFactor;
+import io.mifos.individuallending.api.v1.domain.caseinstance.CreditWorthinessSnapshot;
import io.mifos.portfolio.api.v1.domain.AccountAssignment;
import io.mifos.portfolio.api.v1.domain.Case;
import io.mifos.portfolio.api.v1.domain.CasePage;
@@ -162,6 +163,25 @@
}
@Test
+ public void shouldCreateCosignerWithoutDetails() throws InterruptedException {
+ final Product product = createAndEnableProduct();
+
+ final CaseParameters caseParameters = Fixture.createAdjustedCaseParameters(x -> {
+ final CreditWorthinessSnapshot bob = new CreditWorthinessSnapshot("bob");
+ bob.setDebts(Collections.emptyList());
+ bob.setAssets(Collections.emptyList());
+ bob.setIncomeSources(Collections.emptyList());
+ x.getCreditWorthinessSnapshots().add(bob);
+ });
+ final String caseParametersAsString = new Gson().toJson(caseParameters);
+ final Case caseInstance = createAdjustedCase(product.getIdentifier(), x -> x.setParameters(caseParametersAsString));
+
+ final Case caseAsSaved = portfolioManager.getCase(product.getIdentifier(), caseInstance.getIdentifier());
+
+ Assert.assertEquals(caseInstance, caseAsSaved);
+ }
+
+ @Test
public void shouldThrowWhenProductNotActivated() throws InterruptedException {
final Product product = createProduct();
diff --git a/service/src/main/java/io/mifos/individuallending/internal/mapper/CaseParametersMapper.java b/service/src/main/java/io/mifos/individuallending/internal/mapper/CaseParametersMapper.java
index 6de6fc9..6be2ef8 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/mapper/CaseParametersMapper.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/mapper/CaseParametersMapper.java
@@ -24,6 +24,7 @@
import io.mifos.portfolio.api.v1.domain.PaymentCycle;
import io.mifos.portfolio.api.v1.domain.TermRange;
+import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -59,19 +60,42 @@
final List<CreditWorthinessSnapshot> creditWorthinessSnapshots,
final CaseParametersEntity caseParametersEntity) {
return Stream.iterate(0, i -> i+1).limit(creditWorthinessSnapshots.size())
- .flatMap(i -> {
- final String customerId = creditWorthinessSnapshots.get(i).getForCustomer();
- return Stream.concat(Stream.concat(
- mapSnapshotPartToFactors(customerId, i,
- CreditWorthinessFactorType.ASSET, creditWorthinessSnapshots.get(i).getAssets(),
- caseParametersEntity),
- mapSnapshotPartToFactors(customerId, i,
- CreditWorthinessFactorType.INCOME_SOURCE, creditWorthinessSnapshots.get(i).getIncomeSources(),
- caseParametersEntity)),
- mapSnapshotPartToFactors(customerId, i,
- CreditWorthinessFactorType.DEBT, creditWorthinessSnapshots.get(i).getDebts(),
- caseParametersEntity));
- }).collect(Collectors.toSet());
+ .flatMap(i -> mapSnapshotToFactors(
+ creditWorthinessSnapshots.get(i), i, caseParametersEntity)).collect(Collectors.toSet());
+ }
+
+ private static Stream<? extends CaseCreditWorthinessFactorEntity> mapSnapshotToFactors(
+ final CreditWorthinessSnapshot creditWorthinessSnapshot,
+ final int i,
+ final CaseParametersEntity caseParametersEntity) {
+ final String customerId = creditWorthinessSnapshot.getForCustomer();
+ return Stream.concat(Stream.concat(Stream.concat(
+ mapSnapshotPartToFactors(customerId, i,
+ CreditWorthinessFactorType.ASSET, creditWorthinessSnapshot.getAssets(),
+ caseParametersEntity),
+ mapSnapshotPartToFactors(customerId, i,
+ CreditWorthinessFactorType.INCOME_SOURCE, creditWorthinessSnapshot.getIncomeSources(),
+ caseParametersEntity)),
+ mapSnapshotPartToFactors(customerId, i,
+ CreditWorthinessFactorType.DEBT, creditWorthinessSnapshot.getDebts(),
+ caseParametersEntity)),
+ createPlaceHolder(customerId, i, caseParametersEntity)
+ );
+ }
+
+ private static Stream<CaseCreditWorthinessFactorEntity> createPlaceHolder(
+ final String customerIdentifier,
+ final int positionInCustomers,
+ final CaseParametersEntity caseParametersEntity) {
+ final CaseCreditWorthinessFactorEntity placeHolder = new CaseCreditWorthinessFactorEntity();
+ placeHolder.setFactorType(CreditWorthinessFactorType.PLACE_HOLDER);
+ placeHolder.setCustomerIdentifier(customerIdentifier);
+ placeHolder.setPositionInCustomers(positionInCustomers);
+ placeHolder.setPositionInFactor(0);
+ placeHolder.setCaseId(caseParametersEntity);
+ placeHolder.setAmount(BigDecimal.ZERO);
+ placeHolder.setDescription("placeholder");
+ return Stream.of(placeHolder);
}
private static Stream<CaseCreditWorthinessFactorEntity> mapSnapshotPartToFactors(
diff --git a/service/src/main/java/io/mifos/individuallending/internal/repository/CreditWorthinessFactorType.java b/service/src/main/java/io/mifos/individuallending/internal/repository/CreditWorthinessFactorType.java
index f07689c..0e75198 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/repository/CreditWorthinessFactorType.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/repository/CreditWorthinessFactorType.java
@@ -19,5 +19,5 @@
* @author Myrle Krantz
*/
public enum CreditWorthinessFactorType {
- INCOME_SOURCE, ASSET, DEBT
+ INCOME_SOURCE, ASSET, DEBT, PLACE_HOLDER
}