killbill-memoizeit
Changes
catalog/src/test/resources/WeaponsHireSmall.xml 46(+26 -20)
Details
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
index 1c48937..0c4071b 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
@@ -192,6 +192,8 @@ public class DefaultPlan extends ValidatingConfig<StandaloneCatalog> implements
catalog.getCatalogURI(), DefaultInternationalPrice.class, ""));
}
+ validateCollection(catalog, errors, initialPhases);
+ finalPhase.validate(catalog, errors);
return errors;
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlanPhase.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlanPhase.java
index e4308f8..9cfd5d1 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlanPhase.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlanPhase.java
@@ -34,6 +34,7 @@ import org.killbill.billing.catalog.api.PlanPhase;
import org.killbill.billing.catalog.api.Recurring;
import org.killbill.billing.catalog.api.Usage;
import org.killbill.billing.util.config.catalog.ValidatingConfig;
+import org.killbill.billing.util.config.catalog.ValidationError;
import org.killbill.billing.util.config.catalog.ValidationErrors;
@XmlAccessorType(XmlAccessType.NONE)
@@ -53,7 +54,7 @@ public class DefaultPlanPhase extends ValidatingConfig<StandaloneCatalog> implem
@XmlElementWrapper(name = "usages", required = false)
@XmlElement(name = "usage", required = false)
- private DefaultUsage[] usages;
+ private DefaultUsage[] usages = new DefaultUsage[0];
//Not exposed in XML
private Plan plan;
@@ -81,8 +82,12 @@ public class DefaultPlanPhase extends ValidatingConfig<StandaloneCatalog> implem
@Override
public boolean compliesWithLimits(final String unit, final double value) {
- // TODO STEPH
- return true;
+ for (DefaultUsage usage : usages) {
+ if (!usage.compliesWithLimits(unit, value)) {
+ return false;
+ }
+ }
+ return plan.getProduct().compliesWithLimits(unit, value);
}
@Override
@@ -129,23 +134,18 @@ public class DefaultPlanPhase extends ValidatingConfig<StandaloneCatalog> implem
@Override
public ValidationErrors validate(final StandaloneCatalog catalog, final ValidationErrors errors) {
- // TODO STEPH check there is either fixed and/or/usage and/or recurring defined.
-
- /*
- //Validation: if there BP is set to NO_BILLING_PERIOD there must be a fixed price
- if ((billingPeriod == BillingPeriod.NO_BILLING_PERIOD && fixedPrice == null)) {
- errors.add(new ValidationError(String.format("Phase %s of plan %s has no billing period. It must have a fixed price set.",
+ if (fixed == null && recurring == null && usages.length == 0) {
+ errors.add(new ValidationError(String.format("Phase %s of plan %s need to define at least either a fixed or recurrring or usage section.",
type.toString(), plan.getName()),
catalog.getCatalogURI(), DefaultPlanPhase.class, type.toString()));
}
-
- //Validation: there must be at least one of recurringPrice or fixedPrice
- if ((recurringPrice == null) && fixedPrice == null) {
- errors.add(new ValidationError(String.format("Phase %s of plan %s has neither a recurring price or a fixed price.",
- type.toString(), plan.getName()),
- catalog.getCatalogURI(), DefaultPlanPhase.class, type.toString()));
+ if (fixed != null) {
+ fixed.validate(catalog, errors);
+ }
+ if (recurring != null) {
+ recurring.validate(catalog, errors);
}
- */
+ validateCollection(catalog, errors, usages);
return errors;
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultProduct.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultProduct.java
index e1d84fe..fabd692 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultProduct.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultProduct.java
@@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlIDREF;
import java.net.URI;
import java.util.Arrays;
+import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.Limit;
import org.killbill.billing.catalog.api.Product;
import org.killbill.billing.catalog.api.ProductCategory;
@@ -55,7 +56,7 @@ public class DefaultProduct extends ValidatingConfig<StandaloneCatalog> implemen
@XmlIDREF
@XmlElement(name = "addonProduct", required = true)
private DefaultProduct[] available = EMPTY_PRODUCT_LIST;
-
+
@XmlElementWrapper(name = "limits", required = false)
@XmlElement(name = "limit", required = true)
private DefaultLimit[] limits = new DefaultLimit[0];
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultUsage.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultUsage.java
index 0c2372c..2b22691 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultUsage.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultUsage.java
@@ -5,8 +5,10 @@ import java.net.URI;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
import org.killbill.billing.catalog.api.BillingPeriod;
+import org.killbill.billing.catalog.api.Limit;
import org.killbill.billing.catalog.api.PlanPhase;
import org.killbill.billing.catalog.api.Usage;
import org.killbill.billing.util.config.catalog.ValidatingConfig;
@@ -18,6 +20,10 @@ public class DefaultUsage extends ValidatingConfig<StandaloneCatalog> implements
@XmlElement(required = true)
private BillingPeriod billingPeriod;
+ @XmlElementWrapper(name = "limits", required = false)
+ @XmlElement(name = "limit", required = true)
+ private DefaultLimit[] limits = new DefaultLimit[0];
+
@Override
public BillingPeriod getBillingPeriod() {
return billingPeriod;
@@ -27,13 +33,22 @@ public class DefaultUsage extends ValidatingConfig<StandaloneCatalog> implements
private PlanPhase phase;
@Override
- public boolean compliesWithLimits(final String s, final double v) {
- return false;
+ public boolean compliesWithLimits(final String unit, final double value) {
+ for (DefaultLimit limit : limits) {
+ if (!limit.getUnit().getName().equals(unit)) {
+ continue;
+ }
+ if (!limit.compliesWith(value)) {
+ return false;
+ }
+ }
+ return true;
}
@Override
public ValidationErrors validate(final StandaloneCatalog root, final ValidationErrors errors) {
- return null;
+ validateCollection(root, errors, limits);
+ return errors;
}
@Override
@@ -41,6 +56,11 @@ public class DefaultUsage extends ValidatingConfig<StandaloneCatalog> implements
}
+ @Override
+ public DefaultLimit[] getLimits() {
+ return limits;
+ }
+
public DefaultUsage setBillingPeriod(final BillingPeriod billingPeriod) {
this.billingPeriod = billingPeriod;
return this;
@@ -51,21 +71,10 @@ public class DefaultUsage extends ValidatingConfig<StandaloneCatalog> implements
return this;
}
- /*
- /*
- * (non-Javadoc)
- *
- * @see org.killbill.billing.catalog.PlanPhase#getLimit()
- */
-
-
- /*
- @Override
- public DefaultLimit[] getLimits() {
- return limits;
+ public void setLimits(final DefaultLimit[] limits) {
+ this.limits = limits;
}
-
protected Limit findLimit(String unit) {
for (Limit limit : limits) {
@@ -75,23 +84,4 @@ public class DefaultUsage extends ValidatingConfig<StandaloneCatalog> implements
}
return null;
}
-
- @Override
- public boolean compliesWithLimits(String unit, double value) {
- Limit l = findLimit(unit);
- if (l == null) {
- return getPlan().getProduct().compliesWithLimits(unit, value);
- }
- return l.compliesWith(value);
- }
-
-
- */
-
- /*
- @XmlElementWrapper(name = "limits", required = false)
- @XmlElement(name = "limit", required = true)
- private DefaultLimit[] limits = new DefaultLimit[0];
- */
-
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/StandaloneCatalog.java b/catalog/src/main/java/org/killbill/billing/catalog/StandaloneCatalog.java
index 3b611fa..6491591 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/StandaloneCatalog.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/StandaloneCatalog.java
@@ -18,7 +18,6 @@ package org.killbill.billing.catalog;
import java.net.URI;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -34,7 +33,6 @@ import org.killbill.billing.catalog.api.BillingAlignment;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.Currency;
-import org.killbill.billing.catalog.api.Limit;
import org.killbill.billing.catalog.api.Listing;
import org.killbill.billing.catalog.api.Plan;
import org.killbill.billing.catalog.api.PlanAlignmentChange;
@@ -49,7 +47,6 @@ import org.killbill.billing.catalog.api.ProductCategory;
import org.killbill.billing.catalog.api.StaticCatalog;
import org.killbill.billing.catalog.rules.PlanRules;
import org.killbill.billing.util.config.catalog.ValidatingConfig;
-import org.killbill.billing.util.config.catalog.ValidationError;
import org.killbill.billing.util.config.catalog.ValidationErrors;
@XmlRootElement(name = "catalog")
@@ -253,21 +250,13 @@ public class StandaloneCatalog extends ValidatingConfig<StandaloneCatalog> imple
@Override
public ValidationErrors validate(final StandaloneCatalog catalog, final ValidationErrors errors) {
- validate(catalog, errors, products);
- validate(catalog, errors, plans);
+ validateCollection(catalog, errors, products);
+ validateCollection(catalog, errors, plans);
priceLists.validate(catalog, errors);
planRules.validate(catalog, errors);
return errors;
}
- private Collection<? extends ValidationError> validate(final StandaloneCatalog catalog,
- final ValidationErrors errors, final ValidatingConfig<StandaloneCatalog>[] configs) {
- for (final ValidatingConfig<StandaloneCatalog> config : configs) {
- config.validate(catalog, errors);
- }
- return errors;
- }
-
@Override
public void initialize(final StandaloneCatalog catalog, final URI sourceURI) {
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/MockPlanPhase.java b/catalog/src/test/java/org/killbill/billing/catalog/MockPlanPhase.java
index cf1ea5b..5ba79d3 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/MockPlanPhase.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/MockPlanPhase.java
@@ -71,7 +71,7 @@ public class MockPlanPhase extends DefaultPlanPhase {
setPhaseType(type);
setDuration(duration);
setFixed(new MockFixed(fixedPrice));
- setRecurring(new MockRecurring(billingPeriod, recurringPrice));
+ setRecurring(new MockRecurring(billingPeriod, recurringPrice).setPhase(this));
}
public MockPlanPhase() {
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/TestLimits.java b/catalog/src/test/java/org/killbill/billing/catalog/TestLimits.java
index 5e7246b..7cfe30c 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/TestLimits.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/TestLimits.java
@@ -16,17 +16,17 @@
package org.killbill.billing.catalog;
+import org.killbill.billing.catalog.api.PlanPhase;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.google.common.io.Resources;
-import org.killbill.billing.catalog.api.PlanPhase;
-import org.killbill.billing.lifecycle.KillbillService.ServiceException;
public class TestLimits extends CatalogTestSuiteNoDB {
+
private VersionedCatalog catalog;
-
+
@BeforeClass(groups = "fast")
public void beforeClass() throws Exception {
super.beforeClass();
@@ -37,17 +37,26 @@ public class TestLimits extends CatalogTestSuiteNoDB {
public void testLimits() throws Exception {
PlanPhase phase = catalog.findCurrentPhase("pistol-monthly-evergreen");
Assert.assertNotNull(phase);
-
- //<limits>
- // <limit>
- // <unit>targets</unit>
- // <min>3</min>
- // </limit>
- // <limit>
- // <unit>misfires</unit>
- // <max>20</max>
- // </limit>
- //</limits>
+
+
+ /*
+ <usages>
+ <usage>
+ <billingPeriod>NO_BILLING_PERIOD</billingPeriod>
+ <limits>
+ <limit>
+ <unit>targets</unit>
+ <min>3</min>
+ </limit>
+ <limit>
+ <unit>misfires</unit>
+ <max>20</max>
+ </limit>
+ </limits>
+ </usage>
+ </usages>
+ */
+
Assert.assertTrue(catalog.compliesWithLimits("pistol-monthly-evergreen", "targets", 3));
Assert.assertTrue(catalog.compliesWithLimits("pistol-monthly-evergreen", "targets", 2000));
Assert.assertFalse(catalog.compliesWithLimits("pistol-monthly-evergreen", "targets", 2));
@@ -55,38 +64,40 @@ public class TestLimits extends CatalogTestSuiteNoDB {
Assert.assertTrue(catalog.compliesWithLimits("pistol-monthly-evergreen", "misfires", 3));
Assert.assertFalse(catalog.compliesWithLimits("pistol-monthly-evergreen", "misfires", 21));
Assert.assertTrue(catalog.compliesWithLimits("pistol-monthly-evergreen", "misfires", -1));
-/* <product name="Shotgun">
- <category>BASE</category>
- <limits>
+
+
+ /*
+ <product name="Shotgun">
+ <category>BASE</category>
+ <limits>
<limit>
<unit>shells</unit>
<max>300</max>
</limit>
- </limits>
- </product>
- <plan name="shotgun-annual">
- <product>Shotgun</product>
- ...
- <finalPhase type="EVERGREEN">
- <limits>
- <limit>
- <unit>shells</unit>
- <max>200</max>
- </limit>
- </limits>
- </finalPhase>
- </plan>
-*/
+ </limits>
+ </product>
+ */
Assert.assertTrue(catalog.compliesWithLimits("shotgun-monthly-evergreen", "shells", 100));
Assert.assertFalse(catalog.compliesWithLimits("shotgun-monthly-evergreen", "shells", 400));
Assert.assertTrue(catalog.compliesWithLimits("shotgun-monthly-evergreen", "shells", 250));
-
+
+ /*
+ <!-- shotgun-annual-evergreen -->
+ <usages>
+ <usage>
+ <billingPeriod>ANNUAL</billingPeriod>
+ <limits>
+ <limit>
+ <unit>shells</unit>
+ <max>200</max>
+ </limit>
+ </limits>
+ </usage>
+ </usages>
+ */
Assert.assertTrue(catalog.compliesWithLimits("shotgun-annual-evergreen", "shells", 100));
Assert.assertFalse(catalog.compliesWithLimits("shotgun-annual-evergreen", "shells", 400));
Assert.assertFalse(catalog.compliesWithLimits("shotgun-annual-evergreen", "shells", 250));
-
-
-
-
+
}
}
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/TestPlanPhase.java b/catalog/src/test/java/org/killbill/billing/catalog/TestPlanPhase.java
index 03820e7..e68244d 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/TestPlanPhase.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/TestPlanPhase.java
@@ -16,6 +16,8 @@
package org.killbill.billing.catalog;
+import java.math.BigDecimal;
+
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -34,18 +36,10 @@ public class TestPlanPhase extends CatalogTestSuiteNoDB {
errors.log(log);
Assert.assertEquals(errors.size(), 1);
- /*
- TODO STEPH
- pp = MockPlanPhase.createUSDMonthlyEvergreen("1.00", null).setBillCycleDuration(BillingPeriod.NO_BILLING_PERIOD).setPlan(MockPlan.createBicycleNoTrialEvergreen1USD());
+ pp = MockPlanPhase.createUSDMonthlyEvergreen("1.00", null).setRecurring(new MockRecurring(BillingPeriod.NO_BILLING_PERIOD, MockInternationalPrice.createUSD("1.00")).setPhase(pp)).setPlan(MockPlan.createBicycleNoTrialEvergreen1USD());
errors = pp.validate(new MockCatalog(), new ValidationErrors());
errors.log(log);
- Assert.assertEquals(errors.size(), 2);
-
- pp = MockPlanPhase.createUSDMonthlyEvergreen(null, null).setBillCycleDuration(BillingPeriod.NO_BILLING_PERIOD).setPlan(MockPlan.createBicycleNoTrialEvergreen1USD());
- errors = pp.validate(new MockCatalog(), new ValidationErrors());
- errors.log(log);
- */
- Assert.assertEquals(errors.size(), 2);
+ Assert.assertEquals(errors.size(), 1);
}
@Test(groups = "fast")
diff --git a/catalog/src/test/resources/versionedCatalog/WeaponsHireSmall-2.xml b/catalog/src/test/resources/versionedCatalog/WeaponsHireSmall-2.xml
index ef05026..5ec6a46 100644
--- a/catalog/src/test/resources/versionedCatalog/WeaponsHireSmall-2.xml
+++ b/catalog/src/test/resources/versionedCatalog/WeaponsHireSmall-2.xml
@@ -18,7 +18,7 @@
<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="CatalogSchema.xsd ">
- <effectiveDate>2011-02-01T00:00:00+00:00</effectiveDate>
+ <effectiveDate>2011-02-02T00:00:00+00:00</effectiveDate>
<catalogName>WeaponsHireSmall</catalogName>
<currencies>
diff --git a/catalog/src/test/resources/versionedCatalog/WeaponsHireSmall-3.xml b/catalog/src/test/resources/versionedCatalog/WeaponsHireSmall-3.xml
index 0e2de86..987d211 100644
--- a/catalog/src/test/resources/versionedCatalog/WeaponsHireSmall-3.xml
+++ b/catalog/src/test/resources/versionedCatalog/WeaponsHireSmall-3.xml
@@ -18,7 +18,7 @@
<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="CatalogSchema.xsd ">
- <effectiveDate>2011-03-01T00:00:00+00:00</effectiveDate>
+ <effectiveDate>2011-03-03T00:00:00+00:00</effectiveDate>
<catalogName>WeaponsHireSmall</catalogName>
<currencies>
catalog/src/test/resources/WeaponsHireSmall.xml 46(+26 -20)
diff --git a/catalog/src/test/resources/WeaponsHireSmall.xml b/catalog/src/test/resources/WeaponsHireSmall.xml
index 365cf11..212dd75 100644
--- a/catalog/src/test/resources/WeaponsHireSmall.xml
+++ b/catalog/src/test/resources/WeaponsHireSmall.xml
@@ -118,19 +118,22 @@
<value>29.95</value>
</price>
</recurringPrice>
- <!--
- <limits>
- <limit>
- <unit>targets</unit>
- <min>3</min>
- </limit>
- <limit>
- <unit>misfires</unit>
- <max>20</max>
- </limit>
- </limits>
- -->
</recurring>
+ <usages>
+ <usage>
+ <billingPeriod>NO_BILLING_PERIOD</billingPeriod>
+ <limits>
+ <limit>
+ <unit>targets</unit>
+ <min>3</min>
+ </limit>
+ <limit>
+ <unit>misfires</unit>
+ <max>20</max>
+ </limit>
+ </limits>
+ </usage>
+ </usages>
</finalPhase>
</plan>
<plan name="shotgun-monthly">
@@ -205,15 +208,18 @@
<value>1699.95</value>
</price>
</recurringPrice>
- <!--
- <limits>
- <limit>
- <unit>shells</unit>
- <max>200</max>
- </limit>
- </limits>
- -->
</recurring>
+ <usages>
+ <usage>
+ <billingPeriod>ANNUAL</billingPeriod>
+ <limits>
+ <limit>
+ <unit>shells</unit>
+ <max>200</max>
+ </limit>
+ </limits>
+ </usage>
+ </usages>
</finalPhase>
</plan>
<plan name="laser-scope-monthly">
diff --git a/util/src/main/java/org/killbill/billing/util/config/catalog/ValidatingConfig.java b/util/src/main/java/org/killbill/billing/util/config/catalog/ValidatingConfig.java
index dc9ad83..8278117 100644
--- a/util/src/main/java/org/killbill/billing/util/config/catalog/ValidatingConfig.java
+++ b/util/src/main/java/org/killbill/billing/util/config/catalog/ValidatingConfig.java
@@ -17,6 +17,7 @@
package org.killbill.billing.util.config.catalog;
import java.net.URI;
+import java.util.Collection;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -41,4 +42,11 @@ public abstract class ValidatingConfig<Context> {
public void initialize(final Context root, final URI uri) {
}
+ protected Collection<? extends ValidationError> validateCollection(final Context context,
+ final ValidationErrors errors, final ValidatingConfig<Context>[] configs) {
+ for (final ValidatingConfig<Context> config : configs) {
+ config.validate(context, errors);
+ }
+ return errors;
+ }
}