Made enabled into product member variable to reduce calls.
diff --git a/api/src/main/java/io/mifos/portfolio/api/v1/domain/Product.java b/api/src/main/java/io/mifos/portfolio/api/v1/domain/Product.java
index 0e7274d..84d7fa4 100644
--- a/api/src/main/java/io/mifos/portfolio/api/v1/domain/Product.java
+++ b/api/src/main/java/io/mifos/portfolio/api/v1/domain/Product.java
@@ -68,6 +68,7 @@
private String createdBy;
private String lastModifiedOn;
private String lastModifiedBy;
+ private boolean enabled;
public Product() {
}
@@ -200,6 +201,14 @@
this.lastModifiedBy = lastModifiedBy;
}
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -227,22 +236,23 @@
@Override
public String toString() {
return "Product{" +
- "identifier='" + identifier + '\'' +
- ", name='" + name + '\'' +
- ", termRange=" + termRange +
- ", balanceRange=" + balanceRange +
- ", interestRange=" + interestRange +
- ", interestBasis=" + interestBasis +
- ", patternPackage='" + patternPackage + '\'' +
- ", description='" + description + '\'' +
- ", currencyCode='" + currencyCode + '\'' +
- ", minorCurrencyUnitDigits=" + minorCurrencyUnitDigits +
- ", accountAssignments=" + accountAssignments +
- ", parameters='" + parameters + '\'' +
- ", createdOn='" + createdOn + '\'' +
- ", createdBy='" + createdBy + '\'' +
- ", lastModifiedOn='" + lastModifiedOn + '\'' +
- ", lastModifiedBy='" + lastModifiedBy + '\'' +
- '}';
+ "identifier='" + identifier + '\'' +
+ ", name='" + name + '\'' +
+ ", termRange=" + termRange +
+ ", balanceRange=" + balanceRange +
+ ", interestRange=" + interestRange +
+ ", interestBasis=" + interestBasis +
+ ", patternPackage='" + patternPackage + '\'' +
+ ", description='" + description + '\'' +
+ ", currencyCode='" + currencyCode + '\'' +
+ ", minorCurrencyUnitDigits=" + minorCurrencyUnitDigits +
+ ", accountAssignments=" + accountAssignments +
+ ", parameters='" + parameters + '\'' +
+ ", createdOn='" + createdOn + '\'' +
+ ", createdBy='" + createdBy + '\'' +
+ ", lastModifiedOn='" + lastModifiedOn + '\'' +
+ ", lastModifiedBy='" + lastModifiedBy + '\'' +
+ ", enabled='" + enabled + '\'' +
+ '}';
}
}
diff --git a/component-test/src/main/java/io/mifos/portfolio/TestProducts.java b/component-test/src/main/java/io/mifos/portfolio/TestProducts.java
index 876d07a..cb52a9d 100644
--- a/component-test/src/main/java/io/mifos/portfolio/TestProducts.java
+++ b/component-test/src/main/java/io/mifos/portfolio/TestProducts.java
@@ -50,6 +50,7 @@
final Product productAsSaved = portfolioManager.getProduct(product.getIdentifier());
Assert.assertEquals(product, productAsSaved);
+ Assert.assertFalse(productAsSaved.isEnabled());
Assert.assertFalse(portfolioManager.getProductEnabled(product.getIdentifier()));
@@ -76,6 +77,9 @@
portfolioManager.enableProduct(product.getIdentifier(), true);
Assert.assertTrue(this.eventRecorder.wait(EventConstants.PUT_PRODUCT_ENABLE, product.getIdentifier()));
+ final Product productAfterEnable = portfolioManager.getProduct(product.getIdentifier());
+
+ Assert.assertTrue(productAfterEnable.isEnabled());
Assert.assertTrue(portfolioManager.getProductEnabled(product.getIdentifier()));
{
@@ -300,6 +304,13 @@
portfolioManager.deleteProduct("habberdash");
}
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldFailToCreateProductDirectlyAsEnabled() throws InterruptedException {
+ final Product product = Fixture.createAdjustedProduct(x -> {});
+ product.setEnabled(true);
+ portfolioManager.createProduct(product);
+ }
+
@Test
public void shouldDeleteProduct() throws InterruptedException {
final Product product = createAndEnableProduct();
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/mapper/ProductMapper.java b/service/src/main/java/io/mifos/portfolio/service/internal/mapper/ProductMapper.java
index 4e470b3..fa9977a 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/mapper/ProductMapper.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/mapper/ProductMapper.java
@@ -57,6 +57,7 @@
product.setCreatedOn(DateConverter.toIsoString(productEntity.getCreatedOn()));
product.setLastModifiedBy(productEntity.getLastModifiedBy());
product.setLastModifiedOn(DateConverter.toIsoString(productEntity.getLastModifiedOn()));
+ product.setEnabled(productEntity.getEnabled());
return product;
}
diff --git a/service/src/main/java/io/mifos/portfolio/service/rest/ProductRestController.java b/service/src/main/java/io/mifos/portfolio/service/rest/ProductRestController.java
index ece7c71..27cad2f 100644
--- a/service/src/main/java/io/mifos/portfolio/service/rest/ProductRestController.java
+++ b/service/src/main/java/io/mifos/portfolio/service/rest/ProductRestController.java
@@ -109,7 +109,10 @@
throw ServiceException.badRequest("CreatedOn must be 'null' upon initial creation.");
if (instance.getLastModifiedOn() != null)
- throw ServiceException.badRequest("LastModifiedOn must 'null' be upon initial creation.");
+ throw ServiceException.badRequest("LastModifiedOn must be 'null' be upon initial creation.");
+
+ if (instance.isEnabled())
+ throw ServiceException.badRequest("Enabled must be 'false' be upon initial creation.");
this.commandGateway.process(new CreateProductCommand(instance));
return new ResponseEntity<>(HttpStatus.ACCEPTED);
@@ -146,6 +149,9 @@
if (caseService.existsByProductIdentifier(productIdentifier))
throw ServiceException.conflict("Cases exist for product with the identifier '" + productIdentifier + "'. Product cannot be changed.");
+ if (instance.isEnabled())
+ throw ServiceException.badRequest("Enabled must be 'false' be during editing.");
+
commandGateway.process(new ChangeProductCommand(instance));
return ResponseEntity.accepted().build();