Cannot create readonly charge definitions.
diff --git a/component-test/src/main/java/io/mifos/portfolio/TestChargeDefinitions.java b/component-test/src/main/java/io/mifos/portfolio/TestChargeDefinitions.java
index f65e8a6..6673c26 100644
--- a/component-test/src/main/java/io/mifos/portfolio/TestChargeDefinitions.java
+++ b/component-test/src/main/java/io/mifos/portfolio/TestChargeDefinitions.java
@@ -128,12 +128,30 @@
portfolioManager.createChargeDefinition(product.getIdentifier(), chargeDefinition);
Assert.assertTrue(this.eventRecorder.wait(EventConstants.POST_CHARGE_DEFINITION,
- new ChargeDefinitionEvent(product.getIdentifier(), chargeDefinition.getIdentifier())));
+ new ChargeDefinitionEvent(product.getIdentifier(), chargeDefinition.getIdentifier())));
final ChargeDefinition chargeDefinitionAsCreated = portfolioManager.getChargeDefinition(product.getIdentifier(), chargeDefinition.getIdentifier());
Assert.assertEquals(chargeDefinition, chargeDefinitionAsCreated);
}
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldNotCreateReadOnlyChargeDefinition() throws InterruptedException {
+ final Product product = createProduct();
+
+ final ChargeDefinition chargeDefinition = new ChargeDefinition();
+ chargeDefinition.setIdentifier("rando123456");
+ chargeDefinition.setName("ditto12356");
+ chargeDefinition.setFromAccountDesignator("1234-4321");
+ chargeDefinition.setToAccountDesignator("4321-1234");
+ chargeDefinition.setAmount(BigDecimal.ONE.setScale(4, BigDecimal.ROUND_UNNECESSARY));
+ chargeDefinition.setChargeMethod(ChargeDefinition.ChargeMethod.FIXED);
+ chargeDefinition.setChargeAction(Action.OPEN.name());
+ chargeDefinition.setDescription("who cares what the description is?");
+ chargeDefinition.setReadOnly(true);
+
+ portfolioManager.createChargeDefinition(product.getIdentifier(), chargeDefinition);
+ }
+
@Test
public void shouldChangeInterestChargeDefinition() throws InterruptedException {
diff --git a/service/src/main/java/io/mifos/portfolio/service/rest/ChargeDefinitionRestController.java b/service/src/main/java/io/mifos/portfolio/service/rest/ChargeDefinitionRestController.java
index 9e74ff2..df91bb3 100644
--- a/service/src/main/java/io/mifos/portfolio/service/rest/ChargeDefinitionRestController.java
+++ b/service/src/main/java/io/mifos/portfolio/service/rest/ChargeDefinitionRestController.java
@@ -125,6 +125,9 @@
{
checkChargeExistsInProductAndIsNotReadOnly(productIdentifier, chargeDefinitionIdentifier);
+ if (instance.isReadOnly())
+ throw ServiceException.badRequest("Created charges cannot be read only.");
+
if (!chargeDefinitionIdentifier.equals(instance.getIdentifier()))
throw ServiceException.badRequest("Instance identifiers may not be changed.");
@@ -159,7 +162,8 @@
.isReadOnly();
if (readOnly)
- throw ServiceException.conflict("Charge definition is read only ''{0}''", chargeDefinitionIdentifier);
+ throw ServiceException.conflict("Charge definition is read only ''{0}.{1}''",
+ productIdentifier, chargeDefinitionIdentifier);
}
private void checkProductExists(final String productIdentifier) {