Merge pull request #8 from myrle-krantz/develop
Fixing min max range checking. By all appearances javascript was com…
diff --git a/api/src/main/java/io/mifos/portfolio/api/v1/domain/BalanceRange.java b/api/src/main/java/io/mifos/portfolio/api/v1/domain/BalanceRange.java
index dc86107..b6515b3 100644
--- a/api/src/main/java/io/mifos/portfolio/api/v1/domain/BalanceRange.java
+++ b/api/src/main/java/io/mifos/portfolio/api/v1/domain/BalanceRange.java
@@ -25,7 +25,7 @@
* @author Myrle Krantz
*/
@SuppressWarnings({"WeakerAccess", "unused"})
-@ScriptAssert(lang = "javascript", script = "_this.maximum > _this.minimum && _this.minimum.scale() <= 4 && _this.maximum.scale() <= 4")
+@ScriptAssert(lang = "javascript", script = "_this.maximum != null && _this.minimum != null && _this.maximum.compareTo(_this.minimum) >= 0 && _this.minimum.scale() <= 4 && _this.maximum.scale() <= 4")
public final class BalanceRange {
@Range(min = 0)
private BigDecimal minimum;
diff --git a/api/src/main/java/io/mifos/portfolio/api/v1/domain/InterestRange.java b/api/src/main/java/io/mifos/portfolio/api/v1/domain/InterestRange.java
index effb001..9bb75c4 100644
--- a/api/src/main/java/io/mifos/portfolio/api/v1/domain/InterestRange.java
+++ b/api/src/main/java/io/mifos/portfolio/api/v1/domain/InterestRange.java
@@ -25,7 +25,7 @@
* @author Myrle Krantz
*/
@SuppressWarnings({"WeakerAccess", "unused"})
-@ScriptAssert(lang = "javascript", script = "_this.maximum > _this.minimum && _this.minimum.scale() == 2 && _this.maximum.scale() == 2")
+@ScriptAssert(lang = "javascript", script = "_this.maximum != null && _this.minimum != null && _this.maximum.compareTo(_this.minimum) >= 0 && _this.minimum.scale() == 2 && _this.maximum.scale() == 2")
public class InterestRange {
@DecimalMin(value = "0.00")
@DecimalMax(value = "999.99")
diff --git a/api/src/test/java/io/mifos/portfolio/api/v1/domain/BalanceRangeTest.java b/api/src/test/java/io/mifos/portfolio/api/v1/domain/BalanceRangeTest.java
index 27437e2..9a34e43 100644
--- a/api/src/test/java/io/mifos/portfolio/api/v1/domain/BalanceRangeTest.java
+++ b/api/src/test/java/io/mifos/portfolio/api/v1/domain/BalanceRangeTest.java
@@ -54,6 +54,18 @@
ret.add(new ValidationTestCase<BalanceRange>("minLargerthanMax")
.adjustment((x) -> x.setMinimum(BigDecimal.TEN.multiply(BigDecimal.TEN)))
.valid(false));
+ ret.add(new ValidationTestCase<BalanceRange>("5 and 10")
+ .adjustment(x -> {
+ x.setMinimum(BigDecimal.valueOf(5L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ x.setMaximum(BigDecimal.valueOf(10L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ })
+ .valid(true));
+ ret.add(new ValidationTestCase<BalanceRange>("5 and 5")
+ .adjustment(x -> {
+ x.setMinimum(BigDecimal.valueOf(5L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ x.setMaximum(BigDecimal.valueOf(5L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ })
+ .valid(true));
return ret;
}
}
diff --git a/api/src/test/java/io/mifos/portfolio/api/v1/domain/InterestRangeTest.java b/api/src/test/java/io/mifos/portfolio/api/v1/domain/InterestRangeTest.java
new file mode 100644
index 0000000..db1b3bc
--- /dev/null
+++ b/api/src/test/java/io/mifos/portfolio/api/v1/domain/InterestRangeTest.java
@@ -0,0 +1,59 @@
+package io.mifos.portfolio.api.v1.domain;
+
+import io.mifos.core.test.domain.ValidationTest;
+import io.mifos.core.test.domain.ValidationTestCase;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Myrle Krantz
+ */
+@RunWith(Parameterized.class)
+public class InterestRangeTest extends ValidationTest<InterestRange> {
+ public InterestRangeTest(ValidationTestCase<InterestRange> testCase) {
+ super(testCase);
+ }
+
+ @Override
+ protected InterestRange createValidTestSubject() {
+ return new InterestRange(BigDecimal.valueOf(0.02d).setScale(2, BigDecimal.ROUND_UNNECESSARY),
+ BigDecimal.valueOf(0.03d).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ }
+
+ @Parameterized.Parameters
+ public static Collection testCases() {
+ final Collection<ValidationTestCase> ret = new ArrayList<>();
+ ret.add(new ValidationTestCase<InterestRange>("basicCase")
+ .adjustment(x -> {})
+ .valid(true));
+ ret.add(new ValidationTestCase<InterestRange>("5 and 10")
+ .adjustment(x -> {
+ x.setMinimum(BigDecimal.valueOf(5L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ x.setMaximum(BigDecimal.valueOf(10L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ })
+ .valid(true));
+ ret.add(new ValidationTestCase<InterestRange>("5 and 5")
+ .adjustment(x -> {
+ x.setMinimum(BigDecimal.valueOf(5L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ x.setMaximum(BigDecimal.valueOf(5L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ })
+ .valid(true));
+ ret.add(new ValidationTestCase<InterestRange>("maxNull")
+ .adjustment((x) -> x.setMaximum(null))
+ .valid(false));
+ ret.add(new ValidationTestCase<InterestRange>("maximim smaller than minimum")
+ .adjustment(x -> {
+ x.setMinimum(BigDecimal.valueOf(10L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ x.setMaximum(BigDecimal.valueOf(5L).setScale(2, BigDecimal.ROUND_UNNECESSARY));
+ })
+ .valid(false));
+ return ret;
+ }
+
+}
\ No newline at end of file