killbill-memoizeit
Changes
.travis.yml 3(+3 -0)
beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java 3(+2 -1)
invoice/pom.xml 7(+4 -3)
invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java 50(+25 -25)
invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java 46(+23 -23)
invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java 86(+50 -36)
invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java 80(+40 -40)
invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java 48(+24 -24)
invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java 37(+19 -18)
invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatterFactory.java 6(+3 -3)
invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java 19(+10 -9)
invoice/src/main/java/com/ning/billing/invoice/template/translator/DefaultInvoiceTranslator.java 8(+4 -4)
invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java 32(+16 -16)
invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java 351(+175 -176)
invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java 188(+94 -94)
invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java 649(+324 -325)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/DoubleProRationTests.java 60(+30 -30)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/LeadingProRationTests.java 72(+36 -36)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/ProRationTests.java 20(+10 -10)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/TrailingProRationTests.java 44(+22 -22)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/GenericProRationTestBase.java 87(+44 -43)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/DoubleProRationTests.java 60(+30 -30)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/LeadingProRationTests.java 72(+36 -36)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/ProRationTests.java 114(+57 -57)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/TrailingProRationTests.java 44(+22 -22)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/DoubleProRationTests.java 54(+27 -27)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/LeadingProRationTests.java 72(+36 -36)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/ProRationTests.java 116(+58 -58)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/TrailingProRationTests.java 44(+22 -22)
invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/ValidationProRationTests.java 36(+18 -18)
junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingEvent.java 12(+10 -2)
junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java 6(+4 -2)
junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java 3(+2 -1)
util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java 131(+131 -0)
util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionCreationEvent.java 104(+104 -0)
util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionDeletionEvent.java 104(+104 -0)
util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java 131(+131 -0)
util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionCreationEvent.java 104(+104 -0)
util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionDeletionEvent.java 104(+104 -0)
util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java 81(+81 -0)
util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java 72(+72 -0)
util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java 72(+72 -0)
util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java 81(+81 -0)
util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java 81(+81 -0)
util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java 72(+72 -0)
util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java 72(+72 -0)
Details
.travis.yml 3(+3 -0)
diff --git a/.travis.yml b/.travis.yml
index 3f1b576..c77a8af 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,3 +9,6 @@ jdk:
- openjdk6
- openjdk7
- oraclejdk7
+
+env:
+ - MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=192m"
diff --git a/account/src/test/java/com/ning/billing/account/dao/AccountDaoTestBase.java b/account/src/test/java/com/ning/billing/account/dao/AccountDaoTestBase.java
index 71985e0..a97a630 100644
--- a/account/src/test/java/com/ning/billing/account/dao/AccountDaoTestBase.java
+++ b/account/src/test/java/com/ning/billing/account/dao/AccountDaoTestBase.java
@@ -40,14 +40,17 @@ import com.ning.billing.util.callcontext.UserType;
import com.ning.billing.util.callcontext.DefaultCallContextFactory;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.tag.api.user.TagEventBuilder;
public abstract class AccountDaoTestBase {
private final MysqlTestingHelper helper = new MysqlTestingHelper();
+ protected final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+
protected AccountDao accountDao;
protected AccountEmailDao accountEmailDao;
protected IDBI dbi;
-
+ protected Bus bus;
protected CallContext context;
@BeforeClass(alwaysRun = true)
@@ -63,7 +66,7 @@ public abstract class AccountDaoTestBase {
dbi = helper.getDBI();
- Bus bus = new InMemoryBus();
+ bus = new InMemoryBus();
BusService busService = new DefaultBusService(bus);
((DefaultBusService) busService).startBus();
diff --git a/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
index ba1d3f6..5e51ecd 100644
--- a/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
@@ -28,6 +28,7 @@ import java.util.UUID;
import com.ning.billing.account.api.AccountEmail;
import com.ning.billing.account.api.DefaultAccountEmail;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.customfield.CustomField;
import com.ning.billing.util.customfield.StringCustomField;
import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
@@ -146,13 +147,13 @@ public class TestAccountDao extends AccountDaoTestBase {
}
@Test
- public void testTags() throws EntityPersistenceException {
+ public void testTags() throws EntityPersistenceException, TagApiException {
Account account = createTestAccount(1);
TagDefinition definition = new DefaultTagDefinition("Test Tag", "For testing only", false);
TagDefinitionSqlDao tagDescriptionDao = dbi.onDemand(TagDefinitionSqlDao.class);
tagDescriptionDao.create(definition, context);
- TagDao tagDao = new AuditedTagDao(dbi);
+ TagDao tagDao = new AuditedTagDao(dbi, tagEventBuilder, bus);
tagDao.insertTag(account.getId(), ObjectType.ACCOUNT, definition, context);
Map<String, Tag> tagMap = tagDao.loadEntities(account.getId(), ObjectType.ACCOUNT);
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
index eb8410f..db1761e 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
@@ -19,6 +19,7 @@ package com.ning.billing.entitlement.api.billing;
import java.math.BigDecimal;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.api.BillingPeriod;
@@ -113,4 +114,10 @@ public interface BillingEvent extends Comparable<BillingEvent> {
* @return a unique long indicating the ordering on which events got inserted on disk-- used for sorting only
*/
public Long getTotalOrdering();
+
+ /**
+ *
+ * @return The TimeZone of the account
+ */
+ public DateTimeZone getTimeZone();
}
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
index 56ee93f..1b8afb3 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
@@ -17,6 +17,7 @@
package com.ning.billing.invoice.api;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.callcontext.CallContext;
import org.joda.time.DateTime;
@@ -40,9 +41,9 @@ public interface InvoiceUserApi {
public Invoice triggerInvoiceGeneration(UUID accountId, DateTime targetDate, boolean dryRun, CallContext context) throws InvoiceApiException;
- public void tagInvoiceAsWrittenOff(UUID invoiceId, CallContext context);
+ public void tagInvoiceAsWrittenOff(UUID invoiceId, CallContext context) throws TagApiException;
- public void tagInvoiceAsNotWrittenOff(UUID invoiceId, CallContext context) throws InvoiceApiException;
+ public void tagInvoiceAsNotWrittenOff(UUID invoiceId, CallContext context) throws TagApiException;
public InvoiceItem getCreditById(UUID creditId) throws InvoiceApiException;
diff --git a/api/src/main/java/com/ning/billing/util/api/TagApiException.java b/api/src/main/java/com/ning/billing/util/api/TagApiException.java
new file mode 100644
index 0000000..7b3c032
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/api/TagApiException.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.api;
+
+import com.ning.billing.BillingExceptionBase;
+import com.ning.billing.ErrorCode;
+
+public class TagApiException extends BillingExceptionBase {
+ private static final long serialVersionUID = 1L;
+
+ public TagApiException(final Throwable cause, final int code, final String msg) {
+ super(cause, code, msg);
+ }
+
+ public TagApiException(final Throwable cause, final ErrorCode code, final Object... args) {
+ super(cause, code, args);
+ }
+
+ public TagApiException(final ErrorCode code, final Object... args) {
+ super(code, args);
+ }
+}
diff --git a/api/src/main/java/com/ning/billing/util/api/TagDefinitionApiException.java b/api/src/main/java/com/ning/billing/util/api/TagDefinitionApiException.java
index a67f1ad..1b080d5 100644
--- a/api/src/main/java/com/ning/billing/util/api/TagDefinitionApiException.java
+++ b/api/src/main/java/com/ning/billing/util/api/TagDefinitionApiException.java
@@ -22,15 +22,15 @@ import com.ning.billing.ErrorCode;
public class TagDefinitionApiException extends BillingExceptionBase {
private static final long serialVersionUID = 1L;
- public TagDefinitionApiException(Throwable cause, int code, final String msg) {
+ public TagDefinitionApiException(final Throwable cause, final int code, final String msg) {
super(cause, code, msg);
}
- public TagDefinitionApiException(Throwable cause, ErrorCode code, final Object... args) {
+ public TagDefinitionApiException(final Throwable cause, final ErrorCode code, final Object... args) {
super(cause, code, args);
}
- public TagDefinitionApiException(ErrorCode code, final Object... args) {
+ public TagDefinitionApiException(final ErrorCode code, final Object... args) {
super(code, args);
}
-}
\ No newline at end of file
+}
diff --git a/api/src/main/java/com/ning/billing/util/api/TagUserApi.java b/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
index 422221a..331cce4 100644
--- a/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
+++ b/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
@@ -25,52 +25,42 @@ import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
-// TODO: add ability to create, update and remove tags
public interface TagUserApi {
- /***
- *
+ /**
* @return the list of all available tag definitions
*/
public List<TagDefinition> getTagDefinitions();
- /***
- *
+ /**
* @param definitionName Identifies the definition.
- * @param description Describes the use of the definition.
- * @param context The call context, for auditing purposes
+ * @param description Describes the use of the definition.
+ * @param context The call context, for auditing purposes
* @return the newly created tag definition
* @throws TagDefinitionApiException
*/
public TagDefinition create(String definitionName, String description, CallContext context) throws TagDefinitionApiException;
- /***
- *
+ /**
* @param definitionName Identifies the definition.
- * @param context The call context, for auditing purposes
+ * @param context The call context, for auditing purposes
* @throws TagDefinitionApiException
*/
- public void deleteAllTagsForDefinition(String definitionName, CallContext context) throws TagDefinitionApiException;
+ public void deleteTagDefinition(String definitionName, CallContext context) throws TagDefinitionApiException;
- /***
- *
- * @param definitionName Identifies the definition.
- * @param context The call context, for auditing purposes
+ /**
+ * @param name
+ * @return the tag with this definition
* @throws TagDefinitionApiException
*/
- public void deleteTagDefinition(String definitionName, CallContext context) throws TagDefinitionApiException;
+ public TagDefinition getTagDefinition(String name) throws TagDefinitionApiException;
- /**
- *
- * @param name
- * @return the tag with this definition
- * @throws TagDefinitionApiException
- */
- public TagDefinition getTagDefinition(String name) throws TagDefinitionApiException;
+ public void addTags(UUID objectId, ObjectType objectType, List<TagDefinition> tagDefinitions, CallContext context) throws TagApiException;
+
+ public void addTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context) throws TagApiException;
+
+ public void removeTags(UUID objectId, ObjectType objectType, List<TagDefinition> tagDefinitions, CallContext context) throws TagApiException;
- public void addTags(UUID objectId, ObjectType objectType, List<TagDefinition> tagDefinitions, CallContext context);
- public void addTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context);
- public void removeTags(UUID objectId, ObjectType objectType, List<TagDefinition> tagDefinitions, CallContext context);
- public void removeTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context);
+ public void removeTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context) throws TagApiException;
public Map<String, Tag> getTags(UUID objectId, ObjectType objectType);
}
diff --git a/api/src/main/java/com/ning/billing/util/bus/BusEvent.java b/api/src/main/java/com/ning/billing/util/bus/BusEvent.java
index d969440..cfb8b0b 100644
--- a/api/src/main/java/com/ning/billing/util/bus/BusEvent.java
+++ b/api/src/main/java/com/ning/billing/util/bus/BusEvent.java
@@ -19,19 +19,26 @@ package com.ning.billing.util.bus;
import java.util.UUID;
public interface BusEvent {
-
- public enum BusEventType {
- ACCOUNT_CREATE,
- ACCOUNT_CHANGE,
- SUBSCRIPTION_TRANSITION,
- BUNDLE_REPAIR,
- INVOICE_EMPTY,
- INVOICE_CREATION,
- PAYMENT_INFO,
- PAYMENT_ERROR
- }
+ public enum BusEventType {
+ ACCOUNT_CREATE,
+ ACCOUNT_CHANGE,
+ SUBSCRIPTION_TRANSITION,
+ BUNDLE_REPAIR,
+ INVOICE_EMPTY,
+ INVOICE_CREATION,
+ PAYMENT_INFO,
+ PAYMENT_ERROR,
+ CONTROL_TAG_CREATION,
+ CONTROL_TAG_DELETION,
+ USER_TAG_CREATION,
+ USER_TAG_DELETION,
+ CONTROL_TAGDEFINITION_CREATION,
+ CONTROL_TAGDEFINITION_DELETION,
+ USER_TAGDEFINITION_CREATION,
+ USER_TAGDEFINITION_DELETION
+ }
- public BusEventType getBusEventType();
-
- public UUID getUserToken();
+ public BusEventType getBusEventType();
+
+ public UUID getUserToken();
}
diff --git a/api/src/main/java/com/ning/billing/util/tag/api/ControlTagDefinitionDeletionEvent.java b/api/src/main/java/com/ning/billing/util/tag/api/ControlTagDefinitionDeletionEvent.java
new file mode 100644
index 0000000..7a5f453
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/tag/api/ControlTagDefinitionDeletionEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api;
+
+public interface ControlTagDefinitionDeletionEvent extends TagDefinitionEvent {
+}
diff --git a/api/src/main/java/com/ning/billing/util/tag/api/ControlTagDeletionEvent.java b/api/src/main/java/com/ning/billing/util/tag/api/ControlTagDeletionEvent.java
new file mode 100644
index 0000000..c82ea96
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/tag/api/ControlTagDeletionEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api;
+
+public interface ControlTagDeletionEvent extends TagEvent {
+}
diff --git a/api/src/main/java/com/ning/billing/util/tag/api/TagDefinitionEvent.java b/api/src/main/java/com/ning/billing/util/tag/api/TagDefinitionEvent.java
new file mode 100644
index 0000000..7906c7e
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/tag/api/TagDefinitionEvent.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api;
+
+import java.util.UUID;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.tag.TagDefinition;
+
+public interface TagDefinitionEvent extends BusEvent {
+ UUID getTagDefinitionId();
+
+ TagDefinition getTagDefinition();
+}
diff --git a/api/src/main/java/com/ning/billing/util/tag/api/TagEvent.java b/api/src/main/java/com/ning/billing/util/tag/api/TagEvent.java
new file mode 100644
index 0000000..1cd3cfd
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/tag/api/TagEvent.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api;
+
+import java.util.UUID;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.TagDefinition;
+
+public interface TagEvent extends BusEvent {
+ UUID getTagId();
+
+ UUID getObjectId();
+
+ ObjectType getObjectType();
+
+ TagDefinition getTagDefinition();
+}
diff --git a/api/src/main/java/com/ning/billing/util/tag/api/UserTagCreationEvent.java b/api/src/main/java/com/ning/billing/util/tag/api/UserTagCreationEvent.java
new file mode 100644
index 0000000..986845f
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/tag/api/UserTagCreationEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api;
+
+public interface UserTagCreationEvent extends TagEvent {
+}
diff --git a/api/src/main/java/com/ning/billing/util/tag/api/UserTagDefinitionCreationEvent.java b/api/src/main/java/com/ning/billing/util/tag/api/UserTagDefinitionCreationEvent.java
new file mode 100644
index 0000000..06b74a5
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/tag/api/UserTagDefinitionCreationEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api;
+
+public interface UserTagDefinitionCreationEvent extends TagDefinitionEvent {
+}
diff --git a/api/src/main/java/com/ning/billing/util/tag/api/UserTagDefinitionDeletionEvent.java b/api/src/main/java/com/ning/billing/util/tag/api/UserTagDefinitionDeletionEvent.java
new file mode 100644
index 0000000..8922eaf
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/tag/api/UserTagDefinitionDeletionEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api;
+
+public interface UserTagDefinitionDeletionEvent extends TagDefinitionEvent {
+}
diff --git a/api/src/main/java/com/ning/billing/util/tag/api/UserTagDeletionEvent.java b/api/src/main/java/com/ning/billing/util/tag/api/UserTagDeletionEvent.java
new file mode 100644
index 0000000..22ef341
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/tag/api/UserTagDeletionEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api;
+
+public interface UserTagDeletionEvent extends TagEvent {
+}
diff --git a/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java b/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
index d35e011..88f9f1a 100644
--- a/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
+++ b/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
@@ -16,9 +16,11 @@
package com.ning.billing.util.tag;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.ning.billing.util.entity.Entity;
// TODO: needs to surface created date, created by, isControlTag
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public interface TagDefinition extends Entity {
String getName();
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
index 943f470..060ea97 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
@@ -93,13 +93,71 @@ public class TestIntegration extends TestIntegrationBase {
}
+// // STEPH set to disabled until test written properly and fixed
+// @Test(groups = "slow", enabled = true)
+// public void testRepairChangeBPWithAddonIncluded() throws Exception {
+//
+// log.info("Starting testRepairChangeBPWithAddonIncluded");
+//
+// DateTime initialDate = new DateTime(2012, 4, 25, 0, 3, 42, 0);
+// clock.setDeltaFromReality(initialDate.getMillis() - clock.getUTCNow().getMillis());
+//
+// Account account = createAccountWithPaymentMethod(getAccountData(25));
+// assertNotNull(account);
+//
+// SubscriptionBundle bundle = entitlementUserApi.createBundleForAccount(account.getId(), "whatever", context);
+//
+// String productName = "Shotgun";
+// BillingPeriod term = BillingPeriod.MONTHLY;
+// String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+//
+// busHandler.pushExpectedEvent(NextEvent.CREATE);
+// busHandler.pushExpectedEvent(NextEvent.INVOICE);
+// SubscriptionData baseSubscription = subscriptionDataFromSubscription(entitlementUserApi.createSubscription(bundle.getId(),
+// new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSetName, null), null, context));
+// assertNotNull(baseSubscription);
+// assertTrue(busHandler.isCompleted(DELAY));
+//
+// // MOVE CLOCK A LITTLE BIT-- STILL IN TRIAL
+// Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
+// clock.addDeltaFromReality(it.toDurationMillis());
+//
+// busHandler.pushExpectedEvent(NextEvent.CREATE);
+// busHandler.pushExpectedEvent(NextEvent.INVOICE);
+// busHandler.pushExpectedEvent(NextEvent.PAYMENT);
+// subscriptionDataFromSubscription(entitlementUserApi.createSubscription(bundle.getId(),
+// new PlanPhaseSpecifier("Telescopic-Scope", ProductCategory.ADD_ON, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null), null, context));
+// assertTrue(busHandler.isCompleted(DELAY));
+//
+// busHandler.pushExpectedEvent(NextEvent.CREATE);
+// busHandler.pushExpectedEvent(NextEvent.INVOICE);
+// busHandler.pushExpectedEvent(NextEvent.PAYMENT);
+// subscriptionDataFromSubscription(entitlementUserApi.createSubscription(bundle.getId(),
+// new PlanPhaseSpecifier("Laser-Scope", ProductCategory.ADD_ON, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null), null, context));
+// assertTrue(busHandler.isCompleted(DELAY));
+//
+//
+// // 26 / 5
+// int duration = 28;
+// it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(duration));
+// busHandler.pushExpectedEvent(NextEvent.PHASE);
+// busHandler.pushExpectedEvent(NextEvent.PHASE);
+// busHandler.pushExpectedEvent(NextEvent.PHASE);
+// busHandler.pushExpectedEvent(NextEvent.INVOICE);
+// busHandler.pushExpectedEvent(NextEvent.PAYMENT);
+// clock.addDeltaFromReality(it.toDurationMillis());
+// assertTrue(busHandler.isCompleted(DELAY));
+//
+// assertListenerStatus();
+// }
+
// STEPH set to disabled until test written properly and fixed
@Test(groups = "slow", enabled = false)
public void testRepairChangeBPWithAddonIncluded() throws Exception {
log.info("Starting testRepairChangeBPWithAddonIncluded");
- DateTime initialDate = new DateTime(2012, 4, 25, 0, 3, 42, 0);
+ DateTime initialDate = new DateTime(2012, 4, 25, 0, 13, 42, 0);
clock.setDeltaFromReality(initialDate.getMillis() - clock.getUTCNow().getMillis());
Account account = createAccountWithPaymentMethod(getAccountData(25));
@@ -117,10 +175,12 @@ public class TestIntegration extends TestIntegrationBase {
new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSetName, null), null, context));
assertNotNull(baseSubscription);
assertTrue(busHandler.isCompleted(DELAY));
+ assertListenerStatus();
// MOVE CLOCK A LITTLE BIT-- STILL IN TRIAL
Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
- clock.addDeltaFromReality(it.toDurationMillis());
+ log.info("Moving clock from" + clock.getUTCNow() + " to " + clock.getUTCNow().plusDays(3));
+ clock.addDays(3);
busHandler.pushExpectedEvent(NextEvent.CREATE);
busHandler.pushExpectedEvent(NextEvent.INVOICE);
@@ -128,6 +188,8 @@ public class TestIntegration extends TestIntegrationBase {
subscriptionDataFromSubscription(entitlementUserApi.createSubscription(bundle.getId(),
new PlanPhaseSpecifier("Telescopic-Scope", ProductCategory.ADD_ON, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null), null, context));
assertTrue(busHandler.isCompleted(DELAY));
+ assertListenerStatus();
+
busHandler.pushExpectedEvent(NextEvent.CREATE);
busHandler.pushExpectedEvent(NextEvent.INVOICE);
@@ -135,22 +197,53 @@ public class TestIntegration extends TestIntegrationBase {
SubscriptionData aoSubscription2 = subscriptionDataFromSubscription(entitlementUserApi.createSubscription(bundle.getId(),
new PlanPhaseSpecifier("Laser-Scope", ProductCategory.ADD_ON, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null), null, context));
assertTrue(busHandler.isCompleted(DELAY));
-
+ assertListenerStatus();
// MOVE CLOCK A LITTLE BIT MORE -- EITHER STAY IN TRIAL OR GET OUT
- int duration = 35;
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(duration));
- busHandler.pushExpectedEvent(NextEvent.PHASE);
busHandler.pushExpectedEvent(NextEvent.PHASE);
- busHandler.pushExpectedEvent(NextEvent.PHASE);
+ busHandler.pushExpectedEvent(NextEvent.PHASE);
busHandler.pushExpectedEvent(NextEvent.INVOICE);
busHandler.pushExpectedEvent(NextEvent.PAYMENT);
- clock.addDeltaFromReality(it.toDurationMillis());
+ busHandler.pushExpectedEvent(NextEvent.INVOICE);
+ busHandler.pushExpectedEvent(NextEvent.PAYMENT);
+ log.info("Moving clock from" + clock.getUTCNow() + " to " + clock.getUTCNow().plusDays(28));
+ clock.addDays(28);// 26 / 5
assertTrue(busHandler.isCompleted(DELAY));
+ assertListenerStatus();
+
+ busHandler.pushExpectedEvent(NextEvent.PHASE);
+ busHandler.pushExpectedEvent(NextEvent.INVOICE);
+ busHandler.pushExpectedEvent(NextEvent.PAYMENT);
+ log.info("Moving clock from" + clock.getUTCNow() + " to " + clock.getUTCNow().plusDays(3));
+ clock.addDays(3);// 29 / 5
+ assertTrue(busHandler.isCompleted(DELAY));
assertListenerStatus();
+
+
+ log.info("Moving clock from" + clock.getUTCNow() + " to " + clock.getUTCNow().plusDays(10));
+ clock.addDays(10);// 8 / 6
+ assertTrue(busHandler.isCompleted(DELAY));
+ assertListenerStatus();
+
+
+
+ busHandler.pushExpectedEvent(NextEvent.INVOICE);
+ busHandler.pushExpectedEvent(NextEvent.PAYMENT);
+ log.info("Moving clock from" + clock.getUTCNow() + " to " + clock.getUTCNow().plusDays(18));
+ clock.addDays(18);// 26 / 6
+ assertTrue(busHandler.isCompleted(DELAY));
+ assertListenerStatus();
+
+ log.info("Moving clock from" + clock.getUTCNow() + " to " + clock.getUTCNow().plusDays(3));
+ clock.addDays(3);
+ assertTrue(busHandler.isCompleted(DELAY));
+ assertListenerStatus();
+
+
}
-
+
+
@Test(groups = {"slow"})
public void testRepairForInvoicing() throws Exception {
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
index f63d6d6..99e5287 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
@@ -41,7 +41,6 @@ import org.testng.annotations.BeforeMethod;
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.account.api.AccountService;
import com.ning.billing.account.api.AccountUserApi;
@@ -63,9 +62,7 @@ import com.ning.billing.invoice.api.InvoiceUserApi;
import com.ning.billing.invoice.model.InvoicingConfiguration;
import com.ning.billing.junction.plumbing.api.BlockingSubscription;
import com.ning.billing.payment.api.PaymentApi;
-import com.ning.billing.payment.api.PaymentApiException;
import com.ning.billing.payment.api.PaymentMethodPlugin;
-import com.ning.billing.payment.api.PaymentMethodPlugin.PaymentMethodKVInfo;
import com.ning.billing.util.bus.BusService;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.CallOrigin;
@@ -337,7 +334,7 @@ public class TestIntegrationBase implements TestListenerStatus {
@Override
public DateTimeZone getTimeZone() {
- return null;
+ return DateTimeZone.UTC;
}
@Override
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
index 3b462f1..08ba27a 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
@@ -40,6 +40,7 @@ import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.entitlement.api.user.SubscriptionData;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceUserApi;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.api.TagDefinitionApiException;
import com.ning.billing.util.api.TagUserApi;
import com.ning.billing.util.dao.ObjectType;
@@ -166,7 +167,7 @@ public class TestIntegrationWithAutoInvoiceOffTag extends TestIntegrationBase {
}
- private void addTag(UUID id, ObjectType type) throws TagDefinitionApiException {
+ private void addTag(UUID id, ObjectType type) throws TagDefinitionApiException, TagApiException {
TagDefinition def = tagApi.getTagDefinition(ControlTagType.AUTO_INVOICING_OFF.name());
tagApi.addTag(id, type, def, context);
Map<String,Tag> tags = tagApi.getTags(id, type);
invoice/pom.xml 7(+4 -3)
diff --git a/invoice/pom.xml b/invoice/pom.xml
index d2ee9d0..b3528fe 100644
--- a/invoice/pom.xml
+++ b/invoice/pom.xml
@@ -8,7 +8,8 @@
OR CONDITIONS OF ANY KIND, either express or implied. See the ~ License for
the specific language governing permissions and limitations ~ under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ning.billing</groupId>
@@ -33,7 +34,7 @@
<groupId>com.ning.billing</groupId>
<artifactId>killbill-util</artifactId>
</dependency>
- <dependency>
+ <dependency>
<groupId>org.jdbi</groupId>
<artifactId>jdbi</artifactId>
</dependency>
@@ -67,7 +68,7 @@
<groupId>org.skife.config</groupId>
<artifactId>config-magic</artifactId>
</dependency>
- <!-- TEST SCOPE -->
+ <!-- TEST SCOPE -->
<dependency>
<groupId>com.ning.billing</groupId>
<artifactId>killbill-util</artifactId>
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java b/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
index 9b80d9c..f0c3d0c 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
@@ -33,7 +33,7 @@ public class DefaultInvoiceService implements InvoiceService {
private final Bus eventBus;
@Inject
- public DefaultInvoiceService(InvoiceListener invoiceListener, Bus eventBus, NextBillingDateNotifier dateNotifier) {
+ public DefaultInvoiceService(final InvoiceListener invoiceListener, final Bus eventBus, final NextBillingDateNotifier dateNotifier) {
this.invoiceListener = invoiceListener;
this.eventBus = eventBus;
this.dateNotifier = dateNotifier;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
index 2283a39..fca4789 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
@@ -21,17 +21,17 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.invoice.api.InvoiceApiException;
-import com.ning.billing.util.callcontext.CallContext;
import org.joda.time.DateTime;
import com.google.inject.Inject;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.api.InvoicePaymentApi;
import com.ning.billing.invoice.dao.InvoiceDao;
import com.ning.billing.invoice.model.DefaultInvoicePayment;
+import com.ning.billing.util.callcontext.CallContext;
public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
private final InvoiceDao dao;
@@ -39,81 +39,81 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@Inject
public DefaultInvoicePaymentApi(final InvoiceDao dao) {
this.dao = dao;
- }
+ }
@Override
- public void notifyOfPaymentAttempt(InvoicePayment invoicePayment, CallContext context) {
+ public void notifyOfPaymentAttempt(final InvoicePayment invoicePayment, final CallContext context) {
dao.notifyOfPaymentAttempt(invoicePayment, context);
}
- @Override
- public List<Invoice> getAllInvoicesByAccount(UUID accountId) {
- return dao.getAllInvoicesByAccount(accountId);
- }
-
+ @Override
+ public List<Invoice> getAllInvoicesByAccount(final UUID accountId) {
+ return dao.getAllInvoicesByAccount(accountId);
+ }
+
@Override
public Invoice getInvoice(final UUID invoiceId) {
return dao.getById(invoiceId);
}
@Override
- public Invoice getInvoiceForPaymentAttemptId(UUID paymentAttemptId) {
- UUID invoiceIdStr = dao.getInvoiceIdByPaymentAttemptId(paymentAttemptId);
+ public Invoice getInvoiceForPaymentAttemptId(final UUID paymentAttemptId) {
+ final UUID invoiceIdStr = dao.getInvoiceIdByPaymentAttemptId(paymentAttemptId);
return invoiceIdStr == null ? null : dao.getById(invoiceIdStr);
}
@Override
- public InvoicePayment getInvoicePayment(UUID paymentAttemptId) {
+ public InvoicePayment getInvoicePayment(final UUID paymentAttemptId) {
return dao.getInvoicePayment(paymentAttemptId);
}
@Override
- public void notifyOfPaymentAttempt(UUID invoiceId, BigDecimal amount, Currency currency, UUID paymentAttemptId, DateTime paymentAttemptDate, CallContext context) {
- InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate, amount, currency);
+ public void notifyOfPaymentAttempt(final UUID invoiceId, final BigDecimal amount, final Currency currency, final UUID paymentAttemptId, final DateTime paymentAttemptDate, final CallContext context) {
+ final InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate, amount, currency);
dao.notifyOfPaymentAttempt(invoicePayment, context);
}
@Override
- public void notifyOfPaymentAttempt(UUID invoiceId, UUID paymentAttemptId, DateTime paymentAttemptDate, CallContext context) {
- InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate);
+ public void notifyOfPaymentAttempt(final UUID invoiceId, final UUID paymentAttemptId, final DateTime paymentAttemptDate, final CallContext context) {
+ final InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate);
dao.notifyOfPaymentAttempt(invoicePayment, context);
}
@Override
- public void processChargeback(UUID invoicePaymentId, BigDecimal amount, CallContext context) throws InvoiceApiException {
+ public void processChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException {
dao.postChargeback(invoicePaymentId, amount, context);
}
@Override
- public void processChargeback(UUID invoicePaymentId, CallContext context) throws InvoiceApiException {
+ public void processChargeback(final UUID invoicePaymentId, final CallContext context) throws InvoiceApiException {
// use the invoicePaymentId to get the amount remaining on the payment
// (preventing charge backs totalling more than the payment)
- BigDecimal amount = dao.getRemainingAmountPaid(invoicePaymentId);
+ final BigDecimal amount = dao.getRemainingAmountPaid(invoicePaymentId);
processChargeback(invoicePaymentId, amount, context);
}
@Override
- public BigDecimal getRemainingAmountPaid(UUID invoicePaymentId) {
+ public BigDecimal getRemainingAmountPaid(final UUID invoicePaymentId) {
return dao.getRemainingAmountPaid(invoicePaymentId);
}
@Override
- public List<InvoicePayment> getChargebacksByAccountId(UUID accountId) {
+ public List<InvoicePayment> getChargebacksByAccountId(final UUID accountId) {
return dao.getChargebacksByAccountId(accountId);
}
@Override
- public List<InvoicePayment> getChargebacksByPaymentAttemptId(UUID paymentAttemptId) {
+ public List<InvoicePayment> getChargebacksByPaymentAttemptId(final UUID paymentAttemptId) {
return dao.getChargebacksByPaymentAttemptId(paymentAttemptId);
}
@Override
- public InvoicePayment getChargebackById(UUID chargebackId) throws InvoiceApiException {
+ public InvoicePayment getChargebackById(final UUID chargebackId) throws InvoiceApiException {
return dao.getChargebackById(chargebackId);
}
@Override
- public UUID getAccountIdFromInvoicePaymentId(UUID invoicePaymentId) throws InvoiceApiException {
+ public UUID getAccountIdFromInvoicePaymentId(final UUID invoicePaymentId) throws InvoiceApiException {
return dao.getAccountIdFromInvoicePaymentId(invoicePaymentId);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
index bea87a7..9e9b95c 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
@@ -19,10 +19,6 @@ package com.ning.billing.invoice.api.migration;
import java.math.BigDecimal;
import java.util.UUID;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallOrigin;
-import com.ning.billing.util.callcontext.UserType;
-import com.ning.billing.util.callcontext.DefaultCallContextFactory;
import org.joda.time.DateTime;
import com.google.inject.Inject;
@@ -32,26 +28,30 @@ import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceMigrationApi;
import com.ning.billing.invoice.dao.DefaultInvoiceDao;
import com.ning.billing.invoice.model.MigrationInvoiceItem;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.DefaultCallContextFactory;
+import com.ning.billing.util.callcontext.UserType;
import com.ning.billing.util.clock.Clock;
public class DefaultInvoiceMigrationApi implements InvoiceMigrationApi {
-
- private DefaultInvoiceDao dao;
- private Clock clock;
-
- @Inject
- public DefaultInvoiceMigrationApi(DefaultInvoiceDao dao, Clock clock) {
- this.dao = dao;
- this.clock = clock;
- }
-
- @Override
- public UUID createMigrationInvoice(UUID accountId, DateTime targetDate, BigDecimal balance, Currency currency) {
- CallContext context = new DefaultCallContextFactory(clock).createMigrationCallContext("Migration", CallOrigin.INTERNAL, UserType.MIGRATION, clock.getUTCNow(), clock.getUTCNow());
- Invoice migrationInvoice = new MigrationInvoice(accountId, clock.getUTCNow(), targetDate, currency);
- InvoiceItem migrationInvoiceItem = new MigrationInvoiceItem(migrationInvoice.getId(), accountId, targetDate, balance, currency );
- migrationInvoice.addInvoiceItem(migrationInvoiceItem);
- dao.create(migrationInvoice, context);
- return migrationInvoice.getId();
- }
+
+ private final DefaultInvoiceDao dao;
+ private final Clock clock;
+
+ @Inject
+ public DefaultInvoiceMigrationApi(final DefaultInvoiceDao dao, final Clock clock) {
+ this.dao = dao;
+ this.clock = clock;
+ }
+
+ @Override
+ public UUID createMigrationInvoice(final UUID accountId, final DateTime targetDate, final BigDecimal balance, final Currency currency) {
+ final CallContext context = new DefaultCallContextFactory(clock).createMigrationCallContext("Migration", CallOrigin.INTERNAL, UserType.MIGRATION, clock.getUTCNow(), clock.getUTCNow());
+ final Invoice migrationInvoice = new MigrationInvoice(accountId, clock.getUTCNow(), targetDate, currency);
+ final InvoiceItem migrationInvoiceItem = new MigrationInvoiceItem(migrationInvoice.getId(), accountId, targetDate, balance, currency);
+ migrationInvoice.addInvoiceItem(migrationInvoiceItem);
+ dao.create(migrationInvoice, context);
+ return migrationInvoice.getId();
+ }
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/migration/MigrationInvoice.java b/invoice/src/main/java/com/ning/billing/invoice/api/migration/MigrationInvoice.java
index 6627982..a23bd01 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/migration/MigrationInvoice.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/migration/MigrationInvoice.java
@@ -16,14 +16,15 @@
package com.ning.billing.invoice.api.migration;
-import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.model.DefaultInvoice;
+import java.util.UUID;
+
import org.joda.time.DateTime;
-import java.util.UUID;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.model.DefaultInvoice;
public class MigrationInvoice extends DefaultInvoice {
- public MigrationInvoice(UUID accountId, DateTime invoiceDate, DateTime targetDate, Currency currency) {
+ public MigrationInvoice(final UUID accountId, final DateTime invoiceDate, final DateTime targetDate, final Currency currency) {
super(UUID.randomUUID(), accountId, null, invoiceDate, targetDate, currency, true);
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/test/DefaultInvoiceTestApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/test/DefaultInvoiceTestApi.java
index ec0ca88..5c17e3d 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/test/DefaultInvoiceTestApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/test/DefaultInvoiceTestApi.java
@@ -25,7 +25,7 @@ public class DefaultInvoiceTestApi implements InvoiceTestApi {
private final InvoiceDao invoiceDao;
@Inject
- public DefaultInvoiceTestApi(InvoiceDao invoiceDao) {
+ public DefaultInvoiceTestApi(final InvoiceDao invoiceDao) {
this.invoiceDao = invoiceDao;
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultEmptyInvoiceEvent.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultEmptyInvoiceEvent.java
index 97b32ae..60e9014 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultEmptyInvoiceEvent.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultEmptyInvoiceEvent.java
@@ -18,22 +18,22 @@ package com.ning.billing.invoice.api.user;
import java.util.UUID;
+import org.joda.time.DateTime;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
-import org.joda.time.DateTime;
-
import com.ning.billing.invoice.api.EmptyInvoiceEvent;
public class DefaultEmptyInvoiceEvent implements EmptyInvoiceEvent {
private final UUID accountId;
private final DateTime processingDate;
private final UUID userToken;
-
+
@JsonCreator
public DefaultEmptyInvoiceEvent(@JsonProperty("accountId") final UUID accountId,
- @JsonProperty("processingDate") final DateTime processingDate,
- @JsonProperty("userToken") final UUID userToken) {
+ @JsonProperty("processingDate") final DateTime processingDate,
+ @JsonProperty("userToken") final UUID userToken) {
super();
this.accountId = accountId;
this.processingDate = processingDate;
@@ -73,31 +73,40 @@ public class DefaultEmptyInvoiceEvent implements EmptyInvoiceEvent {
}
@Override
- public boolean equals(Object obj) {
- if (this == obj)
+ public boolean equals(final Object obj) {
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (getClass() != obj.getClass())
+ }
+ if (getClass() != obj.getClass()) {
return false;
- DefaultEmptyInvoiceEvent other = (DefaultEmptyInvoiceEvent) obj;
+ }
+ final DefaultEmptyInvoiceEvent other = (DefaultEmptyInvoiceEvent) obj;
if (accountId == null) {
- if (other.accountId != null)
+ if (other.accountId != null) {
return false;
- } else if (!accountId.equals(other.accountId))
+ }
+ } else if (!accountId.equals(other.accountId)) {
return false;
+ }
if (processingDate == null) {
- if (other.processingDate != null)
+ if (other.processingDate != null) {
return false;
- } else if (processingDate.compareTo(other.processingDate) != 0)
+ }
+ } else if (processingDate.compareTo(other.processingDate) != 0) {
return false;
+ }
if (userToken == null) {
- if (other.userToken != null)
+ if (other.userToken != null) {
return false;
- } else if (!userToken.equals(other.userToken))
+ }
+ } else if (!userToken.equals(other.userToken)) {
return false;
+ }
return true;
}
-
-
+
+
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java
index 7ba10fb..6a3cf86 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java
@@ -19,16 +19,16 @@ package com.ning.billing.invoice.api.user;
import java.math.BigDecimal;
import java.util.UUID;
+import org.joda.time.DateTime;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
-import org.joda.time.DateTime;
-
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceCreationEvent;
public class DefaultInvoiceCreationEvent implements InvoiceCreationEvent {
-
+
private final UUID invoiceId;
private final UUID accountId;
private final BigDecimal amountOwed;
@@ -37,12 +37,12 @@ public class DefaultInvoiceCreationEvent implements InvoiceCreationEvent {
private final UUID userToken;
@JsonCreator
- public DefaultInvoiceCreationEvent(@JsonProperty("invoiceId") UUID invoiceId,
- @JsonProperty("accountId") UUID accountId,
- @JsonProperty("amountOwed") BigDecimal amountOwed,
- @JsonProperty("currency") Currency currency,
- @JsonProperty("invoiceCreationDate") DateTime invoiceCreationDate,
- @JsonProperty("userToken") UUID userToken) {
+ public DefaultInvoiceCreationEvent(@JsonProperty("invoiceId") final UUID invoiceId,
+ @JsonProperty("accountId") final UUID accountId,
+ @JsonProperty("amountOwed") final BigDecimal amountOwed,
+ @JsonProperty("currency") final Currency currency,
+ @JsonProperty("invoiceCreationDate") final DateTime invoiceCreationDate,
+ @JsonProperty("userToken") final UUID userToken) {
this.invoiceId = invoiceId;
this.accountId = accountId;
this.amountOwed = amountOwed;
@@ -52,15 +52,15 @@ public class DefaultInvoiceCreationEvent implements InvoiceCreationEvent {
}
@JsonIgnore
- @Override
- public BusEventType getBusEventType() {
- return BusEventType.INVOICE_CREATION;
- }
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.INVOICE_CREATION;
+ }
- @Override
- public UUID getUserToken() {
- return userToken;
- }
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
@Override
public UUID getInvoiceId() {
@@ -105,7 +105,7 @@ public class DefaultInvoiceCreationEvent implements InvoiceCreationEvent {
result = prime
* result
+ ((invoiceCreationDate == null) ? 0 : invoiceCreationDate
- .hashCode());
+ .hashCode());
result = prime * result
+ ((invoiceId == null) ? 0 : invoiceId.hashCode());
result = prime * result
@@ -114,43 +114,57 @@ public class DefaultInvoiceCreationEvent implements InvoiceCreationEvent {
}
@Override
- public boolean equals(Object obj) {
- if (this == obj)
+ public boolean equals(final Object obj) {
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (getClass() != obj.getClass())
+ }
+ if (getClass() != obj.getClass()) {
return false;
- DefaultInvoiceCreationEvent other = (DefaultInvoiceCreationEvent) obj;
+ }
+ final DefaultInvoiceCreationEvent other = (DefaultInvoiceCreationEvent) obj;
if (accountId == null) {
- if (other.accountId != null)
+ if (other.accountId != null) {
return false;
- } else if (!accountId.equals(other.accountId))
+ }
+ } else if (!accountId.equals(other.accountId)) {
return false;
+ }
if (amountOwed == null) {
- if (other.amountOwed != null)
+ if (other.amountOwed != null) {
return false;
- } else if (!amountOwed.equals(other.amountOwed))
+ }
+ } else if (!amountOwed.equals(other.amountOwed)) {
return false;
- if (currency != other.currency)
+ }
+ if (currency != other.currency) {
return false;
+ }
if (invoiceCreationDate == null) {
- if (other.invoiceCreationDate != null)
+ if (other.invoiceCreationDate != null) {
return false;
- } else if (invoiceCreationDate.compareTo(other.invoiceCreationDate) != 0)
+ }
+ } else if (invoiceCreationDate.compareTo(other.invoiceCreationDate) != 0) {
return false;
+ }
if (invoiceId == null) {
- if (other.invoiceId != null)
+ if (other.invoiceId != null) {
return false;
- } else if (!invoiceId.equals(other.invoiceId))
+ }
+ } else if (!invoiceId.equals(other.invoiceId)) {
return false;
+ }
if (userToken == null) {
- if (other.userToken != null)
+ if (other.userToken != null) {
return false;
- } else if (!userToken.equals(other.userToken))
+ }
+ } else if (!userToken.equals(other.userToken)) {
return false;
+ }
return true;
}
-
-
+
+
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index 7f2ced3..e6dc189 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -20,18 +20,19 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.api.InvoiceItem;
-import com.ning.billing.util.callcontext.CallContext;
import org.joda.time.DateTime;
import com.google.inject.Inject;
+import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.InvoiceDispatcher;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
+import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.api.InvoiceUserApi;
import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.util.api.TagApiException;
+import com.ning.billing.util.callcontext.CallContext;
public class DefaultInvoiceUserApi implements InvoiceUserApi {
private final InvoiceDao dao;
@@ -54,15 +55,15 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
}
@Override
- public void notifyOfPaymentAttempt(InvoicePayment invoicePayment, CallContext context) {
+ public void notifyOfPaymentAttempt(final InvoicePayment invoicePayment, final CallContext context) {
dao.notifyOfPaymentAttempt(invoicePayment, context);
}
@Override
- public BigDecimal getAccountBalance(UUID accountId) {
- BigDecimal result = dao.getAccountBalance(accountId);
- return result == null ? BigDecimal.ZERO : result;
- }
+ public BigDecimal getAccountBalance(final UUID accountId) {
+ final BigDecimal result = dao.getAccountBalance(accountId);
+ return result == null ? BigDecimal.ZERO : result;
+ }
@Override
public Invoice getInvoice(final UUID invoiceId) {
@@ -74,20 +75,20 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
return dao.getUnpaidInvoicesByAccountId(accountId, upToDate);
}
- @Override
- public Invoice triggerInvoiceGeneration(final UUID accountId,
- final DateTime targetDate, final boolean dryRun,
- final CallContext context) throws InvoiceApiException {
- return dispatcher.processAccount(accountId, targetDate, dryRun, context);
- }
+ @Override
+ public Invoice triggerInvoiceGeneration(final UUID accountId,
+ final DateTime targetDate, final boolean dryRun,
+ final CallContext context) throws InvoiceApiException {
+ return dispatcher.processAccount(accountId, targetDate, dryRun, context);
+ }
@Override
- public void tagInvoiceAsWrittenOff(final UUID invoiceId, final CallContext context) {
+ public void tagInvoiceAsWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException {
dao.setWrittenOff(invoiceId, context);
}
@Override
- public void tagInvoiceAsNotWrittenOff(final UUID invoiceId, final CallContext context) throws InvoiceApiException {
+ public void tagInvoiceAsNotWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException {
dao.removeWrittenOff(invoiceId, context);
}
@@ -98,7 +99,7 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
@Override
public InvoiceItem insertCredit(final UUID accountId, final BigDecimal amount, final DateTime effectiveDate,
- final Currency currency, final CallContext context) throws InvoiceApiException {
+ final Currency currency, final CallContext context) throws InvoiceApiException {
return dao.insertCredit(accountId, amount, effectiveDate, currency, context);
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/CreditInvoiceItemSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/CreditInvoiceItemSqlDao.java
index d60e813..7f31b7b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/CreditInvoiceItemSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/CreditInvoiceItemSqlDao.java
@@ -16,12 +16,17 @@
package com.ning.billing.invoice.dao;
-import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.api.InvoiceItem;
-import com.ning.billing.invoice.model.CreditInvoiceItem;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallContextBinder;
-import com.ning.billing.util.entity.dao.EntitySqlDao;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.UUID;
+
import org.joda.time.DateTime;
import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
@@ -36,16 +41,12 @@ import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
-import java.lang.annotation.Annotation;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.math.BigDecimal;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.List;
-import java.util.UUID;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.InvoiceItem;
+import com.ning.billing.invoice.model.CreditInvoiceItem;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.entity.dao.EntitySqlDao;
@ExternalizedSqlViaStringTemplate3
@RegisterMapper(CreditInvoiceItemSqlDao.CreditInvoiceItemMapper.class)
@@ -66,7 +67,7 @@ public interface CreditInvoiceItemSqlDao extends EntitySqlDao<InvoiceItem> {
@SqlBatch
void create(@CreditInvoiceItemBinder final List<InvoiceItem> items, @CallContextBinder final CallContext context);
- @SqlBatch(transactional=false)
+ @SqlBatch(transactional = false)
void batchCreateFromTransaction(@CreditInvoiceItemBinder final List<InvoiceItem> items, @CallContextBinder final CallContext context);
@BindingAnnotation(CreditInvoiceItemBinder.CreditInvoiceItemBinderFactory.class)
@@ -74,9 +75,9 @@ public interface CreditInvoiceItemSqlDao extends EntitySqlDao<InvoiceItem> {
@Target({ElementType.PARAMETER})
public @interface CreditInvoiceItemBinder {
public static class CreditInvoiceItemBinderFactory implements BinderFactory {
- public Binder build(Annotation annotation) {
+ public Binder build(final Annotation annotation) {
return new Binder<CreditInvoiceItemBinder, CreditInvoiceItem>() {
- public void bind(SQLStatement q, CreditInvoiceItemBinder bind, CreditInvoiceItem item) {
+ public void bind(final SQLStatement q, final CreditInvoiceItemBinder bind, final CreditInvoiceItem item) {
q.bind("id", item.getId().toString());
q.bind("invoiceId", item.getInvoiceId().toString());
q.bind("accountId", item.getAccountId().toString());
@@ -88,15 +89,16 @@ public interface CreditInvoiceItemSqlDao extends EntitySqlDao<InvoiceItem> {
}
}
}
+
public class CreditInvoiceItemMapper implements ResultSetMapper<InvoiceItem> {
@Override
- public InvoiceItem map(int index, ResultSet result, StatementContext ctx) throws SQLException {
- UUID id = UUID.fromString(result.getString("id"));
- UUID invoiceId = UUID.fromString(result.getString("invoice_id"));
- UUID accountId = UUID.fromString(result.getString("account_id"));
- DateTime creditDate = new DateTime(result.getTimestamp("credit_date"));
- BigDecimal amount = result.getBigDecimal("amount");
- Currency currency = Currency.valueOf(result.getString("currency"));
+ public InvoiceItem map(final int index, final ResultSet result, final StatementContext ctx) throws SQLException {
+ final UUID id = UUID.fromString(result.getString("id"));
+ final UUID invoiceId = UUID.fromString(result.getString("invoice_id"));
+ final UUID accountId = UUID.fromString(result.getString("account_id"));
+ final DateTime creditDate = new DateTime(result.getTimestamp("credit_date"));
+ final BigDecimal amount = result.getBigDecimal("amount");
+ final Currency currency = Currency.valueOf(result.getString("currency"));
return new CreditInvoiceItem(id, invoiceId, accountId, creditDate, amount, currency);
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
index c3bd916..22ddb71 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
@@ -39,6 +39,7 @@ import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.invoice.model.RecurringInvoiceItem;
import com.ning.billing.invoice.notification.NextBillingDatePoster;
import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.api.TagUserApi;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.dao.EntityAudit;
@@ -51,7 +52,6 @@ public class DefaultInvoiceDao implements InvoiceDao {
private final InvoicePaymentSqlDao invoicePaymentSqlDao;
private final CreditInvoiceItemSqlDao creditInvoiceItemSqlDao;
private final TagUserApi tagUserApi;
-
private final NextBillingDatePoster nextBillingDatePoster;
@Inject
@@ -139,7 +139,6 @@ public class DefaultInvoiceDao implements InvoiceDao {
@Override
public void create(final Invoice invoice, final CallContext context) {
-
invoiceSqlDao.inTransaction(new Transaction<Void, InvoiceSqlDao>() {
@Override
public Void inTransaction(final InvoiceSqlDao transactional, final TransactionStatus status) throws Exception {
@@ -260,12 +259,12 @@ public class DefaultInvoiceDao implements InvoiceDao {
}
@Override
- public void setWrittenOff(final UUID invoiceId, final CallContext context) {
+ public void setWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException {
tagUserApi.addTag(invoiceId, ObjectType.INVOICE, ControlTagType.WRITTEN_OFF.toTagDefinition(), context);
}
@Override
- public void removeWrittenOff(final UUID invoiceId, final CallContext context) throws InvoiceApiException {
+ public void removeWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException {
tagUserApi.removeTag(invoiceId, ObjectType.INVOICE, ControlTagType.WRITTEN_OFF.toTagDefinition(), context);
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/FixedPriceInvoiceItemSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/FixedPriceInvoiceItemSqlDao.java
index d4fa5ee..e191023 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/FixedPriceInvoiceItemSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/FixedPriceInvoiceItemSqlDao.java
@@ -27,7 +27,6 @@ import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.util.entity.dao.EntitySqlDao;
import org.joda.time.DateTime;
import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
@@ -47,6 +46,7 @@ import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.entity.dao.EntitySqlDao;
@ExternalizedSqlViaStringTemplate3()
@RegisterMapper(FixedPriceInvoiceItemSqlDao.FixedPriceInvoiceItemMapper.class)
@@ -70,7 +70,7 @@ public interface FixedPriceInvoiceItemSqlDao extends EntitySqlDao<InvoiceItem> {
@SqlBatch
void create(@FixedPriceInvoiceItemBinder final List<InvoiceItem> items, @CallContextBinder final CallContext context);
- @SqlBatch(transactional=false)
+ @SqlBatch(transactional = false)
void batchCreateFromTransaction(@FixedPriceInvoiceItemBinder final List<InvoiceItem> items, @CallContextBinder final CallContext context);
@BindingAnnotation(FixedPriceInvoiceItemBinder.FixedPriceInvoiceItemBinderFactory.class)
@@ -78,9 +78,9 @@ public interface FixedPriceInvoiceItemSqlDao extends EntitySqlDao<InvoiceItem> {
@Target({ElementType.PARAMETER})
public @interface FixedPriceInvoiceItemBinder {
public static class FixedPriceInvoiceItemBinderFactory implements BinderFactory {
- public Binder build(Annotation annotation) {
+ public Binder build(final Annotation annotation) {
return new Binder<FixedPriceInvoiceItemBinder, FixedPriceInvoiceItem>() {
- public void bind(SQLStatement q, FixedPriceInvoiceItemBinder bind, FixedPriceInvoiceItem item) {
+ public void bind(final SQLStatement q, final FixedPriceInvoiceItemBinder bind, final FixedPriceInvoiceItem item) {
q.bind("id", item.getId().toString());
q.bind("accountId", item.getAccountId().toString());
q.bind("invoiceId", item.getInvoiceId().toString());
@@ -100,21 +100,21 @@ public interface FixedPriceInvoiceItemSqlDao extends EntitySqlDao<InvoiceItem> {
public static class FixedPriceInvoiceItemMapper implements ResultSetMapper<InvoiceItem> {
@Override
- public FixedPriceInvoiceItem map(int index, ResultSet result, StatementContext context) throws SQLException {
- UUID id = UUID.fromString(result.getString("id"));
- UUID invoiceId = UUID.fromString(result.getString("invoice_id"));
- UUID accountId = UUID.fromString(result.getString("account_id"));
- UUID bundleId = result.getString("bundle_id") == null ? null :UUID.fromString(result.getString("bundle_id"));
- UUID subscriptionId = result.getString("subscription_id") == null ? null : UUID.fromString(result.getString("subscription_id"));
- String planName = result.getString("plan_name");
- String phaseName = result.getString("phase_name");
- DateTime startDate = new DateTime(result.getTimestamp("start_date"));
- DateTime endDate = new DateTime(result.getTimestamp("end_date"));
- BigDecimal amount = result.getBigDecimal("amount");
- Currency currency = Currency.valueOf(result.getString("currency"));
+ public FixedPriceInvoiceItem map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
+ final UUID id = UUID.fromString(result.getString("id"));
+ final UUID invoiceId = UUID.fromString(result.getString("invoice_id"));
+ final UUID accountId = UUID.fromString(result.getString("account_id"));
+ final UUID bundleId = result.getString("bundle_id") == null ? null : UUID.fromString(result.getString("bundle_id"));
+ final UUID subscriptionId = result.getString("subscription_id") == null ? null : UUID.fromString(result.getString("subscription_id"));
+ final String planName = result.getString("plan_name");
+ final String phaseName = result.getString("phase_name");
+ final DateTime startDate = new DateTime(result.getTimestamp("start_date"));
+ final DateTime endDate = new DateTime(result.getTimestamp("end_date"));
+ final BigDecimal amount = result.getBigDecimal("amount");
+ final Currency currency = Currency.valueOf(result.getString("currency"));
return new FixedPriceInvoiceItem(id, invoiceId, accountId, bundleId, subscriptionId, planName, phaseName,
- startDate, endDate, amount, currency);
+ startDate, endDate, amount, currency);
}
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
index c7e520b..fe82d6c 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
@@ -16,17 +16,19 @@
package com.ning.billing.invoice.dao;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePayment;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.callcontext.CallContext;
-import org.joda.time.DateTime;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.UUID;
public interface InvoiceDao {
void create(Invoice invoice, CallContext context);
@@ -53,11 +55,11 @@ public interface InvoiceDao {
void test();
- List<Invoice> getAllInvoicesByAccount(final UUID accountId);
+ List<Invoice> getAllInvoicesByAccount(final UUID accountId);
- void setWrittenOff(final UUID invoiceId, final CallContext context);
+ void setWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException;
- void removeWrittenOff(final UUID invoiceId, final CallContext context) throws InvoiceApiException;
+ void removeWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException;
void postChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
index 69c4c2a..ebbdbb7 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
@@ -27,15 +27,6 @@ import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.model.DefaultInvoicePayment;
-import com.ning.billing.util.dao.AuditSqlDao;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallContextBinder;
-import com.ning.billing.util.dao.BinderBase;
-import com.ning.billing.util.dao.MapperBase;
-import com.ning.billing.util.dao.UuidMapper;
-import com.ning.billing.util.entity.dao.EntitySqlDao;
import org.joda.time.DateTime;
import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
@@ -52,14 +43,23 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
+import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoicePayment;
+import com.ning.billing.invoice.model.DefaultInvoicePayment;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.dao.AuditSqlDao;
+import com.ning.billing.util.dao.BinderBase;
+import com.ning.billing.util.dao.MapperBase;
+import com.ning.billing.util.dao.UuidMapper;
+import com.ning.billing.util.entity.dao.EntitySqlDao;
@ExternalizedSqlViaStringTemplate3
@RegisterMapper(InvoicePaymentSqlDao.InvoicePaymentMapper.class)
public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePayment>, Transactional<InvoicePaymentSqlDao>, AuditSqlDao, Transmogrifier {
@SqlQuery
List<Long> getRecordIds(@Bind("invoiceId") final String invoiceId);
-
+
@SqlQuery
public InvoicePayment getByPaymentAttemptId(@Bind("paymentAttempt") final String paymentAttemptId);
@@ -70,7 +70,7 @@ public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePayment>, Tran
public void create(@InvoicePaymentBinder final InvoicePayment invoicePayment,
@CallContextBinder final CallContext context);
- @SqlBatch(transactional=false)
+ @SqlBatch(transactional = false)
void batchCreateFromTransaction(@InvoicePaymentBinder final List<InvoicePayment> items,
@CallContextBinder final CallContext context);
@@ -99,7 +99,7 @@ public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePayment>, Tran
public static class InvoicePaymentMapper extends MapperBase implements ResultSetMapper<InvoicePayment> {
@Override
- public InvoicePayment map(int index, ResultSet result, StatementContext context) throws SQLException {
+ public InvoicePayment map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
final UUID id = getUUID(result, "id");
final UUID paymentAttemptId = getUUID(result, "payment_attempt_id");
final UUID invoiceId = getUUID(result, "invoice_id");
@@ -110,7 +110,7 @@ public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePayment>, Tran
final UUID reversedInvoicePaymentId = getUUID(result, "reversed_invoice_Payment_id");
return new DefaultInvoicePayment(id, paymentAttemptId, invoiceId, paymentAttemptDate,
- amount, currency, reversedInvoicePaymentId);
+ amount, currency, reversedInvoicePaymentId);
}
}
@@ -120,16 +120,16 @@ public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePayment>, Tran
public @interface InvoicePaymentBinder {
public static class InvoicePaymentBinderFactory extends BinderBase implements BinderFactory {
@Override
- public Binder build(Annotation annotation) {
+ public Binder build(final Annotation annotation) {
return new Binder<InvoicePaymentBinder, InvoicePayment>() {
@Override
- public void bind(SQLStatement q, InvoicePaymentBinder bind, InvoicePayment payment) {
+ public void bind(final SQLStatement q, final InvoicePaymentBinder bind, final InvoicePayment payment) {
q.bind("id", payment.getId().toString());
q.bind("invoiceId", payment.getInvoiceId().toString());
q.bind("paymentAttemptId", uuidToString(payment.getPaymentAttemptId()));
q.bind("paymentAttemptDate", payment.getPaymentAttemptDate().toDate());
q.bind("amount", payment.getAmount());
- Currency currency = payment.getCurrency();
+ final Currency currency = payment.getCurrency();
q.bind("currency", (currency == null) ? null : currency.toString());
q.bind("reversedInvoicePaymentId", uuidToString(payment.getReversedInvoicePaymentId()));
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
index 04b3fce..21fe8d5 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
@@ -16,14 +16,18 @@
package com.ning.billing.invoice.dao;
-import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.model.DefaultInvoice;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.dao.AuditSqlDao;
-import com.ning.billing.util.dao.UuidMapper;
-import com.ning.billing.util.callcontext.CallContextBinder;
-import com.ning.billing.util.entity.dao.EntitySqlDao;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
import org.joda.time.DateTime;
import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
@@ -40,17 +44,14 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
-import java.lang.annotation.Annotation;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.math.BigDecimal;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.model.DefaultInvoice;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.dao.AuditSqlDao;
+import com.ning.billing.util.dao.UuidMapper;
+import com.ning.billing.util.entity.dao.EntitySqlDao;
@ExternalizedSqlViaStringTemplate3()
@RegisterMapper(InvoiceSqlDao.InvoiceMapper.class)
@@ -61,7 +62,7 @@ public interface InvoiceSqlDao extends EntitySqlDao<Invoice>, AuditSqlDao, Trans
@SqlQuery
List<Invoice> getInvoicesByAccount(@Bind("accountId") final String accountId);
-
+
@SqlQuery
List<Invoice> getAllInvoicesByAccount(@Bind("accountId") final String string);
@@ -90,10 +91,10 @@ public interface InvoiceSqlDao extends EntitySqlDao<Invoice>, AuditSqlDao, Trans
public @interface InvoiceBinder {
public static class InvoiceBinderFactory implements BinderFactory {
@Override
- public Binder<InvoiceBinder, Invoice> build(Annotation annotation) {
+ public Binder<InvoiceBinder, Invoice> build(final Annotation annotation) {
return new Binder<InvoiceBinder, Invoice>() {
@Override
- public void bind(@SuppressWarnings("rawtypes") SQLStatement q, InvoiceBinder bind, Invoice invoice) {
+ public void bind(@SuppressWarnings("rawtypes") final SQLStatement q, final InvoiceBinder bind, final Invoice invoice) {
q.bind("id", invoice.getId().toString());
q.bind("accountId", invoice.getAccountId().toString());
q.bind("invoiceDate", invoice.getInvoiceDate().toDate());
@@ -108,14 +109,14 @@ public interface InvoiceSqlDao extends EntitySqlDao<Invoice>, AuditSqlDao, Trans
public static class InvoiceMapper implements ResultSetMapper<Invoice> {
@Override
- public Invoice map(int index, ResultSet result, StatementContext context) throws SQLException {
- UUID id = UUID.fromString(result.getString("id"));
- UUID accountId = UUID.fromString(result.getString("account_id"));
- int invoiceNumber = result.getInt("invoice_number");
- DateTime invoiceDate = new DateTime(result.getTimestamp("invoice_date"));
- DateTime targetDate = new DateTime(result.getTimestamp("target_date"));
- Currency currency = Currency.valueOf(result.getString("currency"));
- boolean isMigrationInvoice = result.getBoolean("migrated");
+ public Invoice map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
+ final UUID id = UUID.fromString(result.getString("id"));
+ final UUID accountId = UUID.fromString(result.getString("account_id"));
+ final int invoiceNumber = result.getInt("invoice_number");
+ final DateTime invoiceDate = new DateTime(result.getTimestamp("invoice_date"));
+ final DateTime targetDate = new DateTime(result.getTimestamp("target_date"));
+ final Currency currency = Currency.valueOf(result.getString("currency"));
+ final boolean isMigrationInvoice = result.getBoolean("migrated");
return new DefaultInvoice(id, accountId, invoiceNumber, invoiceDate, targetDate, currency, isMigrationInvoice);
}
@@ -138,8 +139,5 @@ public interface InvoiceSqlDao extends EntitySqlDao<Invoice>, AuditSqlDao, Trans
return amountInvoiced.subtract(amountPaid);
}
}
-
-
-
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/RecurringInvoiceItemSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/RecurringInvoiceItemSqlDao.java
index 4daa560..029b29d 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/RecurringInvoiceItemSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/RecurringInvoiceItemSqlDao.java
@@ -27,7 +27,6 @@ import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.util.dao.MapperBase;
import org.joda.time.DateTime;
import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
@@ -47,6 +46,7 @@ import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.model.RecurringInvoiceItem;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.dao.MapperBase;
import com.ning.billing.util.entity.dao.EntitySqlDao;
@ExternalizedSqlViaStringTemplate3()
@@ -77,10 +77,10 @@ public interface RecurringInvoiceItemSqlDao extends EntitySqlDao<InvoiceItem> {
public @interface RecurringInvoiceItemBinder {
public static class InvoiceItemBinderFactory implements BinderFactory {
@Override
- public Binder build(Annotation annotation) {
+ public Binder build(final Annotation annotation) {
return new Binder<RecurringInvoiceItemBinder, RecurringInvoiceItem>() {
@Override
- public void bind(SQLStatement q, RecurringInvoiceItemBinder bind, RecurringInvoiceItem item) {
+ public void bind(final SQLStatement q, final RecurringInvoiceItemBinder bind, final RecurringInvoiceItem item) {
q.bind("id", item.getId().toString());
q.bind("invoiceId", item.getInvoiceId().toString());
q.bind("accountId", item.getAccountId().toString());
@@ -102,23 +102,23 @@ public interface RecurringInvoiceItemSqlDao extends EntitySqlDao<InvoiceItem> {
public static class RecurringInvoiceItemMapper extends MapperBase implements ResultSetMapper<InvoiceItem> {
@Override
- public InvoiceItem map(int index, ResultSet result, StatementContext context) throws SQLException {
- UUID id = getUUID(result, "id");
- UUID invoiceId = getUUID(result, "invoice_id");
- UUID accountId = getUUID(result, "account_id");
- UUID subscriptionId = getUUID(result, "subscription_id");
- UUID bundleId = getUUID(result, "bundle_id");
- String planName = result.getString("plan_name");
- String phaseName = result.getString("phase_name");
- DateTime startDate = getDate(result, "start_date");
- DateTime endDate = getDate(result, "end_date");
- BigDecimal amount = result.getBigDecimal("amount");
- BigDecimal rate = result.getBigDecimal("rate");
- Currency currency = Currency.valueOf(result.getString("currency"));
- UUID reversedItemId = getUUID(result, "reversed_item_id");
+ public InvoiceItem map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
+ final UUID id = getUUID(result, "id");
+ final UUID invoiceId = getUUID(result, "invoice_id");
+ final UUID accountId = getUUID(result, "account_id");
+ final UUID subscriptionId = getUUID(result, "subscription_id");
+ final UUID bundleId = getUUID(result, "bundle_id");
+ final String planName = result.getString("plan_name");
+ final String phaseName = result.getString("phase_name");
+ final DateTime startDate = getDate(result, "start_date");
+ final DateTime endDate = getDate(result, "end_date");
+ final BigDecimal amount = result.getBigDecimal("amount");
+ final BigDecimal rate = result.getBigDecimal("rate");
+ final Currency currency = Currency.valueOf(result.getString("currency"));
+ final UUID reversedItemId = getUUID(result, "reversed_item_id");
return new RecurringInvoiceItem(id, invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, startDate, endDate,
- amount, rate, currency, reversedItemId);
+ amount, rate, currency, reversedItemId);
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java b/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
index f440071..b0fa991 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
@@ -58,10 +58,10 @@ public class DefaultInvoiceModule extends AbstractModule implements InvoiceModul
public void installInvoiceUserApi() {
bind(InvoiceUserApi.class).to(DefaultInvoiceUserApi.class).asEagerSingleton();
}
-
+
/* (non-Javadoc)
- * @see com.ning.billing.invoice.glue.InvoiceModule#installInvoiceUserApi()
- */
+ * @see com.ning.billing.invoice.glue.InvoiceModule#installInvoiceUserApi()
+ */
@Override
public void installInvoiceTestApi() {
bind(InvoiceTestApi.class).to(DefaultInvoiceTestApi.class).asEagerSingleton();
@@ -83,19 +83,19 @@ public class DefaultInvoiceModule extends AbstractModule implements InvoiceModul
protected void installInvoiceService() {
bind(InvoiceService.class).to(DefaultInvoiceService.class).asEagerSingleton();
}
-
+
/* (non-Javadoc)
- * @see com.ning.billing.invoice.glue.InvoiceModule#installInvoiceMigrationApi()
- */
+ * @see com.ning.billing.invoice.glue.InvoiceModule#installInvoiceMigrationApi()
+ */
@Override
public void installInvoiceMigrationApi() {
- bind(InvoiceMigrationApi.class).to(DefaultInvoiceMigrationApi.class).asEagerSingleton();
- }
+ bind(InvoiceMigrationApi.class).to(DefaultInvoiceMigrationApi.class).asEagerSingleton();
+ }
protected void installNotifiers() {
bind(NextBillingDateNotifier.class).to(DefaultNextBillingDateNotifier.class).asEagerSingleton();
bind(NextBillingDatePoster.class).to(DefaultNextBillingDatePoster.class).asEagerSingleton();
- TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
+ final TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
bind(TranslatorConfig.class).toInstance(config);
bind(InvoiceFormatterFactory.class).to(DefaultInvoiceFormatterFactory.class).asEagerSingleton();
bind(InvoiceNotifier.class).to(NullInvoiceNotifier.class).asEagerSingleton();
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
index b982a3f..af6dad1 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
@@ -60,8 +60,8 @@ import com.ning.billing.util.globallocker.GlobalLocker.LockerService;
import com.ning.billing.util.globallocker.LockFailedException;
public class InvoiceDispatcher {
- private final static Logger log = LoggerFactory.getLogger(InvoiceDispatcher.class);
- private final static int NB_LOCK_TRY = 5;
+ private static final Logger log = LoggerFactory.getLogger(InvoiceDispatcher.class);
+ private static final int NB_LOCK_TRY = 5;
private final InvoiceGenerator generator;
private final BillingApi billingApi;
@@ -76,12 +76,12 @@ public class InvoiceDispatcher {
@Inject
public InvoiceDispatcher(final InvoiceGenerator generator, final AccountUserApi accountUserApi,
- final BillingApi billingApi,
- final InvoiceDao invoiceDao,
- final InvoiceNotifier invoiceNotifier,
- final GlobalLocker locker,
- final Bus eventBus,
- final Clock clock) {
+ final BillingApi billingApi,
+ final InvoiceDao invoiceDao,
+ final InvoiceNotifier invoiceNotifier,
+ final GlobalLocker locker,
+ final Bus eventBus,
+ final Clock clock) {
this.generator = generator;
this.billingApi = billingApi;
this.accountUserApi = accountUserApi;
@@ -91,37 +91,36 @@ public class InvoiceDispatcher {
this.eventBus = eventBus;
this.clock = clock;
- String verboseOutputValue = System.getProperty("VERBOSE_OUTPUT");
+ final String verboseOutputValue = System.getProperty("VERBOSE_OUTPUT");
VERBOSE_OUTPUT = (verboseOutputValue != null) && Boolean.parseBoolean(verboseOutputValue);
}
public void processSubscription(final SubscriptionEvent transition,
- final CallContext context) throws InvoiceApiException {
- UUID subscriptionId = transition.getSubscriptionId();
- DateTime targetDate = transition.getEffectiveTransitionTime();
+ final CallContext context) throws InvoiceApiException {
+ final UUID subscriptionId = transition.getSubscriptionId();
+ final DateTime targetDate = transition.getEffectiveTransitionTime();
log.info("Got subscription transition from InvoiceListener. id: " + subscriptionId.toString() + "; targetDate: " + targetDate.toString());
log.info("Transition type: " + transition.getTransitionType().toString());
processSubscription(subscriptionId, targetDate, context);
}
public void processSubscription(final UUID subscriptionId, final DateTime targetDate,
- final CallContext context) throws InvoiceApiException {
+ final CallContext context) throws InvoiceApiException {
try {
if (subscriptionId == null) {
log.error("Failed handling entitlement change.", new InvoiceApiException(ErrorCode.INVOICE_INVALID_TRANSITION));
return;
}
- UUID accountId = billingApi.getAccountIdFromSubscriptionId(subscriptionId);
+ final UUID accountId = billingApi.getAccountIdFromSubscriptionId(subscriptionId);
processAccount(accountId, targetDate, false, context);
} catch (EntitlementBillingApiException e) {
log.error("Failed handling entitlement change.",
- new InvoiceApiException(ErrorCode.INVOICE_NO_ACCOUNT_ID_FOR_SUBSCRIPTION_ID, subscriptionId.toString()));
+ new InvoiceApiException(ErrorCode.INVOICE_NO_ACCOUNT_ID_FOR_SUBSCRIPTION_ID, subscriptionId.toString()));
}
- return;
}
public Invoice processAccount(final UUID accountId, final DateTime targetDate,
- final boolean dryRun, final CallContext context) throws InvoiceApiException {
+ final boolean dryRun, final CallContext context) throws InvoiceApiException {
GlobalLock lock = null;
try {
lock = locker.lockWithNumberOfTries(LockerService.INVOICE, accountId.toString(), NB_LOCK_TRY);
@@ -131,7 +130,7 @@ public class InvoiceDispatcher {
} catch (LockFailedException e) {
// Not good!
log.error(String.format("Failed to process invoice for account %s, targetDate %s",
- accountId.toString(), targetDate), e);
+ accountId.toString(), targetDate), e);
} finally {
if (lock != null) {
lock.release();
@@ -140,35 +139,35 @@ public class InvoiceDispatcher {
return null;
}
-
+
private Invoice processAccountWithLock(final UUID accountId, final DateTime targetDate,
- final boolean dryRun, final CallContext context) throws InvoiceApiException {
+ final boolean dryRun, final CallContext context) throws InvoiceApiException {
try {
- Account account = accountUserApi.getAccountById(accountId);
- BillingEventSet billingEvents = billingApi.getBillingEventsForAccountAndUpdateAccountBCD(accountId);
-
+ final Account account = accountUserApi.getAccountById(accountId);
+ final BillingEventSet billingEvents = billingApi.getBillingEventsForAccountAndUpdateAccountBCD(accountId);
+
List<Invoice> invoices = new ArrayList<Invoice>();
if (!billingEvents.isAccountAutoInvoiceOff()) {
invoices = invoiceDao.getInvoicesByAccount(accountId); //no need to fetch, invoicing is off on this account
- }
+ }
- Currency targetCurrency = account.getCurrency();
+ final Currency targetCurrency = account.getCurrency();
-
- Invoice invoice = generator.generateInvoice(accountId, billingEvents, invoices, targetDate, targetCurrency);
+
+ final Invoice invoice = generator.generateInvoice(accountId, billingEvents, invoices, targetDate, targetCurrency);
if (invoice == null) {
log.info("Generated null invoice.");
outputDebugData(billingEvents, invoices);
if (!dryRun) {
- BusEvent event = new DefaultEmptyInvoiceEvent(accountId, clock.getUTCNow(), context.getUserToken());
+ final BusEvent event = new DefaultEmptyInvoiceEvent(accountId, clock.getUTCNow(), context.getUserToken());
postEvent(event, accountId);
}
} else {
log.info("Generated invoice {} with {} items.", invoice.getId().toString(), invoice.getNumberOfItems());
if (VERBOSE_OUTPUT) {
log.info("New items");
- for (InvoiceItem item : invoice.getInvoiceItems()) {
+ for (final InvoiceItem item : invoice.getInvoiceItems()) {
log.info(item.toString());
}
}
@@ -176,14 +175,14 @@ public class InvoiceDispatcher {
if (!dryRun) {
invoiceDao.create(invoice, context);
- List<InvoiceItem> fixedPriceInvoiceItems = invoice.getInvoiceItems(FixedPriceInvoiceItem.class);
- List<InvoiceItem> recurringInvoiceItems = invoice.getInvoiceItems(RecurringInvoiceItem.class);
+ final List<InvoiceItem> fixedPriceInvoiceItems = invoice.getInvoiceItems(FixedPriceInvoiceItem.class);
+ final List<InvoiceItem> recurringInvoiceItems = invoice.getInvoiceItems(RecurringInvoiceItem.class);
setChargedThroughDates(fixedPriceInvoiceItems, recurringInvoiceItems, context);
final InvoiceCreationEvent event = new DefaultInvoiceCreationEvent(invoice.getId(), invoice.getAccountId(),
- invoice.getBalance(), invoice.getCurrency(),
- invoice.getInvoiceDate(),
- context.getUserToken());
+ invoice.getBalance(), invoice.getCurrency(),
+ invoice.getInvoiceDate(),
+ context.getUserToken());
postEvent(event, accountId);
}
@@ -194,41 +193,41 @@ public class InvoiceDispatcher {
}
return invoice;
- } catch(AccountApiException e) {
- log.error("Failed handling entitlement change.",e);
- return null;
+ } catch (AccountApiException e) {
+ log.error("Failed handling entitlement change.", e);
+ return null;
}
}
private void setChargedThroughDates(final Collection<InvoiceItem> fixedPriceItems,
- final Collection<InvoiceItem> recurringItems, CallContext context) {
+ final Collection<InvoiceItem> recurringItems, final CallContext context) {
- Map<UUID, DateTime> chargeThroughDates = new HashMap<UUID, DateTime>();
+ final Map<UUID, DateTime> chargeThroughDates = new HashMap<UUID, DateTime>();
addInvoiceItemsToChargeThroughDates(chargeThroughDates, fixedPriceItems);
addInvoiceItemsToChargeThroughDates(chargeThroughDates, recurringItems);
- for (UUID subscriptionId : chargeThroughDates.keySet()) {
- if(subscriptionId != null) {
- DateTime chargeThroughDate = chargeThroughDates.get(subscriptionId);
+ for (final UUID subscriptionId : chargeThroughDates.keySet()) {
+ if (subscriptionId != null) {
+ final DateTime chargeThroughDate = chargeThroughDates.get(subscriptionId);
log.info("Setting CTD for subscription {} to {}", subscriptionId.toString(), chargeThroughDate.toString());
billingApi.setChargedThroughDate(subscriptionId, chargeThroughDate, context);
}
}
}
-
+
private void postEvent(final BusEvent event, final UUID accountId) {
try {
eventBus.post(event);
- } catch (EventBusException e){
- log.error(String.format("Failed to post event {} for account {} ", event.getBusEventType(), accountId), e);
+ } catch (EventBusException e) {
+ log.error(String.format("Failed to post event %s for account %s", event.getBusEventType(), accountId), e);
}
}
- private void addInvoiceItemsToChargeThroughDates(Map<UUID, DateTime> chargeThroughDates, Collection<InvoiceItem> items) {
- for (InvoiceItem item : items) {
- UUID subscriptionId = item.getSubscriptionId();
- DateTime endDate = item.getEndDate();
+ private void addInvoiceItemsToChargeThroughDates(final Map<UUID, DateTime> chargeThroughDates, final Collection<InvoiceItem> items) {
+ for (final InvoiceItem item : items) {
+ final UUID subscriptionId = item.getSubscriptionId();
+ final DateTime endDate = item.getEndDate();
if (chargeThroughDates.containsKey(subscriptionId)) {
if (chargeThroughDates.get(subscriptionId).isBefore(endDate)) {
@@ -241,16 +240,16 @@ public class InvoiceDispatcher {
}
- private void outputDebugData(Collection<BillingEvent> events, Collection<Invoice> invoices) {
+ private void outputDebugData(final Collection<BillingEvent> events, final Collection<Invoice> invoices) {
if (VERBOSE_OUTPUT) {
log.info("Events");
- for (BillingEvent event : events) {
+ for (final BillingEvent event : events) {
log.info(event.toString());
}
log.info("Existing items");
- for (Invoice invoice : invoices) {
- for (InvoiceItem item : invoice.getInvoiceItems()) {
+ for (final Invoice invoice : invoices) {
+ for (final InvoiceItem item : invoice.getInvoiceItems()) {
log.info(item.toString());
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
index 66f423e..5793dec 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
@@ -18,10 +18,6 @@ package com.ning.billing.invoice;
import java.util.UUID;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallOrigin;
-import com.ning.billing.util.callcontext.UserType;
-import com.ning.billing.util.callcontext.CallContextFactory;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,14 +28,18 @@ import com.ning.billing.entitlement.api.SubscriptionTransitionType;
import com.ning.billing.entitlement.api.timeline.RepairEntitlementEvent;
import com.ning.billing.entitlement.api.user.SubscriptionEvent;
import com.ning.billing.invoice.api.InvoiceApiException;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextFactory;
+import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.UserType;
public class InvoiceListener {
- private final static Logger log = LoggerFactory.getLogger(InvoiceListener.class);
- private final InvoiceDispatcher dispatcher;
+ private static final Logger log = LoggerFactory.getLogger(InvoiceListener.class);
+ private final InvoiceDispatcher dispatcher;
private final CallContextFactory factory;
@Inject
- public InvoiceListener(CallContextFactory factory, InvoiceDispatcher dispatcher) {
+ public InvoiceListener(final CallContextFactory factory, final InvoiceDispatcher dispatcher) {
this.dispatcher = dispatcher;
this.factory = factory;
}
@@ -47,25 +47,25 @@ public class InvoiceListener {
@Subscribe
public void handleRepairEntitlementEvent(final RepairEntitlementEvent repairEvent) {
try {
- CallContext context = factory.createCallContext("RepairBundle", CallOrigin.INTERNAL, UserType.SYSTEM, repairEvent.getUserToken());
+ final CallContext context = factory.createCallContext("RepairBundle", CallOrigin.INTERNAL, UserType.SYSTEM, repairEvent.getUserToken());
dispatcher.processAccount(repairEvent.getAccountId(), repairEvent.getEffectiveDate(), false, context);
} catch (InvoiceApiException e) {
log.error(e.getMessage());
}
}
-
+
@Subscribe
public void handleSubscriptionTransition(final SubscriptionEvent transition) {
try {
// Skip future uncancel event
// Skip events which are marked as not being the last one
- if (transition.getTransitionType() == SubscriptionTransitionType.UNCANCEL
+ if (transition.getTransitionType() == SubscriptionTransitionType.UNCANCEL
|| transition.getRemainingEventsForUserOperation() > 0) {
return;
}
- CallContext context = factory.createCallContext("Transition", CallOrigin.INTERNAL, UserType.SYSTEM, transition.getUserToken());
- dispatcher.processSubscription(transition, context);
+ final CallContext context = factory.createCallContext("Transition", CallOrigin.INTERNAL, UserType.SYSTEM, transition.getUserToken());
+ dispatcher.processSubscription(transition, context);
} catch (InvoiceApiException e) {
log.error(e.getMessage());
}
@@ -73,8 +73,8 @@ public class InvoiceListener {
public void handleNextBillingDateEvent(final UUID subscriptionId, final DateTime eventDateTime) {
try {
- CallContext context = factory.createCallContext("Next Billing Date", CallOrigin.INTERNAL, UserType.SYSTEM);
- dispatcher.processSubscription(subscriptionId, eventDateTime, context);
+ final CallContext context = factory.createCallContext("Next Billing Date", CallOrigin.INTERNAL, UserType.SYSTEM);
+ dispatcher.processSubscription(subscriptionId, eventDateTime, context);
} catch (InvoiceApiException e) {
log.error(e.getMessage());
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/BillingMode.java b/invoice/src/main/java/com/ning/billing/invoice/model/BillingMode.java
index 4920b88..7006cf6 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/BillingMode.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/BillingMode.java
@@ -16,12 +16,14 @@
package com.ning.billing.invoice.model;
-import com.ning.billing.catalog.api.BillingPeriod;
+import java.util.List;
+
import org.joda.time.DateTime;
-import java.util.List;
+import com.ning.billing.catalog.api.BillingPeriod;
public interface BillingMode {
List<RecurringInvoiceItemData> calculateInvoiceItemData(DateTime startDate, DateTime endDate, DateTime targetDate, int billingCycleDay, BillingPeriod billingPeriod) throws InvalidDateSequenceException;
+
List<RecurringInvoiceItemData> calculateInvoiceItemData(DateTime startDate, DateTime targetDate, int billingCycleDay, BillingPeriod billingPeriod) throws InvalidDateSequenceException;
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/BillingModeBase.java b/invoice/src/main/java/com/ning/billing/invoice/model/BillingModeBase.java
index 55c646c..adc4e3f 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/BillingModeBase.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/BillingModeBase.java
@@ -16,11 +16,6 @@
package com.ning.billing.invoice.model;
-import com.ning.billing.catalog.api.BillingPeriod;
-import org.joda.time.DateTime;
-
-import java.math.BigDecimal;
-
public abstract class BillingModeBase {
// public BigDecimal calculateNumberOfBillingCycles(final DateTime startDate, final DateTime endDate, final DateTime targetDate, final int billingCycleDay, final BillingPeriod billingPeriod) throws InvalidDateSequenceException {
// if (endDate.isBefore(startDate)) {throw new InvalidDateSequenceException();}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/CreditInvoiceItem.java b/invoice/src/main/java/com/ning/billing/invoice/model/CreditInvoiceItem.java
index 651a717..d271561 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/CreditInvoiceItem.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/CreditInvoiceItem.java
@@ -16,20 +16,21 @@
package com.ning.billing.invoice.model;
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceItemType;
-import org.joda.time.DateTime;
-
-import java.math.BigDecimal;
-import java.util.UUID;
public class CreditInvoiceItem extends InvoiceItemBase {
- public CreditInvoiceItem(UUID invoiceId, UUID accountId, DateTime date, BigDecimal amount, Currency currency) {
+ public CreditInvoiceItem(final UUID invoiceId, final UUID accountId, final DateTime date, final BigDecimal amount, final Currency currency) {
this(UUID.randomUUID(), invoiceId, accountId, date, amount, currency);
}
- public CreditInvoiceItem(UUID id, UUID invoiceId, UUID accountId, DateTime date, BigDecimal amount, Currency currency) {
+ public CreditInvoiceItem(final UUID id, final UUID invoiceId, final UUID accountId, final DateTime date, final BigDecimal amount, final Currency currency) {
super(id, invoiceId, accountId, null, null, null, null, date, date, amount, currency, InvoiceItemType.CREDIT);
}
@@ -44,17 +45,31 @@ public class CreditInvoiceItem extends InvoiceItemBase {
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
- CreditInvoiceItem that = (CreditInvoiceItem) o;
+ final CreditInvoiceItem that = (CreditInvoiceItem) o;
- if (accountId.compareTo(that.accountId) != 0) return false;
- if (amount.compareTo(that.amount) != 0) return false;
- if (currency != that.currency) return false;
- if (startDate.compareTo(that.startDate) != 0) return false;
- if (endDate.compareTo(that.endDate) != 0) return false;
+ if (accountId.compareTo(that.accountId) != 0) {
+ return false;
+ }
+ if (amount.compareTo(that.amount) != 0) {
+ return false;
+ }
+ if (currency != that.currency) {
+ return false;
+ }
+ if (startDate.compareTo(that.startDate) != 0) {
+ return false;
+ }
+ if (endDate.compareTo(that.endDate) != 0) {
+ return false;
+ }
return true;
}
@@ -70,12 +85,12 @@ public class CreditInvoiceItem extends InvoiceItemBase {
}
@Override
- public int compareTo(InvoiceItem item) {
+ public int compareTo(final InvoiceItem item) {
if (!(item instanceof CreditInvoiceItem)) {
return 1;
}
- CreditInvoiceItem that = (CreditInvoiceItem) item;
+ final CreditInvoiceItem that = (CreditInvoiceItem) item;
return id.compareTo(that.getId());
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DateRange.java b/invoice/src/main/java/com/ning/billing/invoice/model/DateRange.java
index b1e2fa9..c6eb5bc 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DateRange.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DateRange.java
@@ -22,17 +22,16 @@ public class DateRange {
private final DateTime startDate;
private final DateTime endDate;
- public DateRange(DateTime startDate, DateTime endDate) {
+ public DateRange(final DateTime startDate, final DateTime endDate) {
this.startDate = startDate;
this.endDate = endDate;
}
/**
- *
* @param date the DateTime in question
* @return whether the DateRange contains (inclusively) the DateTime in question
*/
- public boolean contains(DateTime date) {
+ public boolean contains(final DateTime date) {
if (endDate == null) {
return date.compareTo(startDate) >= 0;
}
@@ -40,11 +39,11 @@ public class DateRange {
return !date.isBefore(startDate) && !date.isAfter(endDate);
}
- public boolean overlaps(DateRange range) {
+ public boolean overlaps(final DateRange range) {
return (this.contains(range.startDate) || this.contains(range.endDate));
}
- public DateRange calculateUnionWith(DateRange range) {
+ public DateRange calculateUnionWith(final DateRange range) {
if (this.contains(range.startDate) && this.contains(range.endDate)) {
return this;
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoice.java b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoice.java
index 952ff60..c636ada 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoice.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoice.java
@@ -16,13 +16,12 @@
package com.ning.billing.invoice.model;
+import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import javax.annotation.Nullable;
-
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
@@ -42,13 +41,13 @@ public class DefaultInvoice extends EntityBase implements Invoice {
private final boolean migrationInvoice;
// used to create a new invoice
- public DefaultInvoice(UUID accountId, DateTime invoiceDate, DateTime targetDate, Currency currency) {
+ public DefaultInvoice(final UUID accountId, final DateTime invoiceDate, final DateTime targetDate, final Currency currency) {
this(UUID.randomUUID(), accountId, null, invoiceDate, targetDate, currency, false);
}
// used to hydrate invoice from persistence layer
- public DefaultInvoice(UUID invoiceId, UUID accountId, @Nullable Integer invoiceNumber, DateTime invoiceDate,
- DateTime targetDate, Currency currency, boolean isMigrationInvoice) {
+ public DefaultInvoice(final UUID invoiceId, final UUID accountId, @Nullable final Integer invoiceNumber, final DateTime invoiceDate,
+ final DateTime targetDate, final Currency currency, final boolean isMigrationInvoice) {
super(invoiceId);
this.accountId = accountId;
this.invoiceNumber = invoiceNumber;
@@ -74,10 +73,10 @@ public class DefaultInvoice extends EntityBase implements Invoice {
}
@Override
- public <T extends InvoiceItem> List<InvoiceItem> getInvoiceItems(Class<T> clazz) {
- List<InvoiceItem> results = new ArrayList<InvoiceItem>();
- for (InvoiceItem item : invoiceItems) {
- if ( clazz.isInstance(item) ) {
+ public <T extends InvoiceItem> List<InvoiceItem> getInvoiceItems(final Class<T> clazz) {
+ final List<InvoiceItem> results = new ArrayList<InvoiceItem>();
+ for (final InvoiceItem item : invoiceItems) {
+ if (clazz.isInstance(item)) {
results.add(item);
}
}
@@ -116,6 +115,7 @@ public class DefaultInvoice extends EntityBase implements Invoice {
/**
* null until retrieved from the database
+ *
* @return the invoice number
*/
@Override
@@ -137,18 +137,18 @@ public class DefaultInvoice extends EntityBase implements Invoice {
public Currency getCurrency() {
return currency;
}
-
+
@Override
public boolean isMigrationInvoice() {
- return migrationInvoice;
- }
+ return migrationInvoice;
+ }
- @Override
+ @Override
public DateTime getLastPaymentAttempt() {
DateTime lastPaymentAttempt = null;
for (final InvoicePayment paymentAttempt : payments) {
- DateTime paymentAttemptDate = paymentAttempt.getPaymentAttemptDate();
+ final DateTime paymentAttemptDate = paymentAttempt.getPaymentAttemptDate();
if (lastPaymentAttempt == null) {
lastPaymentAttempt = paymentAttemptDate;
}
@@ -194,7 +194,7 @@ public class DefaultInvoice extends EntityBase implements Invoice {
return false;
}
- DateTime lastPaymentAttempt = getLastPaymentAttempt();
+ final DateTime lastPaymentAttempt = getLastPaymentAttempt();
return (lastPaymentAttempt == null) || lastPaymentAttempt.plusDays(numberOfDays).isAfter(targetDate);
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
index 08e19c0..486e803 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
@@ -16,6 +16,7 @@
package com.ning.billing.invoice.model;
+import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
@@ -25,10 +26,10 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import javax.annotation.Nullable;
-
import org.joda.time.DateTime;
import org.joda.time.Months;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
@@ -45,6 +46,7 @@ import com.ning.billing.junction.api.BillingEventSet;
import com.ning.billing.util.clock.Clock;
public class DefaultInvoiceGenerator implements InvoiceGenerator {
+ private static final Logger log = LoggerFactory.getLogger(DefaultInvoiceGenerator.class);
private static final int ROUNDING_MODE = InvoicingConfiguration.getRoundingMode();
private static final int NUMBER_OF_DECIMALS = InvoicingConfiguration.getNumberOfDecimals();
@@ -52,19 +54,19 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
private final InvoiceConfig config;
@Inject
- public DefaultInvoiceGenerator(Clock clock, InvoiceConfig config) {
+ public DefaultInvoiceGenerator(final Clock clock, final InvoiceConfig config) {
this.clock = clock;
this.config = config;
}
- /*
+ /*
* adjusts target date to the maximum invoice target date, if future invoices exist
*/
@Override
public Invoice generateInvoice(final UUID accountId, @Nullable final BillingEventSet events,
- @Nullable final List<Invoice> existingInvoices,
- DateTime targetDate,
- final Currency targetCurrency) throws InvoiceApiException {
+ @Nullable final List<Invoice> existingInvoices,
+ DateTime targetDate,
+ final Currency targetCurrency) throws InvoiceApiException {
if ((events == null) || (events.size() == 0) || events.isAccountAutoInvoiceOff()) {
return null;
}
@@ -73,13 +75,13 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
//TODO MDW can use subscription Id - not bundle
//TODO MDW worry about null sub id
- List<InvoiceItem> existingItems = new ArrayList<InvoiceItem>();
+ final List<InvoiceItem> existingItems = new ArrayList<InvoiceItem>();
if (existingInvoices != null) {
- for (Invoice invoice : existingInvoices) {
- for(InvoiceItem item : invoice.getInvoiceItems()) {
- if(item.getSubscriptionId() == null || // Always include migration invoices, credits etc.
- !events.getSubscriptionIdsWithAutoInvoiceOff()
- .contains(item.getSubscriptionId())) { //don't add items with auto_invoice_off tag
+ for (final Invoice invoice : existingInvoices) {
+ for (final InvoiceItem item : invoice.getInvoiceItems()) {
+ if (item.getSubscriptionId() == null || // Always include migration invoices, credits etc.
+ !events.getSubscriptionIdsWithAutoInvoiceOff()
+ .contains(item.getSubscriptionId())) { //don't add items with auto_invoice_off tag
existingItems.add(item);
}
}
@@ -90,9 +92,9 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
targetDate = adjustTargetDate(existingInvoices, targetDate);
- Invoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, targetCurrency);
- UUID invoiceId = invoice.getId();
- List<InvoiceItem> proposedItems = generateInvoiceItems(invoiceId, accountId, events, targetDate, targetCurrency);
+ final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, targetCurrency);
+ final UUID invoiceId = invoice.getId();
+ final List<InvoiceItem> proposedItems = generateInvoiceItems(invoiceId, accountId, events, targetDate, targetCurrency);
removeCancellingInvoiceItems(existingItems);
removeDuplicatedInvoiceItems(proposedItems, existingItems);
@@ -110,18 +112,18 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
}
}
- private void generateCreditsForPastRepairedInvoices(UUID accountId, List<Invoice> existingInvoices, List<InvoiceItem> proposedItems, Currency currency) {
+ private void generateCreditsForPastRepairedInvoices(final UUID accountId, final List<Invoice> existingInvoices, final List<InvoiceItem> proposedItems, final Currency currency) {
// determine most accurate invoice balances up to this point
- Map<UUID, BigDecimal> amountOwedByInvoice = new HashMap<UUID, BigDecimal>();
+ final Map<UUID, BigDecimal> amountOwedByInvoice = new HashMap<UUID, BigDecimal>();
if (existingInvoices != null) {
- for (Invoice invoice : existingInvoices) {
+ for (final Invoice invoice : existingInvoices) {
amountOwedByInvoice.put(invoice.getId(), invoice.getBalance());
}
}
- for (InvoiceItem item : proposedItems) {
- UUID invoiceId = item.getInvoiceId();
+ for (final InvoiceItem item : proposedItems) {
+ final UUID invoiceId = item.getInvoiceId();
if (amountOwedByInvoice.containsKey(invoiceId)) {
amountOwedByInvoice.put(invoiceId, amountOwedByInvoice.get(invoiceId).add(item.getAmount()));
} else {
@@ -129,35 +131,35 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
}
}
- for (UUID invoiceId : amountOwedByInvoice.keySet()) {
- BigDecimal invoiceBalance = amountOwedByInvoice.get(invoiceId);
+ for (final UUID invoiceId : amountOwedByInvoice.keySet()) {
+ final BigDecimal invoiceBalance = amountOwedByInvoice.get(invoiceId);
if (invoiceBalance.compareTo(BigDecimal.ZERO) < 0) {
proposedItems.add(new CreditInvoiceItem(invoiceId, accountId, clock.getUTCNow(), invoiceBalance.negate(), currency));
}
}
}
- private void addReversingItems(List<InvoiceItem> existingItems, List<InvoiceItem> proposedItems) {
- for (InvoiceItem existingItem : existingItems) {
+ private void addReversingItems(final List<InvoiceItem> existingItems, final List<InvoiceItem> proposedItems) {
+ for (final InvoiceItem existingItem : existingItems) {
if (existingItem instanceof RecurringInvoiceItem) {
- RecurringInvoiceItem recurringItem = (RecurringInvoiceItem) existingItem;
+ final RecurringInvoiceItem recurringItem = (RecurringInvoiceItem) existingItem;
proposedItems.add(recurringItem.asReversingItem());
}
}
}
- private void consumeExistingCredit(UUID invoiceId, UUID accountId, List<InvoiceItem> existingItems,
- List<InvoiceItem> proposedItems, Currency targetCurrency) {
+ private void consumeExistingCredit(final UUID invoiceId, final UUID accountId, final List<InvoiceItem> existingItems,
+ final List<InvoiceItem> proposedItems, final Currency targetCurrency) {
BigDecimal totalUnusedCreditAmount = BigDecimal.ZERO;
BigDecimal totalAmountOwed = BigDecimal.ZERO;
- for (InvoiceItem item : existingItems) {
+ for (final InvoiceItem item : existingItems) {
if (item instanceof CreditInvoiceItem) {
totalUnusedCreditAmount = totalUnusedCreditAmount.add(item.getAmount());
}
}
- for (InvoiceItem item : proposedItems) {
+ for (final InvoiceItem item : proposedItems) {
if (item instanceof CreditInvoiceItem) {
totalUnusedCreditAmount = totalUnusedCreditAmount.add(item.getAmount());
} else {
@@ -181,8 +183,8 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
}
}
- private void validateTargetDate(DateTime targetDate) throws InvoiceApiException {
- int maximumNumberOfMonths = config.getNumberOfMonthsInFuture();
+ private void validateTargetDate(final DateTime targetDate) throws InvoiceApiException {
+ final int maximumNumberOfMonths = config.getNumberOfMonthsInFuture();
if (Months.monthsBetween(clock.getUTCNow(), targetDate).getMonths() > maximumNumberOfMonths) {
throw new InvoiceApiException(ErrorCode.INVOICE_TARGET_DATE_TOO_FAR_IN_THE_FUTURE, targetDate.toString());
@@ -190,11 +192,13 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
}
private DateTime adjustTargetDate(final List<Invoice> existingInvoices, final DateTime targetDate) {
- if (existingInvoices == null) {return targetDate;}
+ if (existingInvoices == null) {
+ return targetDate;
+ }
DateTime maxDate = targetDate;
- for (Invoice invoice : existingInvoices) {
+ for (final Invoice invoice : existingInvoices) {
if (invoice.getTargetDate().isAfter(maxDate)) {
maxDate = invoice.getTargetDate();
}
@@ -208,13 +212,13 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
*/
private void removeDuplicatedInvoiceItems(final List<InvoiceItem> proposedItems,
final List<InvoiceItem> existingInvoiceItems) {
- Iterator<InvoiceItem> proposedItemIterator = proposedItems.iterator();
+ final Iterator<InvoiceItem> proposedItemIterator = proposedItems.iterator();
while (proposedItemIterator.hasNext()) {
- InvoiceItem proposedItem = proposedItemIterator.next();
+ final InvoiceItem proposedItem = proposedItemIterator.next();
- Iterator<InvoiceItem> existingItemIterator = existingInvoiceItems.iterator();
+ final Iterator<InvoiceItem> existingItemIterator = existingInvoiceItems.iterator();
while (existingItemIterator.hasNext()) {
- InvoiceItem existingItem = existingItemIterator.next();
+ final InvoiceItem existingItem = existingItemIterator.next();
if (existingItem.equals(proposedItem)) {
existingItemIterator.remove();
proposedItemIterator.remove();
@@ -224,11 +228,11 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
}
private void removeCancellingInvoiceItems(final List<InvoiceItem> items) {
- List<UUID> itemsToRemove = new ArrayList<UUID>();
+ final List<UUID> itemsToRemove = new ArrayList<UUID>();
- for (InvoiceItem item1 : items) {
+ for (final InvoiceItem item1 : items) {
if (item1 instanceof RecurringInvoiceItem) {
- RecurringInvoiceItem recurringInvoiceItem = (RecurringInvoiceItem) item1;
+ final RecurringInvoiceItem recurringInvoiceItem = (RecurringInvoiceItem) item1;
if (recurringInvoiceItem.reversesItem()) {
itemsToRemove.add(recurringInvoiceItem.getId());
itemsToRemove.add(recurringInvoiceItem.getReversedItemId());
@@ -236,9 +240,9 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
}
}
- Iterator<InvoiceItem> iterator = items.iterator();
+ final Iterator<InvoiceItem> iterator = items.iterator();
while (iterator.hasNext()) {
- InvoiceItem item = iterator.next();
+ final InvoiceItem item = iterator.next();
if (itemsToRemove.contains(item.getId())) {
iterator.remove();
}
@@ -247,26 +251,26 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
private List<InvoiceItem> generateInvoiceItems(final UUID invoiceId, final UUID accountId, final BillingEventSet events,
final DateTime targetDate, final Currency currency) throws InvoiceApiException {
- List<InvoiceItem> items = new ArrayList<InvoiceItem>();
-
- if(events.size() == 0) {
+ final List<InvoiceItem> items = new ArrayList<InvoiceItem>();
+
+ if (events.size() == 0) {
return items;
}
- Iterator<BillingEvent> eventIt = events.iterator();
+ final Iterator<BillingEvent> eventIt = events.iterator();
BillingEvent nextEvent = eventIt.next();
- while(eventIt.hasNext()) {
- BillingEvent thisEvent = nextEvent;
+ while (eventIt.hasNext()) {
+ final BillingEvent thisEvent = nextEvent;
nextEvent = eventIt.next();
- if(!events.getSubscriptionIdsWithAutoInvoiceOff().
+ if (!events.getSubscriptionIdsWithAutoInvoiceOff().
contains(thisEvent.getSubscription().getId())) { // don't consider events for subscriptions that have auto_invoice_off
- BillingEvent adjustedNextEvent = (thisEvent.getSubscription().getId() == nextEvent.getSubscription().getId()) ? nextEvent : null;
+ final BillingEvent adjustedNextEvent = (thisEvent.getSubscription().getId() == nextEvent.getSubscription().getId()) ? nextEvent : null;
items.addAll(processEvents(invoiceId, accountId, thisEvent, adjustedNextEvent, targetDate, currency));
}
}
items.addAll(processEvents(invoiceId, accountId, nextEvent, null, targetDate, currency));
-
+
// The above should reproduce the semantics of the code below using iterator instead of list.
//
// for (int i = 0; i < events.size(); i++) {
@@ -282,43 +286,47 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
return items;
}
- private List<InvoiceItem> processEvents(final UUID invoiceId, final UUID accountId, final BillingEvent thisEvent, final BillingEvent nextEvent,
+ private List<InvoiceItem> processEvents(final UUID invoiceId, final UUID accountId, final BillingEvent thisEvent, @Nullable final BillingEvent nextEvent,
final DateTime targetDate, final Currency currency) throws InvoiceApiException {
- List<InvoiceItem> items = new ArrayList<InvoiceItem>();
- InvoiceItem fixedPriceInvoiceItem = generateFixedPriceItem(invoiceId, accountId, thisEvent, targetDate, currency);
+ final List<InvoiceItem> items = new ArrayList<InvoiceItem>();
+ final InvoiceItem fixedPriceInvoiceItem = generateFixedPriceItem(invoiceId, accountId, thisEvent, targetDate, currency);
if (fixedPriceInvoiceItem != null) {
items.add(fixedPriceInvoiceItem);
}
- BillingPeriod billingPeriod = thisEvent.getBillingPeriod();
+ final BillingPeriod billingPeriod = thisEvent.getBillingPeriod();
if (billingPeriod != BillingPeriod.NO_BILLING_PERIOD) {
- BillingMode billingMode = instantiateBillingMode(thisEvent.getBillingMode());
- DateTime startDate = thisEvent.getEffectiveDate();
- if (!startDate.isAfter(targetDate)) {
- DateTime endDate = (nextEvent == null) ? null : nextEvent.getEffectiveDate();
- int billCycleDay = thisEvent.getBillCycleDay();
- List<RecurringInvoiceItemData> itemData;
+ final BillingMode billingMode = instantiateBillingMode(thisEvent.getBillingMode());
+ final DateTime startDate = thisEvent.getEffectiveDate();
+ final DateTime tzAdjustedStartDate = startDate.toDateTime(thisEvent.getTimeZone());
+ final DateTime roundedStartDate = new DateTime(tzAdjustedStartDate.getYear(), tzAdjustedStartDate.getMonthOfYear(), tzAdjustedStartDate.getDayOfMonth(), 0, 0);
+ log.info(String.format("start = %s, rounded = %s, target = %s, in = %s", startDate, roundedStartDate, targetDate, (!roundedStartDate.isAfter(targetDate)) ? "in" : "out"));
+ if (!roundedStartDate.isAfter(targetDate)) {
+ final DateTime endDate = (nextEvent == null) ? null : nextEvent.getEffectiveDate();
+ final int billCycleDay = thisEvent.getBillCycleDay();
+
+ final List<RecurringInvoiceItemData> itemData;
try {
itemData = billingMode.calculateInvoiceItemData(startDate, endDate, targetDate, billCycleDay, billingPeriod);
} catch (InvalidDateSequenceException e) {
throw new InvoiceApiException(ErrorCode.INVOICE_INVALID_DATE_SEQUENCE, startDate, endDate, targetDate);
}
- for (RecurringInvoiceItemData itemDatum : itemData) {
- BigDecimal rate = thisEvent.getRecurringPrice();
+ for (final RecurringInvoiceItemData itemDatum : itemData) {
+ final BigDecimal rate = thisEvent.getRecurringPrice();
if (rate != null) {
- BigDecimal amount = itemDatum.getNumberOfCycles().multiply(rate).setScale(NUMBER_OF_DECIMALS, ROUNDING_MODE);
-
- RecurringInvoiceItem recurringItem = new RecurringInvoiceItem(invoiceId,
- accountId,
- thisEvent.getSubscription().getBundleId(),
- thisEvent.getSubscription().getId(),
- thisEvent.getPlan().getName(),
- thisEvent.getPlanPhase().getName(),
- itemDatum.getStartDate(), itemDatum.getEndDate(),
- amount, rate, currency);
+ final BigDecimal amount = itemDatum.getNumberOfCycles().multiply(rate).setScale(NUMBER_OF_DECIMALS, ROUNDING_MODE);
+
+ final RecurringInvoiceItem recurringItem = new RecurringInvoiceItem(invoiceId,
+ accountId,
+ thisEvent.getSubscription().getBundleId(),
+ thisEvent.getSubscription().getId(),
+ thisEvent.getPlan().getName(),
+ thisEvent.getPlanPhase().getName(),
+ itemDatum.getStartDate(), itemDatum.getEndDate(),
+ amount, rate, currency);
items.add(recurringItem);
}
}
@@ -328,7 +336,7 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
return items;
}
- private BillingMode instantiateBillingMode(BillingModeType billingMode) {
+ private BillingMode instantiateBillingMode(final BillingModeType billingMode) {
switch (billingMode) {
case IN_ADVANCE:
return new InAdvanceBillingMode();
@@ -338,15 +346,15 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
}
private InvoiceItem generateFixedPriceItem(final UUID invoiceId, final UUID accountId, final BillingEvent thisEvent,
- final DateTime targetDate, final Currency currency) throws InvoiceApiException {
+ final DateTime targetDate, final Currency currency) {
if (thisEvent.getEffectiveDate().isAfter(targetDate)) {
return null;
} else {
- BigDecimal fixedPrice = thisEvent.getFixedPrice();
+ final BigDecimal fixedPrice = thisEvent.getFixedPrice();
if (fixedPrice != null) {
- Duration duration = thisEvent.getPlanPhase().getDuration();
- DateTime endDate = duration.addToDateTime(thisEvent.getEffectiveDate());
+ final Duration duration = thisEvent.getPlanPhase().getDuration();
+ final DateTime endDate = duration.addToDateTime(thisEvent.getEffectiveDate());
return new FixedPriceInvoiceItem(invoiceId, accountId, thisEvent.getSubscription().getBundleId(),
thisEvent.getSubscription().getId(),
@@ -357,4 +365,4 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoicePayment.java b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoicePayment.java
index 1be9662..db80be0 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoicePayment.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoicePayment.java
@@ -16,16 +16,17 @@
package com.ning.billing.invoice.model;
+import javax.annotation.Nullable;
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.ErrorCode;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.util.entity.EntityBase;
-import org.joda.time.DateTime;
-
-import javax.annotation.Nullable;
-import java.math.BigDecimal;
-import java.util.UUID;
public class DefaultInvoicePayment extends EntityBase implements InvoicePayment {
private final UUID paymentAttemptId;
@@ -87,7 +88,7 @@ public class DefaultInvoicePayment extends EntityBase implements InvoicePayment
}
@Override
- public InvoicePayment asChargeBack(BigDecimal chargeBackAmount, DateTime chargeBackDate) throws InvoiceApiException {
+ public InvoicePayment asChargeBack(final BigDecimal chargeBackAmount, final DateTime chargeBackDate) throws InvoiceApiException {
if (chargeBackAmount.compareTo(amount) > 0) {
throw new InvoiceApiException(ErrorCode.CHARGE_BACK_AMOUNT_TOO_HIGH, chargeBackAmount, amount);
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/FixedPriceInvoiceItem.java b/invoice/src/main/java/com/ning/billing/invoice/model/FixedPriceInvoiceItem.java
index 60a39a6..9176230 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/FixedPriceInvoiceItem.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/FixedPriceInvoiceItem.java
@@ -16,24 +16,25 @@
package com.ning.billing.invoice.model;
+import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.util.UUID;
-import com.ning.billing.invoice.api.InvoiceItemType;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceItem;
+import com.ning.billing.invoice.api.InvoiceItemType;
public class FixedPriceInvoiceItem extends InvoiceItemBase {
- public FixedPriceInvoiceItem(UUID invoiceId, UUID accountId, UUID bundleId, UUID subscriptionId, String planName, String phaseName,
- DateTime startDate, DateTime endDate, BigDecimal amount, Currency currency) {
+ public FixedPriceInvoiceItem(final UUID invoiceId, final UUID accountId, @Nullable final UUID bundleId, @Nullable final UUID subscriptionId, final String planName, final String phaseName,
+ final DateTime startDate, final DateTime endDate, final BigDecimal amount, final Currency currency) {
super(invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, startDate, endDate, amount, currency, InvoiceItemType.FIXED);
}
- public FixedPriceInvoiceItem(UUID id, UUID invoiceId, UUID accountId, UUID bundleId, UUID subscriptionId, String planName, String phaseName,
- DateTime startDate, DateTime endDate, BigDecimal amount, Currency currency) {
+ public FixedPriceInvoiceItem(final UUID id, final UUID invoiceId, final UUID accountId, final UUID bundleId, final UUID subscriptionId, final String planName, final String phaseName,
+ final DateTime startDate, final DateTime endDate, final BigDecimal amount, final Currency currency) {
super(id, invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, startDate, endDate, amount, currency, InvoiceItemType.FIXED);
}
@@ -62,17 +63,17 @@ public class FixedPriceInvoiceItem extends InvoiceItemBase {
}
@Override
- public int compareTo(InvoiceItem item) {
+ public int compareTo(final InvoiceItem item) {
if (!(item instanceof FixedPriceInvoiceItem)) {
return 1;
}
- FixedPriceInvoiceItem that = (FixedPriceInvoiceItem) item;
- int compareAccounts = getAccountId().compareTo(that.getAccountId());
+ final FixedPriceInvoiceItem that = (FixedPriceInvoiceItem) item;
+ final int compareAccounts = getAccountId().compareTo(that.getAccountId());
if (compareAccounts == 0 && bundleId != null) {
- int compareBundles = getBundleId().compareTo(that.getBundleId());
+ final int compareBundles = getBundleId().compareTo(that.getBundleId());
if (compareBundles == 0 && subscriptionId != null) {
- int compareSubscriptions = getSubscriptionId().compareTo(that.getSubscriptionId());
+ final int compareSubscriptions = getSubscriptionId().compareTo(that.getSubscriptionId());
if (compareSubscriptions == 0) {
return getStartDate().compareTo(that.getStartDate());
} else {
@@ -88,7 +89,7 @@ public class FixedPriceInvoiceItem extends InvoiceItemBase {
@Override
public String toString() {
- StringBuilder sb = new StringBuilder();
+ final StringBuilder sb = new StringBuilder();
sb.append("InvoiceItem = {").append("id = ").append(id.toString()).append(", ");
sb.append("invoiceId = ").append(invoiceId.toString()).append(", ");
sb.append("accountId = ").append(accountId.toString()).append(", ");
@@ -111,22 +112,42 @@ public class FixedPriceInvoiceItem extends InvoiceItemBase {
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
- FixedPriceInvoiceItem that = (FixedPriceInvoiceItem) o;
- if (accountId.compareTo(that.accountId) != 0) return false;
- if (subscriptionId != null ? !subscriptionId.equals(that.subscriptionId) : that.subscriptionId != null)
+ final FixedPriceInvoiceItem that = (FixedPriceInvoiceItem) o;
+ if (accountId.compareTo(that.accountId) != 0) {
return false;
- if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null)
+ }
+ if (subscriptionId != null ? !subscriptionId.equals(that.subscriptionId) : that.subscriptionId != null) {
return false;
- if (amount != null ? amount.compareTo(that.amount) != 0 : that.amount != null) return false;
- if (currency != that.currency) return false;
- if (startDate != null ? startDate.compareTo(that.startDate) != 0 : that.startDate != null) return false;
- if (endDate != null ? endDate.compareTo(that.endDate) != 0 : that.endDate != null) return false;
- if (phaseName != null ? !phaseName.equals(that.phaseName) : that.phaseName != null) return false;
- if (planName != null ? !planName.equals(that.planName) : that.planName != null) return false;
+ }
+ if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
+ return false;
+ }
+ if (amount != null ? amount.compareTo(that.amount) != 0 : that.amount != null) {
+ return false;
+ }
+ if (currency != that.currency) {
+ return false;
+ }
+ if (startDate != null ? startDate.compareTo(that.startDate) != 0 : that.startDate != null) {
+ return false;
+ }
+ if (endDate != null ? endDate.compareTo(that.endDate) != 0 : that.endDate != null) {
+ return false;
+ }
+ if (phaseName != null ? !phaseName.equals(that.phaseName) : that.phaseName != null) {
+ return false;
+ }
+ if (planName != null ? !planName.equals(that.planName) : that.planName != null) {
+ return false;
+ }
return true;
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/InAdvanceBillingMode.java b/invoice/src/main/java/com/ning/billing/invoice/model/InAdvanceBillingMode.java
index 916d514..3fcff90 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/InAdvanceBillingMode.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/InAdvanceBillingMode.java
@@ -16,15 +16,16 @@
package com.ning.billing.invoice.model;
-import com.ning.billing.catalog.api.BillingPeriod;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Months;
import org.joda.time.MutableDateTime;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
+import com.ning.billing.catalog.api.BillingPeriod;
public class InAdvanceBillingMode implements BillingMode {
private static final int ROUNDING_METHOD = InvoicingConfiguration.getRoundingMode();
@@ -38,27 +39,31 @@ public class InAdvanceBillingMode implements BillingMode {
return calculateInvoiceItemData(startDate, targetDate, billingCycleDay, billingPeriod);
}
- if (endDate.isBefore(startDate)) {throw new InvalidDateSequenceException();}
- if (targetDate.isBefore(startDate)) {throw new InvalidDateSequenceException();}
+ if (endDate.isBefore(startDate)) {
+ throw new InvalidDateSequenceException();
+ }
+ if (targetDate.isBefore(startDate)) {
+ throw new InvalidDateSequenceException();
+ }
- List<RecurringInvoiceItemData> results = new ArrayList<RecurringInvoiceItemData>();
+ final List<RecurringInvoiceItemData> results = new ArrayList<RecurringInvoiceItemData>();
// beginning from the start date, find the first billing date
- DateTime firstBillingCycleDate = calculateBillingCycleDateOnOrAfter(startDate, billingCycleDay);
+ final DateTime firstBillingCycleDate = calculateBillingCycleDateOnOrAfter(startDate, billingCycleDay);
// add pro-ration item if needed
if (firstBillingCycleDate.isAfter(startDate)) {
- BigDecimal leadingProRationPeriods = calculateProRationBeforeFirstBillingPeriod(startDate, firstBillingCycleDate, billingPeriod);
+ final BigDecimal leadingProRationPeriods = calculateProRationBeforeFirstBillingPeriod(startDate, firstBillingCycleDate, billingPeriod);
if (leadingProRationPeriods != null && leadingProRationPeriods.compareTo(BigDecimal.ZERO) > 0) {
results.add(new RecurringInvoiceItemData(startDate, firstBillingCycleDate, leadingProRationPeriods));
}
}
// add one item per billing period
- DateTime effectiveEndDate = calculateEffectiveEndDate(firstBillingCycleDate, targetDate, endDate, billingPeriod);
- DateTime lastBillingCycleDate = calculateLastBillingCycleDateBefore(effectiveEndDate, firstBillingCycleDate, billingCycleDay, billingPeriod);
- int numberOfWholeBillingPeriods = calculateNumberOfWholeBillingPeriods(firstBillingCycleDate, lastBillingCycleDate, billingPeriod);
- int numberOfMonthsPerBillingPeriod = billingPeriod.getNumberOfMonths();
+ final DateTime effectiveEndDate = calculateEffectiveEndDate(firstBillingCycleDate, targetDate, endDate, billingPeriod);
+ final DateTime lastBillingCycleDate = calculateLastBillingCycleDateBefore(effectiveEndDate, firstBillingCycleDate, billingCycleDay, billingPeriod);
+ final int numberOfWholeBillingPeriods = calculateNumberOfWholeBillingPeriods(firstBillingCycleDate, lastBillingCycleDate, billingPeriod);
+ final int numberOfMonthsPerBillingPeriod = billingPeriod.getNumberOfMonths();
for (int i = 0; i < numberOfWholeBillingPeriods; i++) {
results.add(new RecurringInvoiceItemData(firstBillingCycleDate.plusMonths(i * numberOfMonthsPerBillingPeriod),
@@ -67,7 +72,7 @@ public class InAdvanceBillingMode implements BillingMode {
// check to see if a trailing pro-ration amount is needed
if (effectiveEndDate.isAfter(lastBillingCycleDate)) {
- BigDecimal trailingProRationPeriods = calculateProRationAfterLastBillingCycleDate(effectiveEndDate, lastBillingCycleDate, billingPeriod);
+ final BigDecimal trailingProRationPeriods = calculateProRationAfterLastBillingCycleDate(effectiveEndDate, lastBillingCycleDate, billingPeriod);
if (trailingProRationPeriods.compareTo(BigDecimal.ZERO) > 0) {
results.add(new RecurringInvoiceItemData(lastBillingCycleDate, effectiveEndDate, trailingProRationPeriods));
}
@@ -80,7 +85,7 @@ public class InAdvanceBillingMode implements BillingMode {
public List<RecurringInvoiceItemData> calculateInvoiceItemData(final DateTime startDate,
final DateTime targetDate, final int billingCycleDay,
final BillingPeriod billingPeriod) throws InvalidDateSequenceException {
- List<RecurringInvoiceItemData> results = new ArrayList<RecurringInvoiceItemData>();
+ final List<RecurringInvoiceItemData> results = new ArrayList<RecurringInvoiceItemData>();
if (targetDate.isBefore(startDate)) {
// since the target date is before the start date of the event, this should result in no items being generated
@@ -88,21 +93,21 @@ public class InAdvanceBillingMode implements BillingMode {
}
// beginning from the start date, find the first billing date
- DateTime firstBillingCycleDate = calculateBillingCycleDateOnOrAfter(startDate, billingCycleDay);
+ final DateTime firstBillingCycleDate = calculateBillingCycleDateOnOrAfter(startDate, billingCycleDay);
// add pro-ration item if needed
if (firstBillingCycleDate.isAfter(startDate)) {
- BigDecimal leadingProRationPeriods = calculateProRationBeforeFirstBillingPeriod(startDate, firstBillingCycleDate, billingPeriod);
+ final BigDecimal leadingProRationPeriods = calculateProRationBeforeFirstBillingPeriod(startDate, firstBillingCycleDate, billingPeriod);
if (leadingProRationPeriods != null && leadingProRationPeriods.compareTo(BigDecimal.ZERO) > 0) {
results.add(new RecurringInvoiceItemData(startDate, firstBillingCycleDate, leadingProRationPeriods));
}
}
// add one item per billing period
- DateTime effectiveEndDate = calculateEffectiveEndDate(firstBillingCycleDate, targetDate, billingPeriod);
- DateTime lastBillingCycleDate = calculateLastBillingCycleDateBefore(effectiveEndDate, firstBillingCycleDate, billingCycleDay, billingPeriod);
- int numberOfWholeBillingPeriods = calculateNumberOfWholeBillingPeriods(firstBillingCycleDate, lastBillingCycleDate, billingPeriod);
- int numberOfMonthsPerBillingPeriod = billingPeriod.getNumberOfMonths();
+ final DateTime effectiveEndDate = calculateEffectiveEndDate(firstBillingCycleDate, targetDate, billingPeriod);
+ final DateTime lastBillingCycleDate = calculateLastBillingCycleDateBefore(effectiveEndDate, firstBillingCycleDate, billingCycleDay, billingPeriod);
+ final int numberOfWholeBillingPeriods = calculateNumberOfWholeBillingPeriods(firstBillingCycleDate, lastBillingCycleDate, billingPeriod);
+ final int numberOfMonthsPerBillingPeriod = billingPeriod.getNumberOfMonths();
for (int i = 0; i < numberOfWholeBillingPeriods; i++) {
results.add(new RecurringInvoiceItemData(firstBillingCycleDate.plusMonths(i * numberOfMonthsPerBillingPeriod),
@@ -111,7 +116,7 @@ public class InAdvanceBillingMode implements BillingMode {
// check to see if a trailing pro-ration amount is needed
if (effectiveEndDate.isAfter(lastBillingCycleDate)) {
- BigDecimal trailingProRationPeriods = calculateProRationAfterLastBillingCycleDate(effectiveEndDate, lastBillingCycleDate, billingPeriod);
+ final BigDecimal trailingProRationPeriods = calculateProRationAfterLastBillingCycleDate(effectiveEndDate, lastBillingCycleDate, billingPeriod);
if (trailingProRationPeriods.compareTo(BigDecimal.ZERO) > 0) {
results.add(new RecurringInvoiceItemData(lastBillingCycleDate, effectiveEndDate, trailingProRationPeriods));
}
@@ -121,9 +126,9 @@ public class InAdvanceBillingMode implements BillingMode {
}
private DateTime calculateBillingCycleDateOnOrAfter(final DateTime date, final int billingCycleDay) {
- int lastDayOfMonth = date.dayOfMonth().getMaximumValue();
+ final int lastDayOfMonth = date.dayOfMonth().getMaximumValue();
- MutableDateTime tmp = date.toMutableDateTime();
+ final MutableDateTime tmp = date.toMutableDateTime();
if (billingCycleDay > lastDayOfMonth) {
tmp.setDayOfMonth(lastDayOfMonth);
} else {
@@ -138,33 +143,33 @@ public class InAdvanceBillingMode implements BillingMode {
return proposedDate;
}
- private BigDecimal calculateProRationBeforeFirstBillingPeriod(final DateTime startDate, DateTime nextBillingCycleDate, final BillingPeriod billingPeriod) {
- DateTime previousBillingCycleDate = nextBillingCycleDate.plusMonths(-billingPeriod.getNumberOfMonths());
+ private BigDecimal calculateProRationBeforeFirstBillingPeriod(final DateTime startDate, final DateTime nextBillingCycleDate, final BillingPeriod billingPeriod) {
+ final DateTime previousBillingCycleDate = nextBillingCycleDate.plusMonths(-billingPeriod.getNumberOfMonths());
- int daysBetween = Days.daysBetween(previousBillingCycleDate, nextBillingCycleDate).getDays();
+ final int daysBetween = Days.daysBetween(previousBillingCycleDate, nextBillingCycleDate).getDays();
if (daysBetween <= 0) {
return BigDecimal.ZERO;
}
- BigDecimal daysInPeriod = new BigDecimal(daysBetween);
- BigDecimal days = new BigDecimal(Days.daysBetween(startDate, nextBillingCycleDate).getDays());
+ final BigDecimal daysInPeriod = new BigDecimal(daysBetween);
+ final BigDecimal days = new BigDecimal(Days.daysBetween(startDate, nextBillingCycleDate).getDays());
return days.divide(daysInPeriod, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
}
private int calculateNumberOfWholeBillingPeriods(final DateTime startDate, final DateTime endDate, final BillingPeriod billingPeriod) {
- int numberOfMonths = Months.monthsBetween(startDate, endDate).getMonths();
- int numberOfMonthsInPeriod = billingPeriod.getNumberOfMonths();
+ final int numberOfMonths = Months.monthsBetween(startDate, endDate).getMonths();
+ final int numberOfMonthsInPeriod = billingPeriod.getNumberOfMonths();
return numberOfMonths / numberOfMonthsInPeriod;
}
- private DateTime calculateEffectiveEndDate(DateTime billCycleDate, DateTime targetDate, DateTime endDate, BillingPeriod billingPeriod) {
+ private DateTime calculateEffectiveEndDate(final DateTime billCycleDate, final DateTime targetDate, final DateTime endDate, final BillingPeriod billingPeriod) {
if (targetDate.isBefore(endDate)) {
if (targetDate.isBefore(billCycleDate)) {
return billCycleDate;
}
- int numberOfMonthsInPeriod = billingPeriod.getNumberOfMonths();
+ final int numberOfMonthsInPeriod = billingPeriod.getNumberOfMonths();
int numberOfPeriods = 0;
DateTime proposedDate = billCycleDate;
@@ -185,12 +190,12 @@ public class InAdvanceBillingMode implements BillingMode {
}
}
- private DateTime calculateEffectiveEndDate(DateTime billCycleDate, DateTime targetDate, BillingPeriod billingPeriod) {
+ private DateTime calculateEffectiveEndDate(final DateTime billCycleDate, final DateTime targetDate, final BillingPeriod billingPeriod) {
if (targetDate.isBefore(billCycleDate)) {
return billCycleDate;
}
- int numberOfMonthsInPeriod = billingPeriod.getNumberOfMonths();
+ final int numberOfMonthsInPeriod = billingPeriod.getNumberOfMonths();
int numberOfPeriods = 0;
DateTime proposedDate = billCycleDate;
@@ -214,7 +219,7 @@ public class InAdvanceBillingMode implements BillingMode {
proposedDate = proposedDate.plusMonths(-billingPeriod.getNumberOfMonths());
if (proposedDate.dayOfMonth().get() < billingCycleDay) {
- int lastDayOfTheMonth = proposedDate.dayOfMonth().getMaximumValue();
+ final int lastDayOfTheMonth = proposedDate.dayOfMonth().getMaximumValue();
if (lastDayOfTheMonth < billingCycleDay) {
return new MutableDateTime(proposedDate).dayOfMonth().set(lastDayOfTheMonth).toDateTime();
} else {
@@ -227,11 +232,11 @@ public class InAdvanceBillingMode implements BillingMode {
private BigDecimal calculateProRationAfterLastBillingCycleDate(final DateTime endDate, final DateTime previousBillThroughDate, final BillingPeriod billingPeriod) {
// note: assumption is that previousBillThroughDate is correctly aligned with the billing cycle day
- DateTime nextBillThroughDate = previousBillThroughDate.plusMonths(billingPeriod.getNumberOfMonths());
- BigDecimal daysInPeriod = new BigDecimal(Days.daysBetween(previousBillThroughDate, nextBillThroughDate).getDays());
+ final DateTime nextBillThroughDate = previousBillThroughDate.plusMonths(billingPeriod.getNumberOfMonths());
+ final BigDecimal daysInPeriod = new BigDecimal(Days.daysBetween(previousBillThroughDate, nextBillThroughDate).getDays());
- BigDecimal days = new BigDecimal(Days.daysBetween(previousBillThroughDate, endDate).getDays());
+ final BigDecimal days = new BigDecimal(Days.daysBetween(previousBillThroughDate, endDate).getDays());
return days.divide(daysInPeriod, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceGenerator.java b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceGenerator.java
index 0b47099..ec28df0 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceGenerator.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceGenerator.java
@@ -16,11 +16,10 @@
package com.ning.billing.invoice.model;
+import javax.annotation.Nullable;
import java.util.List;
import java.util.UUID;
-import javax.annotation.Nullable;
-
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemBase.java b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemBase.java
index 016184d..89bd1a3 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemBase.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemBase.java
@@ -16,15 +16,16 @@
package com.ning.billing.invoice.model;
+import javax.annotation.Nullable;
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceItemType;
import com.ning.billing.util.entity.EntityBase;
-import org.joda.time.DateTime;
-
-import javax.annotation.Nullable;
-import java.math.BigDecimal;
-import java.util.UUID;
public abstract class InvoiceItemBase extends EntityBase implements InvoiceItem {
protected final UUID invoiceId;
@@ -37,18 +38,18 @@ public abstract class InvoiceItemBase extends EntityBase implements InvoiceItem
protected final DateTime endDate;
protected final BigDecimal amount;
protected final Currency currency;
- protected InvoiceItemType invoiceItemType;
+ protected final InvoiceItemType invoiceItemType;
- public InvoiceItemBase(UUID invoiceId, UUID accountId, UUID bundleId, UUID subscriptionId, String planName, String phaseName,
- DateTime startDate, DateTime endDate, BigDecimal amount, Currency currency, InvoiceItemType invoiceItemType) {
+ public InvoiceItemBase(final UUID invoiceId, final UUID accountId, final UUID bundleId, final UUID subscriptionId, final String planName, final String phaseName,
+ final DateTime startDate, final DateTime endDate, final BigDecimal amount, final Currency currency, final InvoiceItemType invoiceItemType) {
this(UUID.randomUUID(), invoiceId, accountId, bundleId, subscriptionId, planName, phaseName,
- startDate, endDate, amount, currency, invoiceItemType);
+ startDate, endDate, amount, currency, invoiceItemType);
}
- public InvoiceItemBase(UUID id, UUID invoiceId, UUID accountId, @Nullable UUID bundleId,
- @Nullable UUID subscriptionId, String planName, String phaseName,
- DateTime startDate, DateTime endDate, BigDecimal amount, Currency currency,
- InvoiceItemType invoiceItemType) {
+ public InvoiceItemBase(final UUID id, final UUID invoiceId, final UUID accountId, @Nullable final UUID bundleId,
+ @Nullable final UUID subscriptionId, @Nullable final String planName, @Nullable final String phaseName,
+ final DateTime startDate, final DateTime endDate, final BigDecimal amount, final Currency currency,
+ final InvoiceItemType invoiceItemType) {
super(id);
this.invoiceId = invoiceId;
this.accountId = accountId;
@@ -72,7 +73,7 @@ public abstract class InvoiceItemBase extends EntityBase implements InvoiceItem
public UUID getBundleId() {
return bundleId;
}
-
+
public UUID getAccountId() {
return accountId;
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemList.java b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemList.java
index 357c7a8..265f518 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemList.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemList.java
@@ -19,6 +19,7 @@ package com.ning.billing.invoice.model;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
+
import com.ning.billing.invoice.api.InvoiceItem;
public class InvoiceItemList extends ArrayList<InvoiceItem> {
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/InvoicingConfiguration.java b/invoice/src/main/java/com/ning/billing/invoice/model/InvoicingConfiguration.java
index 7741f00..1651c13 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/InvoicingConfiguration.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/InvoicingConfiguration.java
@@ -19,8 +19,8 @@ package com.ning.billing.invoice.model;
import java.math.BigDecimal;
public class InvoicingConfiguration {
- private final static int roundingMethod = BigDecimal.ROUND_HALF_UP;
- private final static int numberOfDecimals = 2;
+ private static final int roundingMethod = BigDecimal.ROUND_HALF_UP;
+ private static final int numberOfDecimals = 2;
public static int getRoundingMode() {
return roundingMethod;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/MigrationInvoiceItem.java b/invoice/src/main/java/com/ning/billing/invoice/model/MigrationInvoiceItem.java
index ec0962b..32de55b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/MigrationInvoiceItem.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/MigrationInvoiceItem.java
@@ -26,8 +26,8 @@ import com.ning.billing.catalog.api.MigrationPlan;
public class MigrationInvoiceItem extends FixedPriceInvoiceItem {
- public MigrationInvoiceItem(UUID invoiceId, UUID accountId, DateTime startDate, BigDecimal amount, Currency currency) {
- super(invoiceId, accountId, null, null, MigrationPlan.MIGRATION_PLAN_NAME, MigrationPlan.MIGRATION_PLAN_PHASE_NAME,
+ public MigrationInvoiceItem(final UUID invoiceId, final UUID accountId, final DateTime startDate, final BigDecimal amount, final Currency currency) {
+ super(invoiceId, accountId, null, null, MigrationPlan.MIGRATION_PLAN_NAME, MigrationPlan.MIGRATION_PLAN_PHASE_NAME,
startDate, startDate, amount, currency);
- }
-}
\ No newline at end of file
+ }
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItem.java b/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItem.java
index 9dbbae0..cfd2659 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItem.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItem.java
@@ -16,52 +16,53 @@
package com.ning.billing.invoice.model;
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceItemType;
-import org.joda.time.DateTime;
-
-import java.math.BigDecimal;
-import java.util.UUID;
public class RecurringInvoiceItem extends InvoiceItemBase {
private final BigDecimal rate;
private final UUID reversedItemId;
- public RecurringInvoiceItem(UUID invoiceId, UUID accountId, UUID bundleId, UUID subscriptionId, String planName, String phaseName,
- DateTime startDate, DateTime endDate,
- BigDecimal amount, BigDecimal rate,
- Currency currency) {
+ public RecurringInvoiceItem(final UUID invoiceId, final UUID accountId, final UUID bundleId, final UUID subscriptionId, final String planName, final String phaseName,
+ final DateTime startDate, final DateTime endDate,
+ final BigDecimal amount, final BigDecimal rate,
+ final Currency currency) {
super(invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, startDate, endDate, amount, currency, InvoiceItemType.RECURRING);
this.rate = rate;
this.reversedItemId = null;
}
- public RecurringInvoiceItem(UUID invoiceId, UUID accountId, UUID bundleId, UUID subscriptionId, String planName, String phaseName,
- DateTime startDate, DateTime endDate,
- BigDecimal amount, BigDecimal rate,
- Currency currency, UUID reversedItemId) {
+ public RecurringInvoiceItem(final UUID invoiceId, final UUID accountId, final UUID bundleId, final UUID subscriptionId, final String planName, final String phaseName,
+ final DateTime startDate, final DateTime endDate,
+ final BigDecimal amount, final BigDecimal rate,
+ final Currency currency, final UUID reversedItemId) {
super(invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, startDate, endDate,
- amount, currency, InvoiceItemType.REVERSAL);
+ amount, currency, InvoiceItemType.REVERSAL);
this.rate = rate;
this.reversedItemId = reversedItemId;
}
- public RecurringInvoiceItem(UUID id, UUID invoiceId, UUID accountId, UUID bundleId, UUID subscriptionId,
- String planName, String phaseName,
- DateTime startDate, DateTime endDate,
- BigDecimal amount, BigDecimal rate,
- Currency currency) {
+ public RecurringInvoiceItem(final UUID id, final UUID invoiceId, final UUID accountId, final UUID bundleId, final UUID subscriptionId,
+ final String planName, final String phaseName,
+ final DateTime startDate, final DateTime endDate,
+ final BigDecimal amount, final BigDecimal rate,
+ final Currency currency) {
super(id, invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, startDate, endDate, amount, currency, InvoiceItemType.RECURRING);
this.rate = rate;
this.reversedItemId = null;
}
- public RecurringInvoiceItem(UUID id, UUID invoiceId, UUID accountId, UUID bundleId, UUID subscriptionId,
- String planName, String phaseName,
- DateTime startDate, DateTime endDate,
- BigDecimal amount, BigDecimal rate,
- Currency currency, UUID reversedItemId) {
+ public RecurringInvoiceItem(final UUID id, final UUID invoiceId, final UUID accountId, final UUID bundleId, final UUID subscriptionId,
+ final String planName, final String phaseName,
+ final DateTime startDate, final DateTime endDate,
+ final BigDecimal amount, final BigDecimal rate,
+ final Currency currency, final UUID reversedItemId) {
super(id, invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, startDate, endDate, amount, currency, InvoiceItemType.REVERSAL);
this.rate = rate;
this.reversedItemId = reversedItemId;
@@ -69,10 +70,10 @@ public class RecurringInvoiceItem extends InvoiceItemBase {
@Override
public InvoiceItem asReversingItem() {
- BigDecimal amountNegated = amount == null ? null : amount.negate();
+ final BigDecimal amountNegated = amount == null ? null : amount.negate();
return new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, startDate, endDate,
- amountNegated, rate, currency, id);
+ amountNegated, rate, currency, id);
}
@Override
@@ -93,7 +94,7 @@ public class RecurringInvoiceItem extends InvoiceItemBase {
}
@Override
- public int compareTo(InvoiceItem item) {
+ public int compareTo(final InvoiceItem item) {
if (item == null) {
return -1;
}
@@ -101,15 +102,15 @@ public class RecurringInvoiceItem extends InvoiceItemBase {
return -1;
}
- RecurringInvoiceItem that = (RecurringInvoiceItem) item;
- int compareAccounts = getAccountId().compareTo(that.getAccountId());
+ final RecurringInvoiceItem that = (RecurringInvoiceItem) item;
+ final int compareAccounts = getAccountId().compareTo(that.getAccountId());
if (compareAccounts == 0 && bundleId != null) {
- int compareBundles = getBundleId().compareTo(that.getBundleId());
+ final int compareBundles = getBundleId().compareTo(that.getBundleId());
if (compareBundles == 0 && subscriptionId != null) {
- int compareSubscriptions = getSubscriptionId().compareTo(that.getSubscriptionId());
+ final int compareSubscriptions = getSubscriptionId().compareTo(that.getSubscriptionId());
if (compareSubscriptions == 0) {
- int compareStartDates = getStartDate().compareTo(that.getStartDate());
+ final int compareStartDates = getStartDate().compareTo(that.getStartDate());
if (compareStartDates == 0) {
return getEndDate().compareTo(that.getEndDate());
} else {
@@ -127,27 +128,50 @@ public class RecurringInvoiceItem extends InvoiceItemBase {
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
- RecurringInvoiceItem that = (RecurringInvoiceItem) o;
+ final RecurringInvoiceItem that = (RecurringInvoiceItem) o;
// do not include invoice item type, since a reversing item can be equal to the original item
- if (accountId.compareTo(that.accountId) != 0) return false;
- if (amount.compareTo(that.amount) != 0) return false;
- if (currency != that.currency) return false;
- if (startDate.compareTo(that.startDate) != 0) return false;
- if (endDate.compareTo(that.endDate) != 0) return false;
- if (!phaseName.equals(that.phaseName)) return false;
- if (!planName.equals(that.planName)) return false;
- if (rate.compareTo(that.rate) != 0) return false;
- if (reversedItemId != null ? !reversedItemId.equals(that.reversedItemId) : that.reversedItemId != null)
+ if (accountId.compareTo(that.accountId) != 0) {
return false;
- if (subscriptionId != null ? !subscriptionId.equals(that.subscriptionId) : that.subscriptionId != null)
+ }
+ if (amount.compareTo(that.amount) != 0) {
+ return false;
+ }
+ if (currency != that.currency) {
return false;
- if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null)
+ }
+ if (startDate.compareTo(that.startDate) != 0) {
return false;
+ }
+ if (endDate.compareTo(that.endDate) != 0) {
+ return false;
+ }
+ if (!phaseName.equals(that.phaseName)) {
+ return false;
+ }
+ if (!planName.equals(that.planName)) {
+ return false;
+ }
+ if (rate.compareTo(that.rate) != 0) {
+ return false;
+ }
+ if (reversedItemId != null ? !reversedItemId.equals(that.reversedItemId) : that.reversedItemId != null) {
+ return false;
+ }
+ if (subscriptionId != null ? !subscriptionId.equals(that.subscriptionId) : that.subscriptionId != null) {
+ return false;
+ }
+ if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
+ return false;
+ }
return true;
}
@@ -171,7 +195,7 @@ public class RecurringInvoiceItem extends InvoiceItemBase {
@Override
public String toString() {
- StringBuilder sb = new StringBuilder();
+ final StringBuilder sb = new StringBuilder();
sb.append(phaseName).append(", ");
sb.append(startDate.toString()).append(", ");
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItemData.java b/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItemData.java
index d42c533..3d4a2d8 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItemData.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/RecurringInvoiceItemData.java
@@ -16,16 +16,16 @@
package com.ning.billing.invoice.model;
-import org.joda.time.DateTime;
-
import java.math.BigDecimal;
+import org.joda.time.DateTime;
+
public class RecurringInvoiceItemData {
private final DateTime startDate;
private final DateTime endDate;
private final BigDecimal numberOfCycles;
- public RecurringInvoiceItemData(DateTime startDate, DateTime endDate, BigDecimal numberOfCycles) {
+ public RecurringInvoiceItemData(final DateTime startDate, final DateTime endDate, final BigDecimal numberOfCycles) {
this.startDate = startDate;
this.endDate = endDate;
this.numberOfCycles = numberOfCycles;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
index 4418dd9..534ee0f 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
@@ -36,9 +36,9 @@ import com.ning.billing.util.notificationq.NotificationQueueService.NoSuchNotifi
import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueAlreadyExists;
import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueHandler;
-public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier {
+public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier {
- private final static Logger log = LoggerFactory.getLogger(DefaultNextBillingDateNotifier.class);
+ private static final Logger log = LoggerFactory.getLogger(DefaultNextBillingDateNotifier.class);
public static final String NEXT_BILLING_DATE_NOTIFIER_QUEUE = "next-billing-date-queue";
@@ -51,8 +51,8 @@ public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier
private final InvoiceListener listener;
@Inject
- public DefaultNextBillingDateNotifier(NotificationQueueService notificationQueueService,
- InvoiceConfig config, EntitlementUserApi entitlementUserApi, InvoiceListener listener){
+ public DefaultNextBillingDateNotifier(final NotificationQueueService notificationQueueService,
+ final InvoiceConfig config, final EntitlementUserApi entitlementUserApi, final InvoiceListener listener) {
this.notificationQueueService = notificationQueueService;
this.config = config;
this.entitlementUserApi = entitlementUserApi;
@@ -62,41 +62,41 @@ public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier
@Override
public void initialize() throws NotificationQueueAlreadyExists {
nextBillingQueue = notificationQueueService.createNotificationQueue(DefaultInvoiceService.INVOICE_SERVICE_NAME,
- NEXT_BILLING_DATE_NOTIFIER_QUEUE,
- new NotificationQueueHandler() {
- @Override
- public void handleReadyNotification(String notificationKey, DateTime eventDate) {
- try {
- UUID key = UUID.fromString(notificationKey);
- try {
- Subscription subscription = entitlementUserApi.getSubscriptionFromId(key);
- if (subscription == null) {
- log.warn("Next Billing Date Notification Queue handled spurious notification (key: " + key + ")" );
- } else {
- processEvent(key , eventDate);
- }
- } catch (EntitlementUserApiException e) {
- log.warn("Next Billing Date Notification Queue handled spurious notification (key: " + key + ")", e );
- }
- } catch (IllegalArgumentException e) {
- log.error("The key returned from the NextBillingNotificationQueue is not a valid UUID", e);
- return;
- }
-
- }
- },
- new NotificationConfig() {
-
- @Override
- public long getSleepTimeMs() {
- return config.getSleepTimeMs();
- }
-
- @Override
- public boolean isNotificationProcessingOff() {
- return config.isNotificationProcessingOff();
- }
- });
+ NEXT_BILLING_DATE_NOTIFIER_QUEUE,
+ new NotificationQueueHandler() {
+ @Override
+ public void handleReadyNotification(final String notificationKey, final DateTime eventDate) {
+ try {
+ final UUID key = UUID.fromString(notificationKey);
+ try {
+ final Subscription subscription = entitlementUserApi.getSubscriptionFromId(key);
+ if (subscription == null) {
+ log.warn("Next Billing Date Notification Queue handled spurious notification (key: " + key + ")");
+ } else {
+ processEvent(key, eventDate);
+ }
+ } catch (EntitlementUserApiException e) {
+ log.warn("Next Billing Date Notification Queue handled spurious notification (key: " + key + ")", e);
+ }
+ } catch (IllegalArgumentException e) {
+ log.error("The key returned from the NextBillingNotificationQueue is not a valid UUID", e);
+ }
+
+ }
+ },
+ new NotificationConfig() {
+
+ @Override
+ public long getSleepTimeMs() {
+ return config.getSleepTimeMs();
+ }
+
+ @Override
+ public boolean isNotificationProcessingOff() {
+ return config.isNotificationProcessingOff();
+ }
+ }
+ );
}
@@ -113,7 +113,7 @@ public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier
}
}
- private void processEvent(UUID subscriptionId, DateTime eventDateTime) {
+ private void processEvent(final UUID subscriptionId, final DateTime eventDateTime) {
listener.handleNextBillingDateEvent(subscriptionId, eventDateTime);
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java
index 4aad036..ffc08a3 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java
@@ -31,34 +31,34 @@ import com.ning.billing.util.notificationq.NotificationQueueService;
import com.ning.billing.util.notificationq.NotificationQueueService.NoSuchNotificationQueue;
public class DefaultNextBillingDatePoster implements NextBillingDatePoster {
-
- private final static Logger log = LoggerFactory.getLogger(DefaultNextBillingDatePoster.class);
- private final NotificationQueueService notificationQueueService;
+ private static final Logger log = LoggerFactory.getLogger(DefaultNextBillingDatePoster.class);
- @Inject
+ private final NotificationQueueService notificationQueueService;
+
+ @Inject
public DefaultNextBillingDatePoster(
- NotificationQueueService notificationQueueService) {
- super();
- this.notificationQueueService = notificationQueueService;
- }
+ final NotificationQueueService notificationQueueService) {
+ super();
+ this.notificationQueueService = notificationQueueService;
+ }
- @Override
- public void insertNextBillingNotification(final Transmogrifier transactionalDao, final UUID subscriptionId, final DateTime futureNotificationTime) {
- NotificationQueue nextBillingQueue;
- try {
- nextBillingQueue = notificationQueueService.getNotificationQueue(DefaultInvoiceService.INVOICE_SERVICE_NAME,
- DefaultNextBillingDateNotifier.NEXT_BILLING_DATE_NOTIFIER_QUEUE);
- log.info("Queuing next billing date notification. id: {}, timestamp: {}", subscriptionId.toString(), futureNotificationTime.toString());
+ @Override
+ public void insertNextBillingNotification(final Transmogrifier transactionalDao, final UUID subscriptionId, final DateTime futureNotificationTime) {
+ final NotificationQueue nextBillingQueue;
+ try {
+ nextBillingQueue = notificationQueueService.getNotificationQueue(DefaultInvoiceService.INVOICE_SERVICE_NAME,
+ DefaultNextBillingDateNotifier.NEXT_BILLING_DATE_NOTIFIER_QUEUE);
+ log.info("Queuing next billing date notification. id: {}, timestamp: {}", subscriptionId.toString(), futureNotificationTime.toString());
- nextBillingQueue.recordFutureNotificationFromTransaction(transactionalDao, futureNotificationTime, new NotificationKey(){
- @Override
- public String toString() {
- return subscriptionId.toString();
- }
- });
- } catch (NoSuchNotificationQueue e) {
- log.error("Attempting to put items on a non-existent queue (NextBillingDateNotifier).", e);
- }
+ nextBillingQueue.recordFutureNotificationFromTransaction(transactionalDao, futureNotificationTime, new NotificationKey() {
+ @Override
+ public String toString() {
+ return subscriptionId.toString();
+ }
+ });
+ } catch (NoSuchNotificationQueue e) {
+ log.error("Attempting to put items on a non-existent queue (NextBillingDateNotifier).", e);
+ }
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java b/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
index 58026b2..22926e0 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
@@ -16,6 +16,10 @@
package com.ning.billing.invoice.notification;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
@@ -30,34 +34,30 @@ import com.ning.billing.util.email.EmailApiException;
import com.ning.billing.util.email.EmailConfig;
import com.ning.billing.util.email.EmailSender;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
public class EmailInvoiceNotifier implements InvoiceNotifier {
private final AccountUserApi accountUserApi;
private final HtmlInvoiceGenerator generator;
private final EmailConfig config;
@Inject
- public EmailInvoiceNotifier(AccountUserApi accountUserApi, HtmlInvoiceGenerator generator, EmailConfig config) {
+ public EmailInvoiceNotifier(final AccountUserApi accountUserApi, final HtmlInvoiceGenerator generator, final EmailConfig config) {
this.accountUserApi = accountUserApi;
this.generator = generator;
this.config = config;
}
@Override
- public void notify(Account account, Invoice invoice) throws InvoiceApiException {
- List<String> to = new ArrayList<String>();
+ public void notify(final Account account, final Invoice invoice) throws InvoiceApiException {
+ final List<String> to = new ArrayList<String>();
to.add(account.getEmail());
- List<AccountEmail> accountEmailList = accountUserApi.getEmails(account.getId());
- List<String> cc = new ArrayList<String>();
- for (AccountEmail email : accountEmailList) {
+ final List<AccountEmail> accountEmailList = accountUserApi.getEmails(account.getId());
+ final List<String> cc = new ArrayList<String>();
+ for (final AccountEmail email : accountEmailList) {
cc.add(email.getEmail());
}
- String htmlBody = null;
+ final String htmlBody;
try {
htmlBody = generator.generateInvoice(account, invoice, "HtmlInvoiceTemplate");
} catch (IOException e) {
@@ -65,9 +65,9 @@ public class EmailInvoiceNotifier implements InvoiceNotifier {
}
// TODO: get subject
- String subject = "";
+ final String subject = "";
- EmailSender sender = new DefaultEmailSender(config);
+ final EmailSender sender = new DefaultEmailSender(config);
try {
sender.sendSecureEmail(to, cc, subject, htmlBody);
} catch (EmailApiException e) {
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/NextBillingDatePoster.java b/invoice/src/main/java/com/ning/billing/invoice/notification/NextBillingDatePoster.java
index 67598d1..279c61a 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/NextBillingDatePoster.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/NextBillingDatePoster.java
@@ -23,7 +23,7 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
public interface NextBillingDatePoster {
- void insertNextBillingNotification(Transmogrifier transactionalDao,
- UUID subscriptionId, DateTime futureNotificationTime);
+ void insertNextBillingNotification(Transmogrifier transactionalDao,
+ UUID subscriptionId, DateTime futureNotificationTime);
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/NullInvoiceNotifier.java b/invoice/src/main/java/com/ning/billing/invoice/notification/NullInvoiceNotifier.java
index 460e779..e0e44f7 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/NullInvoiceNotifier.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/NullInvoiceNotifier.java
@@ -22,7 +22,7 @@ import com.ning.billing.invoice.api.InvoiceNotifier;
public class NullInvoiceNotifier implements InvoiceNotifier {
@Override
- public void notify(Account account, Invoice invoice) {
+ public void notify(final Account account, final Invoice invoice) {
// deliberate no-op
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
index 1ca7824..098bde8 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
@@ -31,21 +31,22 @@
*/
package com.ning.billing.invoice.template.formatters;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.api.formatters.InvoiceFormatter;
import com.ning.billing.util.template.translation.TranslatorConfig;
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.UUID;
public class DefaultInvoiceFormatter implements InvoiceFormatter {
private final TranslatorConfig config;
@@ -53,7 +54,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
private final DateTimeFormatter dateFormatter;
private final Locale locale;
- public DefaultInvoiceFormatter(TranslatorConfig config, Invoice invoice, Locale locale) {
+ public DefaultInvoiceFormatter(final TranslatorConfig config, final Invoice invoice, final Locale locale) {
this.config = config;
this.invoice = invoice;
dateFormatter = DateTimeFormat.mediumDate().withLocale(locale);
@@ -67,25 +68,25 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
@Override
public List<InvoiceItem> getInvoiceItems() {
- List<InvoiceItem> formatters = new ArrayList<InvoiceItem>();
- for (InvoiceItem item : invoice.getInvoiceItems()) {
+ final List<InvoiceItem> formatters = new ArrayList<InvoiceItem>();
+ for (final InvoiceItem item : invoice.getInvoiceItems()) {
formatters.add(new DefaultInvoiceItemFormatter(config, item, dateFormatter, locale));
}
return formatters;
}
@Override
- public boolean addInvoiceItem(InvoiceItem item) {
+ public boolean addInvoiceItem(final InvoiceItem item) {
return invoice.addInvoiceItem(item);
}
@Override
- public boolean addInvoiceItems(List<InvoiceItem> items) {
+ public boolean addInvoiceItems(final List<InvoiceItem> items) {
return invoice.addInvoiceItems(items);
}
@Override
- public <T extends InvoiceItem> List<InvoiceItem> getInvoiceItems(Class<T> clazz) {
+ public <T extends InvoiceItem> List<InvoiceItem> getInvoiceItems(final Class<T> clazz) {
return invoice.getInvoiceItems(clazz);
}
@@ -95,12 +96,12 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
}
@Override
- public boolean addPayment(InvoicePayment payment) {
+ public boolean addPayment(final InvoicePayment payment) {
return invoice.addPayment(payment);
}
@Override
- public boolean addPayments(List<InvoicePayment> payments) {
+ public boolean addPayments(final List<InvoicePayment> payments) {
return invoice.addPayments(payments);
}
@@ -135,7 +136,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
}
@Override
- public boolean isDueForPayment(DateTime targetDate, int numberOfDays) {
+ public boolean isDueForPayment(final DateTime targetDate, final int numberOfDays) {
return invoice.isDueForPayment(targetDate, numberOfDays);
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatterFactory.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatterFactory.java
index 83c0619..99e62e9 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatterFactory.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatterFactory.java
@@ -16,16 +16,16 @@
package com.ning.billing.invoice.template.formatters;
+import java.util.Locale;
+
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.formatters.InvoiceFormatter;
import com.ning.billing.invoice.api.formatters.InvoiceFormatterFactory;
import com.ning.billing.util.template.translation.TranslatorConfig;
-import java.util.Locale;
-
public class DefaultInvoiceFormatterFactory implements InvoiceFormatterFactory {
@Override
- public InvoiceFormatter createInvoiceFormatter(TranslatorConfig config, Invoice invoice, Locale locale) {
+ public InvoiceFormatter createInvoiceFormatter(final TranslatorConfig config, final Invoice invoice, final Locale locale) {
return new DefaultInvoiceFormatter(config, invoice, locale);
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
index 9f49eb5..2dc8168 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
@@ -16,6 +16,13 @@
package com.ning.billing.invoice.template.formatters;
+import java.math.BigDecimal;
+import java.util.Locale;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormatter;
+
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceItemType;
@@ -23,12 +30,6 @@ import com.ning.billing.invoice.api.formatters.InvoiceItemFormatter;
import com.ning.billing.util.template.translation.DefaultCatalogTranslator;
import com.ning.billing.util.template.translation.Translator;
import com.ning.billing.util.template.translation.TranslatorConfig;
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormatter;
-
-import java.math.BigDecimal;
-import java.util.Locale;
-import java.util.UUID;
public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
private final Translator translator;
@@ -37,7 +38,7 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
private final DateTimeFormatter dateFormatter;
private final Locale locale;
- public DefaultInvoiceItemFormatter(TranslatorConfig config, InvoiceItem item, DateTimeFormatter dateFormatter, Locale locale) {
+ public DefaultInvoiceItemFormatter(final TranslatorConfig config, final InvoiceItem item, final DateTimeFormatter dateFormatter, final Locale locale) {
this.item = item;
this.dateFormatter = dateFormatter;
this.locale = locale;
@@ -121,7 +122,7 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
}
@Override
- public int compareTo(InvoiceItem invoiceItem) {
+ public int compareTo(final InvoiceItem invoiceItem) {
return item.compareTo(invoiceItem);
}
@@ -129,4 +130,4 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
public UUID getId() {
return item.getId();
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/HtmlInvoiceGenerator.java b/invoice/src/main/java/com/ning/billing/invoice/template/HtmlInvoiceGenerator.java
index 2a006d8..ddfe39a 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/HtmlInvoiceGenerator.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/HtmlInvoiceGenerator.java
@@ -16,6 +16,11 @@
package com.ning.billing.invoice.template;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
import com.ning.billing.invoice.api.Invoice;
@@ -25,35 +30,29 @@ import com.ning.billing.invoice.template.translator.DefaultInvoiceTranslator;
import com.ning.billing.util.email.templates.TemplateEngine;
import com.ning.billing.util.template.translation.TranslatorConfig;
-import java.io.IOException;
-import java.lang.String;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
public class HtmlInvoiceGenerator {
private final InvoiceFormatterFactory factory;
private final TemplateEngine templateEngine;
private final TranslatorConfig config;
@Inject
- public HtmlInvoiceGenerator(InvoiceFormatterFactory factory, TemplateEngine templateEngine, TranslatorConfig config) {
+ public HtmlInvoiceGenerator(final InvoiceFormatterFactory factory, final TemplateEngine templateEngine, final TranslatorConfig config) {
this.factory = factory;
this.templateEngine = templateEngine;
this.config = config;
}
- public String generateInvoice(Account account, Invoice invoice, String templateName) throws IOException {
- Map<String, Object> data = new HashMap<String, Object>();
- DefaultInvoiceTranslator invoiceTranslator = new DefaultInvoiceTranslator(config);
- Locale locale = new Locale(account.getLocale());
+ public String generateInvoice(final Account account, final Invoice invoice, final String templateName) throws IOException {
+ final Map<String, Object> data = new HashMap<String, Object>();
+ final DefaultInvoiceTranslator invoiceTranslator = new DefaultInvoiceTranslator(config);
+ final Locale locale = new Locale(account.getLocale());
invoiceTranslator.setLocale(locale);
data.put("text", invoiceTranslator);
data.put("account", account);
- InvoiceFormatter formattedInvoice = factory.createInvoiceFormatter(config, invoice, locale);
+ final InvoiceFormatter formattedInvoice = factory.createInvoiceFormatter(config, invoice, locale);
data.put("invoice", formattedInvoice);
return templateEngine.executeTemplate(templateName, data);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/translator/DefaultInvoiceTranslator.java b/invoice/src/main/java/com/ning/billing/invoice/template/translator/DefaultInvoiceTranslator.java
index f238ea7..9f46012 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/translator/DefaultInvoiceTranslator.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/translator/DefaultInvoiceTranslator.java
@@ -16,21 +16,21 @@
package com.ning.billing.invoice.template.translator;
+import java.util.Locale;
+
import com.google.inject.Inject;
import com.ning.billing.util.template.translation.DefaultTranslatorBase;
import com.ning.billing.util.template.translation.TranslatorConfig;
-import java.util.Locale;
-
public class DefaultInvoiceTranslator extends DefaultTranslatorBase implements InvoiceStrings {
private Locale locale;
@Inject
- public DefaultInvoiceTranslator(TranslatorConfig config) {
+ public DefaultInvoiceTranslator(final TranslatorConfig config) {
super(config);
}
- public void setLocale(Locale locale) {
+ public void setLocale(final Locale locale) {
this.locale = locale;
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/translator/InvoiceStrings.java b/invoice/src/main/java/com/ning/billing/invoice/template/translator/InvoiceStrings.java
index cc19d5f..b76322b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/translator/InvoiceStrings.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/translator/InvoiceStrings.java
@@ -18,25 +18,39 @@ package com.ning.billing.invoice.template.translator;
public interface InvoiceStrings {
String getInvoiceTitle();
+
String getInvoiceDate();
+
String getInvoiceNumber();
+
String getAccountOwnerName();
+
String getAccountOwnerEmail();
+
String getAccountOwnerPhone();
// company name and address
String getCompanyName();
+
String getCompanyAddress();
+
String getCompanyCityProvincePostalCode();
+
String getCompanyCountry();
+
String getCompanyUrl();
String getInvoiceItemBundleName();
+
String getInvoiceItemDescription();
+
String getInvoiceItemServicePeriod();
+
String getInvoiceItemAmount();
String getInvoiceAmount();
+
String getInvoiceAmountPaid();
+
String getInvoiceBalance();
}
diff --git a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
index fe942a8..8c8a3a2 100644
--- a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
+++ b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
@@ -43,6 +43,14 @@ getInvoicesBySubscription() ::= <<
FROM invoices i
LEFT JOIN recurring_invoice_items rii ON i.id = rii.invoice_id
WHERE rii.subscription_id = :subscriptionId AND migrated = 'FALSE'
+ GROUP BY i.record_id, <invoiceFields("i.")>
+
+ UNION ALL
+
+ SELECT i.record_id as invoice_number, <invoiceFields("i.")>
+ FROM invoices i
+ LEFT JOIN fixed_invoice_items fii ON i.id = fii.invoice_id
+ WHERE fii.subscription_id = :subscriptionId AND migrated = 'FALSE'
GROUP BY i.record_id, <invoiceFields("i.")>;
>>
@@ -112,4 +120,4 @@ test() ::= <<
SELECT 1
FROM invoices;
>>
-;
\ No newline at end of file
+;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java b/invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java
index fe5d886..0bc2d9f 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java
@@ -39,24 +39,24 @@ public class MockModuleNoEntitlement extends MockModule {
// ((ZombieControl)cta).addResult("setChargedThroughDateFromTransaction", BrainDeadProxyFactory.ZOMBIE_VOID);
// }
- @Override
- protected void installInvoiceModule() {
- install(new DefaultInvoiceModule(){
-
- @Override
- protected void installNotifiers() {
- bind(NextBillingDateNotifier.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(NextBillingDateNotifier.class));
- NextBillingDatePoster poster = BrainDeadProxyFactory.createBrainDeadProxyFor(NextBillingDatePoster.class);
- ((ZombieControl)poster).addResult("insertNextBillingNotification",BrainDeadProxyFactory.ZOMBIE_VOID);
- bind(NextBillingDatePoster.class).toInstance(poster);
+ @Override
+ protected void installInvoiceModule() {
+ install(new DefaultInvoiceModule() {
+
+ @Override
+ protected void installNotifiers() {
+ bind(NextBillingDateNotifier.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(NextBillingDateNotifier.class));
+ final NextBillingDatePoster poster = BrainDeadProxyFactory.createBrainDeadProxyFor(NextBillingDatePoster.class);
+ ((ZombieControl) poster).addResult("insertNextBillingNotification", BrainDeadProxyFactory.ZOMBIE_VOID);
+ bind(NextBillingDatePoster.class).toInstance(poster);
bind(InvoiceNotifier.class).to(NullInvoiceNotifier.class).asEagerSingleton();
- }
-
-
- });
+ }
+
+
+ });
install(new TemplateModule());
-
- }
+
+ }
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
index 05f7179..a1e17e1 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
@@ -72,192 +72,191 @@ import com.ning.billing.util.globallocker.GlobalLocker;
@Guice(modules = {MockModuleNoEntitlement.class})
public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
- Logger log = LoggerFactory.getLogger(TestDefaultInvoiceMigrationApi.class);
+ final Logger log = LoggerFactory.getLogger(TestDefaultInvoiceMigrationApi.class);
- @Inject
- InvoiceUserApi invoiceUserApi;
+ @Inject
+ InvoiceUserApi invoiceUserApi;
- @Inject
- InvoicePaymentApi invoicePaymentApi;
+ @Inject
+ InvoicePaymentApi invoicePaymentApi;
- @Inject
- private InvoiceGenerator generator;
- @Inject
- private InvoiceDao invoiceDao;
- @Inject
- private GlobalLocker locker;
+ @Inject
+ private InvoiceGenerator generator;
+ @Inject
+ private InvoiceDao invoiceDao;
+ @Inject
+ private GlobalLocker locker;
- @Inject
- private MysqlTestingHelper helper;
+ @Inject
+ private MysqlTestingHelper helper;
- @Inject
- private BusService busService;
+ @Inject
+ private BusService busService;
- @Inject
- private InvoiceMigrationApi migrationApi;
-
- @Inject
- private BillingApi billingApi;
+ @Inject
+ private InvoiceMigrationApi migrationApi;
- private UUID accountId ;
- private UUID subscriptionId ;
- private DateTime date_migrated;
- private DateTime date_regular;
+ @Inject
+ private BillingApi billingApi;
- private UUID migrationInvoiceId;
- private UUID regularInvoiceId;
+ private UUID accountId;
+ private UUID subscriptionId;
+ private DateTime date_migrated;
+ private DateTime date_regular;
- private static final BigDecimal MIGRATION_INVOICE_AMOUNT = new BigDecimal("100.00");
- private static final Currency MIGRATION_INVOICE_CURRENCY = Currency.USD;
+ private UUID migrationInvoiceId;
+ private UUID regularInvoiceId;
+
+ private static final BigDecimal MIGRATION_INVOICE_AMOUNT = new BigDecimal("100.00");
+ private static final Currency MIGRATION_INVOICE_CURRENCY = Currency.USD;
private final Clock clock = new ClockMock();
- @BeforeClass(groups={"slow"})
- public void setup() throws Exception
- {
- log.info("Starting set up");
- accountId = UUID.randomUUID();
- subscriptionId = UUID.randomUUID();
- date_migrated = clock.getUTCNow().minusYears(1);
- date_regular = clock.getUTCNow();
-
- final String invoiceDdl = IOUtils.toString(TestInvoiceDispatcher.class.getResourceAsStream("/com/ning/billing/invoice/ddl.sql"));
- final String utilDdl = IOUtils.toString(TestInvoiceDispatcher.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
-
- helper.startMysql();
-
- helper.initDb(invoiceDdl);
- helper.initDb(utilDdl);
-
- busService.getBus().start();
-
- ((ZombieControl)billingApi).addResult("setChargedThroughDate", BrainDeadProxyFactory.ZOMBIE_VOID);
- migrationInvoiceId = createAndCheckMigrationInvoice();
- regularInvoiceId = generateRegularInvoice();
-
- }
-
- @AfterClass(groups={"slow"})
- public void tearDown() {
- try {
- ((DefaultBusService) busService).stopBus();
- helper.stopMysql();
- } catch (Exception e) {
- log.warn("Failed to tearDown test properly ", e);
- }
- }
-
- private UUID createAndCheckMigrationInvoice(){
- UUID migrationInvoiceId = migrationApi.createMigrationInvoice(accountId, date_migrated, MIGRATION_INVOICE_AMOUNT, MIGRATION_INVOICE_CURRENCY);
- Assert.assertNotNull(migrationInvoiceId);
- //Double check it was created and values are correct
-
- Invoice invoice = invoiceDao.getById(migrationInvoiceId);
- Assert.assertNotNull(invoice);
-
- Assert.assertEquals(invoice.getAccountId(), accountId);
- Assert.assertEquals(invoice.getTargetDate().compareTo(date_migrated), 0); //temp to avoid tz test artifact
- // Assert.assertEquals(invoice.getTargetDate(),now);
- Assert.assertEquals(invoice.getNumberOfItems(), 1);
- Assert.assertEquals(invoice.getInvoiceItems().get(0).getAmount().compareTo(MIGRATION_INVOICE_AMOUNT), 0 );
- Assert.assertEquals(invoice.getBalance().compareTo(MIGRATION_INVOICE_AMOUNT),0);
- Assert.assertEquals(invoice.getCurrency(), MIGRATION_INVOICE_CURRENCY);
- Assert.assertTrue(invoice.isMigrationInvoice());
-
- return migrationInvoiceId;
- }
-
- private UUID generateRegularInvoice() throws Exception {
- AccountUserApi accountUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class);
- Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
- ((ZombieControl)accountUserApi).addResult("getAccountById", account);
- ((ZombieControl)account).addResult("getCurrency", Currency.USD);
- ((ZombieControl)account).addResult("getId", accountId);
- ((ZombieControl)account).addResult("isNotifiedForInvoices", true);
-
- Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
- ((ZombieControl)subscription).addResult("getId", subscriptionId);
- ((ZombieControl)subscription).addResult("getBundleId", new UUID(0L,0L));
- BillingEventSet events = new MockBillingEventSet();
- Plan plan = MockPlan.createBicycleNoTrialEvergreen1USD();
- PlanPhase planPhase = MockPlanPhase.create1USDMonthlyEvergreen();
- DateTime effectiveDate = new DateTime().minusDays(1);
- Currency currency = Currency.USD;
- BigDecimal fixedPrice = null;
- events.add(createMockBillingEvent(account, subscription, effectiveDate, plan, planPhase,
- fixedPrice, BigDecimal.ONE, currency, BillingPeriod.MONTHLY, 1,
- BillingModeType.IN_ADVANCE, "", 1L, SubscriptionTransitionType.CREATE));
-
- ((ZombieControl)billingApi).addResult("getBillingEventsForAccountAndUpdateAccountBCD", events);
-
- InvoiceNotifier invoiceNotifier = new NullInvoiceNotifier();
- InvoiceDispatcher dispatcher = new InvoiceDispatcher(generator, accountUserApi, billingApi,
- invoiceDao, invoiceNotifier, locker, busService.getBus(), clock);
-
- CallContext context = new DefaultCallContextFactory(clock).createCallContext("Migration test", CallOrigin.TEST, UserType.TEST);
- Invoice invoice = dispatcher.processAccount(accountId, date_regular, true, context);
- Assert.assertNotNull(invoice);
-
- List<Invoice> invoices = invoiceDao.getInvoicesByAccount(accountId);
- Assert.assertEquals(invoices.size(),0);
-
- invoice = dispatcher.processAccount(accountId, date_regular, false, context);
- Assert.assertNotNull(invoice);
-
- invoices = invoiceDao.getInvoicesByAccount(accountId);
- Assert.assertEquals(invoices.size(),1);
-
- return invoice.getId();
- }
-
- // Check migration invoice is NOT returned for all user api invoice calls
- @Test(groups={"slow"}, enabled=true)
- public void testUserApiAccess(){
- List<Invoice> byAccount = invoiceUserApi.getInvoicesByAccount(accountId);
- Assert.assertEquals(byAccount.size(),1);
- Assert.assertEquals(byAccount.get(0).getId(), regularInvoiceId);
-
- List<Invoice> byAccountAndDate = invoiceUserApi.getInvoicesByAccount(accountId, date_migrated.minusDays(1));
- Assert.assertEquals(byAccountAndDate.size(),1);
- Assert.assertEquals(byAccountAndDate.get(0).getId(), regularInvoiceId);
-
- Collection<Invoice> unpaid = invoiceUserApi.getUnpaidInvoicesByAccountId(accountId, date_regular.plusDays(1));
- Assert.assertEquals(unpaid.size(), 1);
- Assert.assertEquals(regularInvoiceId, unpaid.iterator().next().getId());
-
- }
-
-
- // Check migration invoice IS returned for payment api calls
- @Test(groups={"slow"},enabled=true)
- public void testPaymentApi(){
- List<Invoice> allByAccount = invoicePaymentApi.getAllInvoicesByAccount(accountId);
- Assert.assertEquals(allByAccount.size(),2);
- Assert.assertTrue(checkContains(allByAccount, regularInvoiceId));
- Assert.assertTrue(checkContains(allByAccount, migrationInvoiceId));
- }
-
-
- // ACCOUNT balance should reflect total of migration and non-migration invoices
- @Test(groups={"slow"},enabled=true)
- public void testBalance(){
- Invoice migrationInvoice = invoiceDao.getById(migrationInvoiceId);
- Invoice regularInvoice = invoiceDao.getById(regularInvoiceId);
- BigDecimal balanceOfAllInvoices = migrationInvoice.getBalance().add(regularInvoice.getBalance());
-
- BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId);
- System.out.println("ACCOUNT balance: " + accountBalance + " should equal the Balance Of All Invoices: " + balanceOfAllInvoices);
- Assert.assertEquals(accountBalance.compareTo(balanceOfAllInvoices), 0);
-
-
- }
-
- private boolean checkContains(List<Invoice> invoices, UUID invoiceId) {
- for(Invoice invoice : invoices) {
- if(invoice.getId().equals(invoiceId)) {
- return true;
- }
- }
- return false;
- }
+ @BeforeClass(groups = {"slow"})
+ public void setup() throws Exception {
+ log.info("Starting set up");
+ accountId = UUID.randomUUID();
+ subscriptionId = UUID.randomUUID();
+ date_migrated = clock.getUTCNow().minusYears(1);
+ date_regular = clock.getUTCNow();
+
+ final String invoiceDdl = IOUtils.toString(TestInvoiceDispatcher.class.getResourceAsStream("/com/ning/billing/invoice/ddl.sql"));
+ final String utilDdl = IOUtils.toString(TestInvoiceDispatcher.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
+
+ helper.startMysql();
+
+ helper.initDb(invoiceDdl);
+ helper.initDb(utilDdl);
+
+ busService.getBus().start();
+
+ ((ZombieControl) billingApi).addResult("setChargedThroughDate", BrainDeadProxyFactory.ZOMBIE_VOID);
+ migrationInvoiceId = createAndCheckMigrationInvoice();
+ regularInvoiceId = generateRegularInvoice();
+
+ }
+
+ @AfterClass(groups = {"slow"})
+ public void tearDown() {
+ try {
+ ((DefaultBusService) busService).stopBus();
+ helper.stopMysql();
+ } catch (Exception e) {
+ log.warn("Failed to tearDown test properly ", e);
+ }
+ }
+
+ private UUID createAndCheckMigrationInvoice() {
+ final UUID migrationInvoiceId = migrationApi.createMigrationInvoice(accountId, date_migrated, MIGRATION_INVOICE_AMOUNT, MIGRATION_INVOICE_CURRENCY);
+ Assert.assertNotNull(migrationInvoiceId);
+ //Double check it was created and values are correct
+
+ final Invoice invoice = invoiceDao.getById(migrationInvoiceId);
+ Assert.assertNotNull(invoice);
+
+ Assert.assertEquals(invoice.getAccountId(), accountId);
+ Assert.assertEquals(invoice.getTargetDate().compareTo(date_migrated), 0); //temp to avoid tz test artifact
+ // Assert.assertEquals(invoice.getTargetDate(),now);
+ Assert.assertEquals(invoice.getNumberOfItems(), 1);
+ Assert.assertEquals(invoice.getInvoiceItems().get(0).getAmount().compareTo(MIGRATION_INVOICE_AMOUNT), 0);
+ Assert.assertEquals(invoice.getBalance().compareTo(MIGRATION_INVOICE_AMOUNT), 0);
+ Assert.assertEquals(invoice.getCurrency(), MIGRATION_INVOICE_CURRENCY);
+ Assert.assertTrue(invoice.isMigrationInvoice());
+
+ return migrationInvoiceId;
+ }
+
+ private UUID generateRegularInvoice() throws Exception {
+ final AccountUserApi accountUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class);
+ final Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
+ ((ZombieControl) accountUserApi).addResult("getAccountById", account);
+ ((ZombieControl) account).addResult("getCurrency", Currency.USD);
+ ((ZombieControl) account).addResult("getId", accountId);
+ ((ZombieControl) account).addResult("isNotifiedForInvoices", true);
+
+ final Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+ ((ZombieControl) subscription).addResult("getId", subscriptionId);
+ ((ZombieControl) subscription).addResult("getBundleId", new UUID(0L, 0L));
+ final BillingEventSet events = new MockBillingEventSet();
+ final Plan plan = MockPlan.createBicycleNoTrialEvergreen1USD();
+ final PlanPhase planPhase = MockPlanPhase.create1USDMonthlyEvergreen();
+ final DateTime effectiveDate = new DateTime().minusDays(1);
+ final Currency currency = Currency.USD;
+ final BigDecimal fixedPrice = null;
+ events.add(createMockBillingEvent(account, subscription, effectiveDate, plan, planPhase,
+ fixedPrice, BigDecimal.ONE, currency, BillingPeriod.MONTHLY, 1,
+ BillingModeType.IN_ADVANCE, "", 1L, SubscriptionTransitionType.CREATE));
+
+ ((ZombieControl) billingApi).addResult("getBillingEventsForAccountAndUpdateAccountBCD", events);
+
+ final InvoiceNotifier invoiceNotifier = new NullInvoiceNotifier();
+ final InvoiceDispatcher dispatcher = new InvoiceDispatcher(generator, accountUserApi, billingApi,
+ invoiceDao, invoiceNotifier, locker, busService.getBus(), clock);
+
+ final CallContext context = new DefaultCallContextFactory(clock).createCallContext("Migration test", CallOrigin.TEST, UserType.TEST);
+ Invoice invoice = dispatcher.processAccount(accountId, date_regular, true, context);
+ Assert.assertNotNull(invoice);
+
+ List<Invoice> invoices = invoiceDao.getInvoicesByAccount(accountId);
+ Assert.assertEquals(invoices.size(), 0);
+
+ invoice = dispatcher.processAccount(accountId, date_regular, false, context);
+ Assert.assertNotNull(invoice);
+
+ invoices = invoiceDao.getInvoicesByAccount(accountId);
+ Assert.assertEquals(invoices.size(), 1);
+
+ return invoice.getId();
+ }
+
+ // Check migration invoice is NOT returned for all user api invoice calls
+ @Test(groups = {"slow"}, enabled = true)
+ public void testUserApiAccess() {
+ final List<Invoice> byAccount = invoiceUserApi.getInvoicesByAccount(accountId);
+ Assert.assertEquals(byAccount.size(), 1);
+ Assert.assertEquals(byAccount.get(0).getId(), regularInvoiceId);
+
+ final List<Invoice> byAccountAndDate = invoiceUserApi.getInvoicesByAccount(accountId, date_migrated.minusDays(1));
+ Assert.assertEquals(byAccountAndDate.size(), 1);
+ Assert.assertEquals(byAccountAndDate.get(0).getId(), regularInvoiceId);
+
+ final Collection<Invoice> unpaid = invoiceUserApi.getUnpaidInvoicesByAccountId(accountId, date_regular.plusDays(1));
+ Assert.assertEquals(unpaid.size(), 1);
+ Assert.assertEquals(regularInvoiceId, unpaid.iterator().next().getId());
+
+ }
+
+
+ // Check migration invoice IS returned for payment api calls
+ @Test(groups = {"slow"}, enabled = true)
+ public void testPaymentApi() {
+ final List<Invoice> allByAccount = invoicePaymentApi.getAllInvoicesByAccount(accountId);
+ Assert.assertEquals(allByAccount.size(), 2);
+ Assert.assertTrue(checkContains(allByAccount, regularInvoiceId));
+ Assert.assertTrue(checkContains(allByAccount, migrationInvoiceId));
+ }
+
+
+ // ACCOUNT balance should reflect total of migration and non-migration invoices
+ @Test(groups = {"slow"}, enabled = true)
+ public void testBalance() {
+ final Invoice migrationInvoice = invoiceDao.getById(migrationInvoiceId);
+ final Invoice regularInvoice = invoiceDao.getById(regularInvoiceId);
+ final BigDecimal balanceOfAllInvoices = migrationInvoice.getBalance().add(regularInvoice.getBalance());
+
+ final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId);
+ System.out.println("ACCOUNT balance: " + accountBalance + " should equal the Balance Of All Invoices: " + balanceOfAllInvoices);
+ Assert.assertEquals(accountBalance.compareTo(balanceOfAllInvoices), 0);
+
+
+ }
+
+ private boolean checkContains(final List<Invoice> invoices, final UUID invoiceId) {
+ for (final Invoice invoice : invoices) {
+ if (invoice.getId().equals(invoiceId)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
index 1bde0c6..e6349c9 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
@@ -23,24 +23,23 @@ import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.model.DefaultInvoicePayment;
import com.ning.billing.util.callcontext.CallContext;
-import org.joda.time.DateTimeZone;
-public class MockInvoicePaymentApi implements InvoicePaymentApi
-{
+public class MockInvoicePaymentApi implements InvoicePaymentApi {
private final CopyOnWriteArrayList<Invoice> invoices = new CopyOnWriteArrayList<Invoice>();
private final CopyOnWriteArrayList<InvoicePayment> invoicePayments = new CopyOnWriteArrayList<InvoicePayment>();
- public void add(Invoice invoice) {
+ public void add(final Invoice invoice) {
invoices.add(invoice);
}
@Override
- public void notifyOfPaymentAttempt(InvoicePayment invoicePayment, CallContext context) {
- for (InvoicePayment existingInvoicePayment : invoicePayments) {
+ public void notifyOfPaymentAttempt(final InvoicePayment invoicePayment, final CallContext context) {
+ for (final InvoicePayment existingInvoicePayment : invoicePayments) {
if (existingInvoicePayment.getInvoiceId().equals(invoicePayment.getInvoiceId()) && existingInvoicePayment.getPaymentAttemptId().equals(invoicePayment.getPaymentAttemptId())) {
invoicePayments.remove(existingInvoicePayment);
}
@@ -49,10 +48,10 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public List<Invoice> getAllInvoicesByAccount(UUID accountId) {
- ArrayList<Invoice> result = new ArrayList<Invoice>();
+ public List<Invoice> getAllInvoicesByAccount(final UUID accountId) {
+ final ArrayList<Invoice> result = new ArrayList<Invoice>();
- for (Invoice invoice : invoices) {
+ for (final Invoice invoice : invoices) {
if (accountId.equals(invoice.getAccountId())) {
result.add(invoice);
}
@@ -61,8 +60,8 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public Invoice getInvoice(UUID invoiceId) {
- for (Invoice invoice : invoices) {
+ public Invoice getInvoice(final UUID invoiceId) {
+ for (final Invoice invoice : invoices) {
if (invoiceId.equals(invoice.getId())) {
return invoice;
}
@@ -71,8 +70,8 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public Invoice getInvoiceForPaymentAttemptId(UUID paymentAttemptId) {
- for (InvoicePayment invoicePayment : invoicePayments) {
+ public Invoice getInvoiceForPaymentAttemptId(final UUID paymentAttemptId) {
+ for (final InvoicePayment invoicePayment : invoicePayments) {
if (invoicePayment.getPaymentAttemptId().equals(paymentAttemptId)) {
return getInvoice(invoicePayment.getInvoiceId());
}
@@ -81,8 +80,8 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public InvoicePayment getInvoicePayment(UUID paymentAttemptId) {
- for (InvoicePayment invoicePayment : invoicePayments) {
+ public InvoicePayment getInvoicePayment(final UUID paymentAttemptId) {
+ for (final InvoicePayment invoicePayment : invoicePayments) {
if (paymentAttemptId.equals(invoicePayment.getPaymentAttemptId())) {
return invoicePayment;
}
@@ -91,22 +90,22 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public void notifyOfPaymentAttempt(UUID invoiceId, BigDecimal amountOutstanding, Currency currency, UUID paymentAttemptId, DateTime paymentAttemptDate, CallContext context) {
- InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate, amountOutstanding, currency);
+ public void notifyOfPaymentAttempt(final UUID invoiceId, final BigDecimal amountOutstanding, final Currency currency, final UUID paymentAttemptId, final DateTime paymentAttemptDate, final CallContext context) {
+ final InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate, amountOutstanding, currency);
notifyOfPaymentAttempt(invoicePayment, context);
}
@Override
- public void notifyOfPaymentAttempt(UUID invoiceId, UUID paymentAttemptId, DateTime paymentAttemptDate, CallContext context) {
- InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate);
+ public void notifyOfPaymentAttempt(final UUID invoiceId, final UUID paymentAttemptId, final DateTime paymentAttemptDate, final CallContext context) {
+ final InvoicePayment invoicePayment = new DefaultInvoicePayment(paymentAttemptId, invoiceId, paymentAttemptDate);
notifyOfPaymentAttempt(invoicePayment, context);
}
@Override
- public void processChargeback(UUID invoicePaymentId, BigDecimal amount, CallContext context) throws InvoiceApiException {
+ public void processChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException {
InvoicePayment existingPayment = null;
- for (InvoicePayment payment : invoicePayments) {
- if (payment.getId() == invoicePaymentId) {
+ for (final InvoicePayment payment : invoicePayments) {
+ if (payment.getId() == invoicePaymentId) {
existingPayment = payment;
}
}
@@ -117,10 +116,10 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public void processChargeback(UUID invoicePaymentId, CallContext context) throws InvoiceApiException {
+ public void processChargeback(final UUID invoicePaymentId, final CallContext context) throws InvoiceApiException {
InvoicePayment existingPayment = null;
- for (InvoicePayment payment : invoicePayments) {
- if (payment.getId() == invoicePaymentId) {
+ for (final InvoicePayment payment : invoicePayments) {
+ if (payment.getId() == invoicePaymentId) {
existingPayment = payment;
}
}
@@ -131,9 +130,9 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public BigDecimal getRemainingAmountPaid(UUID invoicePaymentId) {
+ public BigDecimal getRemainingAmountPaid(final UUID invoicePaymentId) {
BigDecimal amount = BigDecimal.ZERO;
- for (InvoicePayment payment : invoicePayments) {
+ for (final InvoicePayment payment : invoicePayments) {
if (payment.getId().equals(invoicePaymentId)) {
amount = amount.add(payment.getAmount());
}
@@ -147,22 +146,22 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public List<InvoicePayment> getChargebacksByAccountId(UUID accountId) {
+ public List<InvoicePayment> getChargebacksByAccountId(final UUID accountId) {
throw new UnsupportedOperationException();
}
@Override
- public UUID getAccountIdFromInvoicePaymentId(UUID uuid) throws InvoiceApiException {
+ public UUID getAccountIdFromInvoicePaymentId(final UUID uuid) throws InvoiceApiException {
throw new UnsupportedOperationException();
}
@Override
- public List<InvoicePayment> getChargebacksByPaymentAttemptId(UUID paymentAttemptId) {
+ public List<InvoicePayment> getChargebacksByPaymentAttemptId(final UUID paymentAttemptId) {
throw new UnsupportedOperationException();
}
@Override
- public InvoicePayment getChargebackById(UUID chargebackId) {
+ public InvoicePayment getChargebackById(final UUID chargebackId) {
throw new UnsupportedOperationException();
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/user/TestEventJson.java b/invoice/src/test/java/com/ning/billing/invoice/api/user/TestEventJson.java
index f2d9282..404255b 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/user/TestEventJson.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/user/TestEventJson.java
@@ -18,7 +18,6 @@ package com.ning.billing.invoice.api.user;
import java.math.BigDecimal;
import java.util.UUID;
-import com.ning.billing.util.jackson.ObjectMapper;
import org.joda.time.DateTime;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -26,31 +25,32 @@ import org.testng.annotations.Test;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.EmptyInvoiceEvent;
import com.ning.billing.invoice.api.InvoiceCreationEvent;
+import com.ning.billing.util.jackson.ObjectMapper;
public class TestEventJson {
private final ObjectMapper mapper = new ObjectMapper();
- @Test(groups= {"fast"})
+ @Test(groups = {"fast"})
public void testInvoiceCreationEvent() throws Exception {
- InvoiceCreationEvent e = new DefaultInvoiceCreationEvent(UUID.randomUUID(), UUID.randomUUID(), new BigDecimal(12.0), Currency.USD, new DateTime(), UUID.randomUUID());
+ final InvoiceCreationEvent e = new DefaultInvoiceCreationEvent(UUID.randomUUID(), UUID.randomUUID(), new BigDecimal(12.0), Currency.USD, new DateTime(), UUID.randomUUID());
- String json = mapper.writeValueAsString(e);
+ final String json = mapper.writeValueAsString(e);
- Class<?> claz = Class.forName(DefaultInvoiceCreationEvent.class.getName());
- Object obj = mapper.readValue(json, claz);
+ final Class<?> claz = Class.forName(DefaultInvoiceCreationEvent.class.getName());
+ final Object obj = mapper.readValue(json, claz);
Assert.assertTrue(obj.equals(e));
}
- @Test(groups= {"fast"})
+ @Test(groups = {"fast"})
public void testEmptyInvoiceEvent() throws Exception {
- EmptyInvoiceEvent e = new DefaultEmptyInvoiceEvent(UUID.randomUUID(), new DateTime(), UUID.randomUUID());
+ final EmptyInvoiceEvent e = new DefaultEmptyInvoiceEvent(UUID.randomUUID(), new DateTime(), UUID.randomUUID());
- String json = mapper.writeValueAsString(e);
+ final String json = mapper.writeValueAsString(e);
- Class<?> claz = Class.forName(DefaultEmptyInvoiceEvent.class.getName());
- Object obj = mapper.readValue(json, claz);
+ final Class<?> claz = Class.forName(DefaultEmptyInvoiceEvent.class.getName());
+ final Object obj = mapper.readValue(json, claz);
Assert.assertTrue(obj.equals(e));
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
index 70ca921..b0718db 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
@@ -16,21 +16,8 @@
package com.ning.billing.invoice.dao;
-import static org.testng.Assert.assertTrue;
-
import java.io.IOException;
-import com.ning.billing.dbi.MysqlTestingHelper;
-import com.ning.billing.invoice.notification.MockNextBillingDatePoster;
-import com.ning.billing.invoice.notification.NextBillingDatePoster;
-import com.ning.billing.util.api.TagUserApi;
-import com.ning.billing.util.callcontext.TestCallContext;
-import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.tag.api.DefaultTagUserApi;
-import com.ning.billing.util.tag.dao.AuditedTagDao;
-import com.ning.billing.util.tag.dao.MockTagDao;
-import com.ning.billing.util.tag.dao.MockTagDefinitionDao;
-import com.ning.billing.util.tag.dao.TagDao;
import org.apache.commons.io.IOUtils;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.IDBI;
@@ -41,14 +28,31 @@ import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.invoice.model.DefaultInvoiceGenerator;
import com.ning.billing.invoice.model.InvoiceGenerator;
+import com.ning.billing.invoice.notification.MockNextBillingDatePoster;
+import com.ning.billing.invoice.notification.NextBillingDatePoster;
import com.ning.billing.invoice.tests.InvoicingTestBase;
+import com.ning.billing.util.api.TagUserApi;
+import com.ning.billing.util.bus.Bus;
+import com.ning.billing.util.bus.InMemoryBus;
import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.TestCallContext;
import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.tag.api.DefaultTagUserApi;
+import com.ning.billing.util.tag.api.user.TagEventBuilder;
+import com.ning.billing.util.tag.dao.AuditedTagDao;
+import com.ning.billing.util.tag.dao.MockTagDefinitionDao;
+import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
+import static org.testng.Assert.assertTrue;
+
public abstract class InvoiceDaoTestBase extends InvoicingTestBase {
+ protected final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+
protected IDBI dbi;
private MysqlTestingHelper mysqlTestingHelper;
protected InvoiceDao invoiceDao;
@@ -59,14 +63,23 @@ public abstract class InvoiceDaoTestBase extends InvoicingTestBase {
protected Clock clock;
protected CallContext context;
protected InvoiceGenerator generator;
+ protected Bus bus;
private final InvoiceConfig invoiceConfig = new InvoiceConfig() {
@Override
- public long getSleepTimeMs() {throw new UnsupportedOperationException();}
+ public long getSleepTimeMs() {
+ throw new UnsupportedOperationException();
+ }
+
@Override
- public boolean isNotificationProcessingOff() {throw new UnsupportedOperationException();}
+ public boolean isNotificationProcessingOff() {
+ throw new UnsupportedOperationException();
+ }
+
@Override
- public int getNumberOfMonthsInFuture() {return 36;}
+ public int getNumberOfMonthsInFuture() {
+ return 36;
+ }
};
@BeforeClass(alwaysRun = true)
@@ -81,9 +94,9 @@ public abstract class InvoiceDaoTestBase extends InvoicingTestBase {
mysqlTestingHelper.initDb(invoiceDdl);
mysqlTestingHelper.initDb(utilDdl);
- NextBillingDatePoster nextBillingDatePoster = new MockNextBillingDatePoster();
+ final NextBillingDatePoster nextBillingDatePoster = new MockNextBillingDatePoster();
final TagDefinitionDao tagDefinitionDao = new MockTagDefinitionDao();
- final TagDao tagDao = new AuditedTagDao(dbi);
+ final TagDao tagDao = new AuditedTagDao(dbi, tagEventBuilder, bus);
final TagUserApi tagUserApi = new DefaultTagUserApi(tagDefinitionDao, tagDao);
invoiceDao = new DefaultInvoiceDao(dbi, nextBillingDatePoster, tagUserApi);
invoiceDao.test();
@@ -96,6 +109,8 @@ public abstract class InvoiceDaoTestBase extends InvoicingTestBase {
clock = new ClockMock();
context = new TestCallContext("Invoice Dao Tests");
generator = new DefaultInvoiceGenerator(clock, invoiceConfig);
+ bus = new InMemoryBus();
+ bus.start();
assertTrue(true);
}
@@ -104,7 +119,7 @@ public abstract class InvoiceDaoTestBase extends InvoicingTestBase {
public void cleanupData() {
dbi.inTransaction(new TransactionCallback<Void>() {
@Override
- public Void inTransaction(Handle h, TransactionStatus status)
+ public Void inTransaction(final Handle h, final TransactionStatus status)
throws Exception {
h.execute("truncate table invoices");
h.execute("truncate table fixed_invoice_items");
@@ -119,6 +134,7 @@ public abstract class InvoiceDaoTestBase extends InvoicingTestBase {
@AfterClass(alwaysRun = true)
protected void tearDown() {
+ bus.stop();
mysqlTestingHelper.stopMysql();
assertTrue(true);
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
index 97d7532..8911661 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
@@ -16,11 +16,6 @@
package com.ning.billing.invoice.dao;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
@@ -52,30 +47,37 @@ import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.model.DefaultInvoice;
import com.ning.billing.invoice.model.DefaultInvoicePayment;
+import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.invoice.model.RecurringInvoiceItem;
import com.ning.billing.junction.api.BillingEventSet;
import com.ning.billing.mock.BrainDeadProxyFactory;
import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.tag.ControlTagType;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.dao.AuditedTagDao;
import com.ning.billing.util.tag.dao.TagDao;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
@Test(groups = {"slow", "invoicing", "invoicing-invoiceDao"})
public class InvoiceDaoTests extends InvoiceDaoTestBase {
@Test
public void testCreationAndRetrievalByAccount() {
- UUID accountId = UUID.randomUUID();
- Invoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), clock.getUTCNow(), Currency.USD);
- DateTime invoiceDate = invoice.getInvoiceDate();
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), clock.getUTCNow(), Currency.USD);
+ final DateTime invoiceDate = invoice.getInvoiceDate();
invoiceDao.create(invoice, context);
- List<Invoice> invoices = invoiceDao.getInvoicesByAccount(accountId);
+ final List<Invoice> invoices = invoiceDao.getInvoicesByAccount(accountId);
assertNotNull(invoices);
assertEquals(invoices.size(), 1);
- Invoice thisInvoice = invoices.get(0);
+ final Invoice thisInvoice = invoices.get(0);
assertEquals(invoice.getAccountId(), accountId);
assertTrue(thisInvoice.getInvoiceDate().compareTo(invoiceDate) == 0);
assertEquals(thisInvoice.getCurrency(), Currency.USD);
@@ -85,32 +87,32 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
@Test
public void testInvoicePayment() {
- UUID accountId = UUID.randomUUID();
- Invoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), clock.getUTCNow(), Currency.USD);
- UUID invoiceId = invoice.getId();
- UUID subscriptionId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
- DateTime startDate = new DateTime(2010, 1, 1, 0, 0, 0, 0);
- DateTime endDate = new DateTime(2010, 4, 1, 0, 0, 0, 0);
- InvoiceItem invoiceItem = new RecurringInvoiceItem(invoiceId, accountId, bundleId,subscriptionId, "test plan", "test phase", startDate, endDate,
- new BigDecimal("21.00"), new BigDecimal("7.00"), Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), clock.getUTCNow(), Currency.USD);
+ final UUID invoiceId = invoice.getId();
+ final UUID subscriptionId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final DateTime startDate = new DateTime(2010, 1, 1, 0, 0, 0, 0);
+ final DateTime endDate = new DateTime(2010, 4, 1, 0, 0, 0, 0);
+ final InvoiceItem invoiceItem = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, "test plan", "test phase", startDate, endDate,
+ new BigDecimal("21.00"), new BigDecimal("7.00"), Currency.USD);
invoice.addInvoiceItem(invoiceItem);
invoiceDao.create(invoice, context);
- Invoice savedInvoice = invoiceDao.getById(invoiceId);
+ final Invoice savedInvoice = invoiceDao.getById(invoiceId);
assertNotNull(savedInvoice);
assertEquals(savedInvoice.getBalance().compareTo(new BigDecimal("21.00")), 0);
assertEquals(savedInvoice.getBalance().compareTo(new BigDecimal("21.00")), 0);
assertEquals(savedInvoice.getAmountPaid(), BigDecimal.ZERO);
assertEquals(savedInvoice.getInvoiceItems().size(), 1);
- BigDecimal paymentAmount = new BigDecimal("11.00");
- UUID paymentAttemptId = UUID.randomUUID();
+ final BigDecimal paymentAmount = new BigDecimal("11.00");
+ final UUID paymentAttemptId = UUID.randomUUID();
invoiceDao.notifyOfPaymentAttempt(new DefaultInvoicePayment(paymentAttemptId, invoiceId, clock.getUTCNow().plusDays(12), paymentAmount, Currency.USD), context);
- Invoice retrievedInvoice = invoiceDao.getById(invoiceId);
+ final Invoice retrievedInvoice = invoiceDao.getById(invoiceId);
assertNotNull(retrievedInvoice);
assertEquals(retrievedInvoice.getInvoiceItems().size(), 1);
assertEquals(retrievedInvoice.getAmountCharged().compareTo(new BigDecimal("21.00")), 0);
@@ -120,19 +122,19 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
@Test
public void testRetrievalForNonExistentInvoiceId() {
- Invoice invoice = invoiceDao.getById(UUID.randomUUID());
+ final Invoice invoice = invoiceDao.getById(UUID.randomUUID());
assertNull(invoice);
}
@Test
public void testAddPayment() {
- UUID accountId = UUID.randomUUID();
- DateTime targetDate = new DateTime(2011, 10, 6, 0, 0, 0, 0);
+ final UUID accountId = UUID.randomUUID();
+ final DateTime targetDate = new DateTime(2011, 10, 6, 0, 0, 0, 0);
Invoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
- UUID paymentAttemptId = UUID.randomUUID();
- DateTime paymentAttemptDate = new DateTime(2011, 6, 24, 12, 14, 36, 0);
- BigDecimal paymentAmount = new BigDecimal("14.0");
+ final UUID paymentAttemptId = UUID.randomUUID();
+ final DateTime paymentAttemptDate = new DateTime(2011, 6, 24, 12, 14, 36, 0);
+ final BigDecimal paymentAmount = new BigDecimal("14.0");
invoiceDao.create(invoice, context);
invoiceDao.notifyOfPaymentAttempt(new DefaultInvoicePayment(paymentAttemptId, invoice.getId(), paymentAttemptDate, paymentAmount, Currency.USD), context);
@@ -145,11 +147,11 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
@Test
public void testAddPaymentAttempt() {
- UUID accountId = UUID.randomUUID();
- DateTime targetDate = new DateTime(2011, 10, 6, 0, 0, 0, 0);
+ final UUID accountId = UUID.randomUUID();
+ final DateTime targetDate = new DateTime(2011, 10, 6, 0, 0, 0, 0);
Invoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
- DateTime paymentAttemptDate = new DateTime(2011, 6, 24, 12, 14, 36, 0);
+ final DateTime paymentAttemptDate = new DateTime(2011, 6, 24, 12, 14, 36, 0);
invoiceDao.create(invoice, context);
invoiceDao.notifyOfPaymentAttempt(new DefaultInvoicePayment(UUID.randomUUID(), invoice.getId(), paymentAttemptDate), context);
@@ -159,93 +161,269 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
}
@Test
- public void testGetInvoicesBySubscription() {
- UUID accountId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
-
- UUID subscriptionId1 = UUID.randomUUID();
- BigDecimal rate1 = new BigDecimal("17.0");
- UUID subscriptionId2 = UUID.randomUUID();
- BigDecimal rate2 = new BigDecimal("42.0");
- UUID subscriptionId3 = UUID.randomUUID();
- BigDecimal rate3 = new BigDecimal("3.0");
- UUID subscriptionId4 = UUID.randomUUID();
- BigDecimal rate4 = new BigDecimal("12.0");
-
- DateTime targetDate = new DateTime(2011, 5, 23, 0, 0, 0, 0);
-
-
- // create invoice 1 (subscriptions 1-4)
- Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
+ public void testGetInvoicesBySubscriptionForRecurringItems() {
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+
+ final UUID subscriptionId1 = UUID.randomUUID();
+ final BigDecimal rate1 = new BigDecimal("17.0");
+ final UUID subscriptionId2 = UUID.randomUUID();
+ final BigDecimal rate2 = new BigDecimal("42.0");
+ final UUID subscriptionId3 = UUID.randomUUID();
+ final BigDecimal rate3 = new BigDecimal("3.0");
+ final UUID subscriptionId4 = UUID.randomUUID();
+ final BigDecimal rate4 = new BigDecimal("12.0");
+
+ final DateTime targetDate = new DateTime(2011, 5, 23, 0, 0, 0, 0);
+
+ // Create invoice 1 (subscriptions 1-4)
+ final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
invoiceDao.create(invoice1, context);
- UUID invoiceId1 = invoice1.getId();
+ final UUID invoiceId1 = invoice1.getId();
DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
DateTime endDate = startDate.plusMonths(1);
-
- RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId,subscriptionId1, "test plan", "test A", startDate, endDate,
- rate1, rate1, Currency.USD);
+ final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
+ rate1, rate1, Currency.USD);
recurringInvoiceItemDao.create(item1, context);
- RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId,subscriptionId2, "test plan", "test B", startDate, endDate,
- rate2, rate2, Currency.USD);
+ final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
+ rate2, rate2, Currency.USD);
recurringInvoiceItemDao.create(item2, context);
- RecurringInvoiceItem item3 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId,subscriptionId3, "test plan", "test C", startDate, endDate,
- rate3, rate3, Currency.USD);
+ final RecurringInvoiceItem item3 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
+ rate3, rate3, Currency.USD);
recurringInvoiceItemDao.create(item3, context);
- RecurringInvoiceItem item4 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId,subscriptionId4, "test plan", "test D", startDate, endDate,
- rate4, rate4, Currency.USD);
+ final RecurringInvoiceItem item4 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
+ rate4, rate4, Currency.USD);
recurringInvoiceItemDao.create(item4, context);
- // create invoice 2 (subscriptions 1-3)
- DefaultInvoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
+ // Create invoice 2 (subscriptions 1-3)
+ final DefaultInvoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
invoiceDao.create(invoice2, context);
- UUID invoiceId2 = invoice2.getId();
+ final UUID invoiceId2 = invoice2.getId();
startDate = endDate;
endDate = startDate.plusMonths(1);
-
- RecurringInvoiceItem item5 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId,subscriptionId1, "test plan", "test phase A", startDate, endDate,
- rate1, rate1, Currency.USD);
+ final RecurringInvoiceItem item5 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
+ rate1, rate1, Currency.USD);
recurringInvoiceItemDao.create(item5, context);
- RecurringInvoiceItem item6 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId,subscriptionId2, "test plan", "test phase B", startDate, endDate,
- rate2, rate2, Currency.USD);
+ final RecurringInvoiceItem item6 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
+ rate2, rate2, Currency.USD);
recurringInvoiceItemDao.create(item6, context);
- RecurringInvoiceItem item7 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId,subscriptionId3, "test plan", "test phase C", startDate, endDate,
- rate3, rate3, Currency.USD);
+ final RecurringInvoiceItem item7 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
+ rate3, rate3, Currency.USD);
recurringInvoiceItemDao.create(item7, context);
+ // Check that each subscription returns the correct number of invoices
+ final List<Invoice> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1);
+ assertEquals(items1.size(), 2);
+
+ final List<Invoice> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2);
+ assertEquals(items2.size(), 2);
+
+ final List<Invoice> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3);
+ assertEquals(items3.size(), 2);
+
+ final List<Invoice> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4);
+ assertEquals(items4.size(), 1);
+ }
+
+ @Test
+ public void testGetInvoicesBySubscriptionForFixedItems() {
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+
+ final UUID subscriptionId1 = UUID.randomUUID();
+ final BigDecimal rate1 = new BigDecimal("17.0");
+ final UUID subscriptionId2 = UUID.randomUUID();
+ final BigDecimal rate2 = new BigDecimal("42.0");
+ final UUID subscriptionId3 = UUID.randomUUID();
+ final BigDecimal rate3 = new BigDecimal("3.0");
+ final UUID subscriptionId4 = UUID.randomUUID();
+ final BigDecimal rate4 = new BigDecimal("12.0");
+
+ final DateTime targetDate = new DateTime(2011, 5, 23, 0, 0, 0, 0);
+
+ // Create invoice 1 (subscriptions 1-4)
+ final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
+ invoiceDao.create(invoice1, context);
+
+ final UUID invoiceId1 = invoice1.getId();
+
+ DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
+ DateTime endDate = startDate.plusMonths(1);
+
+ final FixedPriceInvoiceItem item1 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
+ rate1, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(item1, context);
+
+ final FixedPriceInvoiceItem item2 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
+ rate2, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(item2, context);
+
+ final FixedPriceInvoiceItem item3 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
+ rate3, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(item3, context);
+
+ final FixedPriceInvoiceItem item4 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
+ rate4, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(item4, context);
+
+ // create invoice 2 (subscriptions 1-3)
+ final DefaultInvoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
+ invoiceDao.create(invoice2, context);
+
+ final UUID invoiceId2 = invoice2.getId();
+
+ startDate = endDate;
+ endDate = startDate.plusMonths(1);
+
+ final FixedPriceInvoiceItem item5 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
+ rate1, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(item5, context);
+
+ final FixedPriceInvoiceItem item6 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
+ rate2, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(item6, context);
+
+ final FixedPriceInvoiceItem item7 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
+ rate3, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(item7, context);
+
// check that each subscription returns the correct number of invoices
- List<Invoice> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1);
+ final List<Invoice> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1);
assertEquals(items1.size(), 2);
- List<Invoice> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2);
+ final List<Invoice> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2);
assertEquals(items2.size(), 2);
- List<Invoice> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3);
+ final List<Invoice> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3);
assertEquals(items3.size(), 2);
- List<Invoice> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4);
+ final List<Invoice> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4);
assertEquals(items4.size(), 1);
}
@Test
+ public void testGetInvoicesBySubscriptionForRecurringAndFixedItems() {
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+
+ final UUID subscriptionId1 = UUID.randomUUID();
+ final BigDecimal rate1 = new BigDecimal("17.0");
+ final UUID subscriptionId2 = UUID.randomUUID();
+ final BigDecimal rate2 = new BigDecimal("42.0");
+ final UUID subscriptionId3 = UUID.randomUUID();
+ final BigDecimal rate3 = new BigDecimal("3.0");
+ final UUID subscriptionId4 = UUID.randomUUID();
+ final BigDecimal rate4 = new BigDecimal("12.0");
+
+ final DateTime targetDate = new DateTime(2011, 5, 23, 0, 0, 0, 0);
+
+ // Create invoice 1 (subscriptions 1-4)
+ final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
+ invoiceDao.create(invoice1, context);
+
+ final UUID invoiceId1 = invoice1.getId();
+
+ DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
+ DateTime endDate = startDate.plusMonths(1);
+
+ final RecurringInvoiceItem recurringItem1 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
+ rate1, rate1, Currency.USD);
+ recurringInvoiceItemDao.create(recurringItem1, context);
+
+ final RecurringInvoiceItem recurringItem2 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
+ rate2, rate2, Currency.USD);
+ recurringInvoiceItemDao.create(recurringItem2, context);
+
+ final RecurringInvoiceItem recurringItem3 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
+ rate3, rate3, Currency.USD);
+ recurringInvoiceItemDao.create(recurringItem3, context);
+
+ final RecurringInvoiceItem recurringItem4 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
+ rate4, rate4, Currency.USD);
+ recurringInvoiceItemDao.create(recurringItem4, context);
+
+ final FixedPriceInvoiceItem fixedItem1 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
+ rate1, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(fixedItem1, context);
+
+ final FixedPriceInvoiceItem fixedItem2 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
+ rate2, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(fixedItem2, context);
+
+ final FixedPriceInvoiceItem fixedItem3 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
+ rate3, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(fixedItem3, context);
+
+ final FixedPriceInvoiceItem fixedItem4 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
+ rate4, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(fixedItem4, context);
+
+ // create invoice 2 (subscriptions 1-3)
+ final DefaultInvoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
+ invoiceDao.create(invoice2, context);
+
+ final UUID invoiceId2 = invoice2.getId();
+
+ startDate = endDate;
+ endDate = startDate.plusMonths(1);
+
+ final RecurringInvoiceItem recurringItem5 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
+ rate1, rate1, Currency.USD);
+ recurringInvoiceItemDao.create(recurringItem5, context);
+
+ final RecurringInvoiceItem recurringItem6 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
+ rate2, rate2, Currency.USD);
+ recurringInvoiceItemDao.create(recurringItem6, context);
+
+ final RecurringInvoiceItem recurringItem7 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
+ rate3, rate3, Currency.USD);
+ recurringInvoiceItemDao.create(recurringItem7, context);
+ final FixedPriceInvoiceItem fixedItem5 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
+ rate1, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(fixedItem5, context);
+
+ final FixedPriceInvoiceItem fixedItem6 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
+ rate2, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(fixedItem6, context);
+
+ final FixedPriceInvoiceItem fixedItem7 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
+ rate3, Currency.USD);
+ fixedPriceInvoiceItemSqlDao.create(fixedItem7, context);
+
+ // check that each subscription returns the correct number of invoices
+ final List<Invoice> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1);
+ assertEquals(items1.size(), 4);
+
+ final List<Invoice> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2);
+ assertEquals(items2.size(), 4);
+
+ final List<Invoice> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3);
+ assertEquals(items3.size(), 4);
+
+ final List<Invoice> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4);
+ assertEquals(items4.size(), 2);
+ }
+
+ @Test
public void testGetInvoicesForAccountAfterDate() {
- UUID accountId = UUID.randomUUID();
- DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
- Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
+ final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
invoiceDao.create(invoice1, context);
- DateTime targetDate2 = new DateTime(2011, 12, 6, 0, 0, 0, 0);
- Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate2, Currency.USD);
+ final DateTime targetDate2 = new DateTime(2011, 12, 6, 0, 0, 0, 0);
+ final Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate2, Currency.USD);
invoiceDao.create(invoice2, context);
@@ -268,96 +446,96 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
@Test
public void testAccountBalance() {
- UUID accountId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
- DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
- Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
+ final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
invoiceDao.create(invoice1, context);
- DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
- DateTime endDate = startDate.plusMonths(1);
+ final DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
+ final DateTime endDate = startDate.plusMonths(1);
- BigDecimal rate1 = new BigDecimal("17.0");
- BigDecimal rate2 = new BigDecimal("42.0");
+ final BigDecimal rate1 = new BigDecimal("17.0");
+ final BigDecimal rate2 = new BigDecimal("42.0");
- RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId,UUID.randomUUID(), "test plan", "test phase A", startDate,
- endDate, rate1, rate1, Currency.USD);
+ final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
+ endDate, rate1, rate1, Currency.USD);
recurringInvoiceItemDao.create(item1, context);
- RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId,UUID.randomUUID(), "test plan", "test phase B", startDate,
- endDate, rate2, rate2, Currency.USD);
+ final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
+ endDate, rate2, rate2, Currency.USD);
recurringInvoiceItemDao.create(item2, context);
- BigDecimal payment1 = new BigDecimal("48.0");
- InvoicePayment payment = new DefaultInvoicePayment(UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
+ final BigDecimal payment1 = new BigDecimal("48.0");
+ final InvoicePayment payment = new DefaultInvoicePayment(UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
invoicePaymentDao.create(payment, context);
- BigDecimal balance = invoiceDao.getAccountBalance(accountId);
+ final BigDecimal balance = invoiceDao.getAccountBalance(accountId);
assertEquals(balance.compareTo(rate1.add(rate2).subtract(payment1)), 0);
}
@Test
public void testAccountBalanceWithNoPayments() {
- UUID accountId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
- DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
- Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
+ final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
invoiceDao.create(invoice1, context);
- DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
- DateTime endDate = startDate.plusMonths(1);
+ final DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
+ final DateTime endDate = startDate.plusMonths(1);
- BigDecimal rate1 = new BigDecimal("17.0");
- BigDecimal rate2 = new BigDecimal("42.0");
+ final BigDecimal rate1 = new BigDecimal("17.0");
+ final BigDecimal rate2 = new BigDecimal("42.0");
- RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate,
- rate1, rate1, Currency.USD);
+ final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate,
+ rate1, rate1, Currency.USD);
recurringInvoiceItemDao.create(item1, context);
- RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate,
- rate2, rate2, Currency.USD);
+ final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate,
+ rate2, rate2, Currency.USD);
recurringInvoiceItemDao.create(item2, context);
- BigDecimal balance = invoiceDao.getAccountBalance(accountId);
+ final BigDecimal balance = invoiceDao.getAccountBalance(accountId);
assertEquals(balance.compareTo(rate1.add(rate2)), 0);
}
@Test
public void testAccountBalanceWithNoInvoiceItems() {
- UUID accountId = UUID.randomUUID();
- DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
- Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
+ final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
invoiceDao.create(invoice1, context);
- BigDecimal payment1 = new BigDecimal("48.0");
- InvoicePayment payment = new DefaultInvoicePayment(UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
+ final BigDecimal payment1 = new BigDecimal("48.0");
+ final InvoicePayment payment = new DefaultInvoicePayment(UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
invoicePaymentDao.create(payment, context);
- BigDecimal balance = invoiceDao.getAccountBalance(accountId);
+ final BigDecimal balance = invoiceDao.getAccountBalance(accountId);
assertEquals(balance.compareTo(BigDecimal.ZERO.subtract(payment1)), 0);
}
@Test
public void testGetUnpaidInvoicesByAccountId() {
- UUID accountId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
- DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
- Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final DateTime targetDate1 = new DateTime(2011, 10, 6, 0, 0, 0, 0);
+ final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1, Currency.USD);
invoiceDao.create(invoice1, context);
- DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
- DateTime endDate = startDate.plusMonths(1);
+ final DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
+ final DateTime endDate = startDate.plusMonths(1);
- BigDecimal rate1 = new BigDecimal("17.0");
- BigDecimal rate2 = new BigDecimal("42.0");
+ final BigDecimal rate1 = new BigDecimal("17.0");
+ final BigDecimal rate2 = new BigDecimal("42.0");
- RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate,
- rate1, rate1, Currency.USD);
+ final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate,
+ rate1, rate1, Currency.USD);
recurringInvoiceItemDao.create(item1, context);
- RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate,
- rate2, rate2, Currency.USD);
+ final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate,
+ rate2, rate2, Currency.USD);
recurringInvoiceItemDao.create(item2, context);
DateTime upToDate;
@@ -371,17 +549,17 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate);
assertEquals(invoices.size(), 1);
- DateTime targetDate2 = new DateTime(2011, 7, 1, 0, 0, 0, 0);
- Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate2, Currency.USD);
+ final DateTime targetDate2 = new DateTime(2011, 7, 1, 0, 0, 0, 0);
+ final Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate2, Currency.USD);
invoiceDao.create(invoice2, context);
- DateTime startDate2 = new DateTime(2011, 6, 1, 0, 0, 0, 0);
- DateTime endDate2 = startDate2.plusMonths(3);
+ final DateTime startDate2 = new DateTime(2011, 6, 1, 0, 0, 0, 0);
+ final DateTime endDate2 = startDate2.plusMonths(3);
- BigDecimal rate3 = new BigDecimal("21.0");
+ final BigDecimal rate3 = new BigDecimal("21.0");
- RecurringInvoiceItem item3 = new RecurringInvoiceItem(invoice2.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase C", startDate2, endDate2,
- rate3, rate3, Currency.USD);
+ final RecurringInvoiceItem item3 = new RecurringInvoiceItem(invoice2.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase C", startDate2, endDate2,
+ rate3, rate3, Currency.USD);
recurringInvoiceItemDao.create(item3, context);
upToDate = new DateTime(2011, 1, 1, 0, 0, 0, 0);
@@ -400,78 +578,78 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
*/
@Test
public void testInvoiceGenerationForImmediateChanges() throws InvoiceApiException, CatalogApiException {
- UUID accountId = UUID.randomUUID();
- List<Invoice> invoiceList = new ArrayList<Invoice>();
- DateTime targetDate = new DateTime(2011, 2, 16, 0, 0, 0, 0);
- Currency currency = Currency.USD;
+ final UUID accountId = UUID.randomUUID();
+ final List<Invoice> invoiceList = new ArrayList<Invoice>();
+ final DateTime targetDate = new DateTime(2011, 2, 16, 0, 0, 0, 0);
+ final Currency currency = Currency.USD;
// generate first invoice
- DefaultPrice price1 = new DefaultPrice(TEN, Currency.USD);
- MockInternationalPrice recurringPrice = new MockInternationalPrice(price1);
- MockPlanPhase phase1 = new MockPlanPhase(recurringPrice, null, BillingPeriod.MONTHLY, PhaseType.TRIAL);
- MockPlan plan1 = new MockPlan(phase1);
+ final DefaultPrice price1 = new DefaultPrice(TEN, Currency.USD);
+ final MockInternationalPrice recurringPrice = new MockInternationalPrice(price1);
+ final MockPlanPhase phase1 = new MockPlanPhase(recurringPrice, null, BillingPeriod.MONTHLY, PhaseType.TRIAL);
+ final MockPlan plan1 = new MockPlan(phase1);
- Subscription subscription = getZombieSubscription();
+ final Subscription subscription = getZombieSubscription();
- DateTime effectiveDate1 = new DateTime(2011, 2, 1, 0, 0, 0, 0);
- BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan1, phase1, null,
- recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
- "testEvent1", 1L, SubscriptionTransitionType.CREATE);
+ final DateTime effectiveDate1 = new DateTime(2011, 2, 1, 0, 0, 0, 0);
+ final BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan1, phase1, null,
+ recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
+ "testEvent1", 1L, SubscriptionTransitionType.CREATE);
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
events.add(event1);
- Invoice invoice1 = generator.generateInvoice(accountId, events, invoiceList, targetDate, Currency.USD);
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, invoiceList, targetDate, Currency.USD);
assertEquals(invoice1.getBalance(), TEN);
invoiceList.add(invoice1);
// generate second invoice
- DefaultPrice price2 = new DefaultPrice(TWENTY, Currency.USD);
- MockInternationalPrice recurringPrice2 = new MockInternationalPrice(price2);
- MockPlanPhase phase2 = new MockPlanPhase(recurringPrice, null, BillingPeriod.MONTHLY, PhaseType.TRIAL);
- MockPlan plan2 = new MockPlan(phase2);
-
- DateTime effectiveDate2 = new DateTime(2011, 2, 15, 0, 0, 0, 0);
- BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan2, phase2, null,
- recurringPrice2.getPrice(currency), currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
- "testEvent2", 2L, SubscriptionTransitionType.CREATE);
+ final DefaultPrice price2 = new DefaultPrice(TWENTY, Currency.USD);
+ final MockInternationalPrice recurringPrice2 = new MockInternationalPrice(price2);
+ final MockPlanPhase phase2 = new MockPlanPhase(recurringPrice, null, BillingPeriod.MONTHLY, PhaseType.TRIAL);
+ final MockPlan plan2 = new MockPlan(phase2);
+
+ final DateTime effectiveDate2 = new DateTime(2011, 2, 15, 0, 0, 0, 0);
+ final BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan2, phase2, null,
+ recurringPrice2.getPrice(currency), currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
+ "testEvent2", 2L, SubscriptionTransitionType.CREATE);
events.add(event2);
// second invoice should be for one half (14/28 days) the difference between the rate plans
// this is a temporary state, since it actually contains an adjusting item that properly belong to invoice 1
- Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, targetDate, Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, targetDate, Currency.USD);
assertEquals(invoice2.getBalance(), FIVE);
invoiceList.add(invoice2);
invoiceDao.create(invoice1, context);
invoiceDao.create(invoice2, context);
- Invoice savedInvoice1 = invoiceDao.getById(invoice1.getId());
+ final Invoice savedInvoice1 = invoiceDao.getById(invoice1.getId());
assertEquals(savedInvoice1.getBalance(), ZERO);
- Invoice savedInvoice2 = invoiceDao.getById(invoice2.getId());
+ final Invoice savedInvoice2 = invoiceDao.getById(invoice2.getId());
assertEquals(savedInvoice2.getBalance(), FIFTEEN);
}
@Test
public void testInvoiceForFreeTrial() throws InvoiceApiException, CatalogApiException {
- Currency currency = Currency.USD;
- DefaultPrice price = new DefaultPrice(BigDecimal.ZERO, Currency.USD);
- MockInternationalPrice recurringPrice = new MockInternationalPrice(price);
- MockPlanPhase phase = new MockPlanPhase(recurringPrice, null);
- MockPlan plan = new MockPlan(phase);
-
- Subscription subscription = getZombieSubscription();
- DateTime effectiveDate = buildDateTime(2011, 1, 1);
-
- BillingEvent event = createMockBillingEvent(null, subscription, effectiveDate, plan, phase, null,
- recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 15, BillingModeType.IN_ADVANCE,
- "testEvent", 1L, SubscriptionTransitionType.CREATE);
- BillingEventSet events = new MockBillingEventSet();
+ final Currency currency = Currency.USD;
+ final DefaultPrice price = new DefaultPrice(BigDecimal.ZERO, Currency.USD);
+ final MockInternationalPrice recurringPrice = new MockInternationalPrice(price);
+ final MockPlanPhase phase = new MockPlanPhase(recurringPrice, null);
+ final MockPlan plan = new MockPlan(phase);
+
+ final Subscription subscription = getZombieSubscription();
+ final DateTime effectiveDate = buildDateTime(2011, 1, 1);
+
+ final BillingEvent event = createMockBillingEvent(null, subscription, effectiveDate, plan, phase, null,
+ recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 15, BillingModeType.IN_ADVANCE,
+ "testEvent", 1L, SubscriptionTransitionType.CREATE);
+ final BillingEventSet events = new MockBillingEventSet();
events.add(event);
- DateTime targetDate = buildDateTime(2011, 1, 15);
- Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate, Currency.USD);
+ final DateTime targetDate = buildDateTime(2011, 1, 15);
+ final Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate, Currency.USD);
// expect one pro-ration item and one full-period item
assertEquals(invoice.getNumberOfItems(), 2);
@@ -479,7 +657,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
}
private Subscription getZombieSubscription() {
- Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+ final Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
((ZombieControl) subscription).addResult("getId", UUID.randomUUID());
((ZombieControl) subscription).addResult("getBundleId", UUID.randomUUID());
return subscription;
@@ -487,52 +665,52 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
@Test
public void testInvoiceForFreeTrialWithRecurringDiscount() throws InvoiceApiException, CatalogApiException {
- Currency currency = Currency.USD;
+ final Currency currency = Currency.USD;
- DefaultPrice zeroPrice = new DefaultPrice(BigDecimal.ZERO, Currency.USD);
- MockInternationalPrice fixedPrice = new MockInternationalPrice(zeroPrice);
- MockPlanPhase phase1 = new MockPlanPhase(null, fixedPrice);
+ final DefaultPrice zeroPrice = new DefaultPrice(BigDecimal.ZERO, Currency.USD);
+ final MockInternationalPrice fixedPrice = new MockInternationalPrice(zeroPrice);
+ final MockPlanPhase phase1 = new MockPlanPhase(null, fixedPrice);
- BigDecimal cheapAmount = new BigDecimal("24.95");
- DefaultPrice cheapPrice = new DefaultPrice(cheapAmount, Currency.USD);
- MockInternationalPrice recurringPrice = new MockInternationalPrice(cheapPrice);
- MockPlanPhase phase2 = new MockPlanPhase(recurringPrice, null);
+ final BigDecimal cheapAmount = new BigDecimal("24.95");
+ final DefaultPrice cheapPrice = new DefaultPrice(cheapAmount, Currency.USD);
+ final MockInternationalPrice recurringPrice = new MockInternationalPrice(cheapPrice);
+ final MockPlanPhase phase2 = new MockPlanPhase(recurringPrice, null);
- MockPlan plan = new MockPlan();
+ final MockPlan plan = new MockPlan();
- Subscription subscription = getZombieSubscription();
- DateTime effectiveDate1 = buildDateTime(2011, 1, 1);
+ final Subscription subscription = getZombieSubscription();
+ final DateTime effectiveDate1 = buildDateTime(2011, 1, 1);
- BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan, phase1, fixedPrice.getPrice(currency),
- null, currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
- "testEvent1", 1L, SubscriptionTransitionType.CREATE);
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan, phase1, fixedPrice.getPrice(currency),
+ null, currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
+ "testEvent1", 1L, SubscriptionTransitionType.CREATE);
+ final BillingEventSet events = new MockBillingEventSet();
events.add(event1);
- UUID accountId = UUID.randomUUID();
- Invoice invoice1 = generator.generateInvoice(accountId, events, null, effectiveDate1, Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, null, effectiveDate1, Currency.USD);
assertNotNull(invoice1);
assertEquals(invoice1.getNumberOfItems(), 1);
assertEquals(invoice1.getBalance().compareTo(ZERO), 0);
- List<Invoice> invoiceList = new ArrayList<Invoice>();
+ final List<Invoice> invoiceList = new ArrayList<Invoice>();
invoiceList.add(invoice1);
- DateTime effectiveDate2 = effectiveDate1.plusDays(30);
- BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan, phase2, null,
- recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
- "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
+ final DateTime effectiveDate2 = effectiveDate1.plusDays(30);
+ final BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan, phase2, null,
+ recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+ "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
events.add(event2);
- Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, effectiveDate2, Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, effectiveDate2, Currency.USD);
assertNotNull(invoice2);
assertEquals(invoice2.getNumberOfItems(), 1);
assertEquals(invoice2.getBalance().compareTo(cheapAmount), 0);
invoiceList.add(invoice2);
- DateTime effectiveDate3 = effectiveDate2.plusMonths(1);
- Invoice invoice3 = generator.generateInvoice(accountId, events, invoiceList, effectiveDate3, Currency.USD);
+ final DateTime effectiveDate3 = effectiveDate2.plusMonths(1);
+ final Invoice invoice3 = generator.generateInvoice(accountId, events, invoiceList, effectiveDate3, Currency.USD);
assertNotNull(invoice3);
assertEquals(invoice3.getNumberOfItems(), 1);
assertEquals(invoice3.getBalance().compareTo(cheapAmount), 0);
@@ -540,48 +718,48 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
@Test
public void testInvoiceForEmptyEventSet() throws InvoiceApiException {
- BillingEventSet events = new MockBillingEventSet();
- Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, new DateTime(), Currency.USD);
+ final BillingEventSet events = new MockBillingEventSet();
+ final Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, new DateTime(), Currency.USD);
assertNull(invoice);
}
@Test
public void testMixedModeInvoicePersistence() throws InvoiceApiException, CatalogApiException {
- Currency currency = Currency.USD;
- DefaultPrice zeroPrice = new DefaultPrice(BigDecimal.ZERO, Currency.USD);
- MockInternationalPrice fixedPrice = new MockInternationalPrice(zeroPrice);
- MockPlanPhase phase1 = new MockPlanPhase(null, fixedPrice);
-
- BigDecimal cheapAmount = new BigDecimal("24.95");
- DefaultPrice cheapPrice = new DefaultPrice(cheapAmount, Currency.USD);
- MockInternationalPrice recurringPrice = new MockInternationalPrice(cheapPrice);
- MockPlanPhase phase2 = new MockPlanPhase(recurringPrice, null);
-
- MockPlan plan = new MockPlan();
-
- Subscription subscription = getZombieSubscription();
- DateTime effectiveDate1 = buildDateTime(2011, 1, 1);
-
- BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan, phase1,
- fixedPrice.getPrice(currency), null, currency,
- BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
- "testEvent1", 1L, SubscriptionTransitionType.CREATE);
- BillingEventSet events = new MockBillingEventSet();
+ final Currency currency = Currency.USD;
+ final DefaultPrice zeroPrice = new DefaultPrice(BigDecimal.ZERO, Currency.USD);
+ final MockInternationalPrice fixedPrice = new MockInternationalPrice(zeroPrice);
+ final MockPlanPhase phase1 = new MockPlanPhase(null, fixedPrice);
+
+ final BigDecimal cheapAmount = new BigDecimal("24.95");
+ final DefaultPrice cheapPrice = new DefaultPrice(cheapAmount, Currency.USD);
+ final MockInternationalPrice recurringPrice = new MockInternationalPrice(cheapPrice);
+ final MockPlanPhase phase2 = new MockPlanPhase(recurringPrice, null);
+
+ final MockPlan plan = new MockPlan();
+
+ final Subscription subscription = getZombieSubscription();
+ final DateTime effectiveDate1 = buildDateTime(2011, 1, 1);
+
+ final BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan, phase1,
+ fixedPrice.getPrice(currency), null, currency,
+ BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
+ "testEvent1", 1L, SubscriptionTransitionType.CREATE);
+ final BillingEventSet events = new MockBillingEventSet();
events.add(event1);
- DateTime effectiveDate2 = effectiveDate1.plusDays(30);
- BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan, phase2, null,
- recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
- "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
+ final DateTime effectiveDate2 = effectiveDate1.plusDays(30);
+ final BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan, phase2, null,
+ recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+ "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
events.add(event2);
- Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, effectiveDate2, Currency.USD);
+ final Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, effectiveDate2, Currency.USD);
assertNotNull(invoice);
assertEquals(invoice.getNumberOfItems(), 2);
assertEquals(invoice.getBalance().compareTo(cheapAmount), 0);
invoiceDao.create(invoice, context);
- Invoice savedInvoice = invoiceDao.getById(invoice.getId());
+ final Invoice savedInvoice = invoiceDao.getById(invoice.getId());
assertNotNull(savedInvoice);
assertEquals(savedInvoice.getNumberOfItems(), 2);
@@ -590,28 +768,28 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
@Test
public void testInvoiceNumber() throws InvoiceApiException {
- Currency currency = Currency.USD;
- DateTime targetDate1 = DateTime.now().plusMonths(1);
- DateTime targetDate2 = DateTime.now().plusMonths(2);
+ final Currency currency = Currency.USD;
+ final DateTime targetDate1 = DateTime.now().plusMonths(1);
+ final DateTime targetDate2 = DateTime.now().plusMonths(2);
- Subscription subscription = getZombieSubscription();
+ final Subscription subscription = getZombieSubscription();
- Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
+ final Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
((ZombieControl) plan).addResult("getName", "plan");
- PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
+ final PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
((ZombieControl) phase1).addResult("getName", "plan-phase1");
- PlanPhase phase2 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
+ final PlanPhase phase2 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
((ZombieControl) phase2).addResult("getName", "plan-phase2");
- BillingEventSet events = new MockBillingEventSet();
- List<Invoice> invoices = new ArrayList<Invoice>();
+ final BillingEventSet events = new MockBillingEventSet();
+ final List<Invoice> invoices = new ArrayList<Invoice>();
- BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
- TEN, currency,
- BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
- "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
+ final BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
+ TEN, currency,
+ BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+ "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
events.add(event1);
Invoice invoice1 = generator.generateInvoice(UUID.randomUUID(), events, invoices, targetDate1, Currency.USD);
@@ -620,10 +798,10 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
invoice1 = invoiceDao.getById(invoice1.getId());
assertNotNull(invoice1.getInvoiceNumber());
- BillingEvent event2 = createMockBillingEvent(null, subscription, targetDate1, plan, phase2, null,
- TWENTY, currency,
- BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
- "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
+ final BillingEvent event2 = createMockBillingEvent(null, subscription, targetDate1, plan, phase2, null,
+ TWENTY, currency,
+ BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+ "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
events.add(event2);
Invoice invoice2 = generator.generateInvoice(UUID.randomUUID(), events, invoices, targetDate2, Currency.USD);
invoiceDao.create(invoice2, context);
@@ -632,62 +810,62 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
}
@Test
- public void testAddingWrittenOffTag() throws InvoiceApiException {
- Subscription subscription = getZombieSubscription();
+ public void testAddingWrittenOffTag() throws InvoiceApiException, TagApiException {
+ final Subscription subscription = getZombieSubscription();
- Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
+ final Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
((ZombieControl) plan).addResult("getName", "plan");
- PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
+ final PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
((ZombieControl) phase1).addResult("getName", "plan-phase1");
- DateTime targetDate1 = clock.getUTCNow();
- Currency currency = Currency.USD;
+ final DateTime targetDate1 = clock.getUTCNow();
+ final Currency currency = Currency.USD;
// create pseudo-random invoice
- BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
- TEN, currency,
- BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
- "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
+ TEN, currency,
+ BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+ "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
+ final BillingEventSet events = new MockBillingEventSet();
events.add(event1);
- Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate1, Currency.USD);
+ final Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate1, Currency.USD);
invoiceDao.create(invoice, context);
invoiceDao.setWrittenOff(invoice.getId(), context);
- TagDao tagDao = new AuditedTagDao(dbi);
- Map<String, Tag> tags = tagDao.loadEntities(invoice.getId(), ObjectType.INVOICE);
+ final TagDao tagDao = new AuditedTagDao(dbi, tagEventBuilder, bus);
+ final Map<String, Tag> tags = tagDao.loadEntities(invoice.getId(), ObjectType.INVOICE);
assertEquals(tags.size(), 1);
assertTrue(tags.containsKey(ControlTagType.WRITTEN_OFF.toString()));
}
@Test
- public void testRemoveWrittenOffTag() throws InvoiceApiException {
- Subscription subscription = getZombieSubscription();
+ public void testRemoveWrittenOffTag() throws InvoiceApiException, TagApiException {
+ final Subscription subscription = getZombieSubscription();
- Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
+ final Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
((ZombieControl) plan).addResult("getName", "plan");
- PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
+ final PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
((ZombieControl) phase1).addResult("getName", "plan-phase1");
- DateTime targetDate1 = clock.getUTCNow();
- Currency currency = Currency.USD;
+ final DateTime targetDate1 = clock.getUTCNow();
+ final Currency currency = Currency.USD;
// create pseudo-random invoice
- BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
- TEN, currency,
- BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
- "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
+ TEN, currency,
+ BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+ "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
+ final BillingEventSet events = new MockBillingEventSet();
events.add(event1);
- Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate1, Currency.USD);
+ final Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate1, Currency.USD);
invoiceDao.create(invoice, context);
invoiceDao.setWrittenOff(invoice.getId(), context);
- TagDao tagDao = new AuditedTagDao(dbi);
+ final TagDao tagDao = new AuditedTagDao(dbi, tagEventBuilder, bus);
Map<String, Tag> tags = tagDao.loadEntities(invoice.getId(), ObjectType.INVOICE);
assertEquals(tags.size(), 1);
assertTrue(tags.containsKey(ControlTagType.WRITTEN_OFF.toString()));
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceItemDaoTests.java b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceItemDaoTests.java
index c97e775..ad14b3e 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceItemDaoTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceItemDaoTests.java
@@ -16,42 +16,41 @@
package com.ning.billing.invoice.dao;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.invoice.model.CreditInvoiceItem;
-import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import org.joda.time.DateTime;
import org.testng.annotations.Test;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceItem;
+import com.ning.billing.invoice.model.CreditInvoiceItem;
import com.ning.billing.invoice.model.DefaultInvoice;
+import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.invoice.model.RecurringInvoiceItem;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
@Test(groups = {"slow", "invoicing", "invoicing-invoiceDao"})
public class InvoiceItemDaoTests extends InvoiceDaoTestBase {
@Test
public void testInvoiceItemCreation() {
- UUID accountId = UUID.randomUUID();
- UUID invoiceId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
- UUID subscriptionId = UUID.randomUUID();
- DateTime startDate = new DateTime(2011, 10, 1, 0, 0, 0, 0);
- DateTime endDate = new DateTime(2011, 11, 1, 0, 0, 0, 0);
- BigDecimal rate = new BigDecimal("20.00");
-
- RecurringInvoiceItem item = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, "test plan", "test phase", startDate, endDate,
- rate, rate, Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final UUID invoiceId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final UUID subscriptionId = UUID.randomUUID();
+ final DateTime startDate = new DateTime(2011, 10, 1, 0, 0, 0, 0);
+ final DateTime endDate = new DateTime(2011, 11, 1, 0, 0, 0, 0);
+ final BigDecimal rate = new BigDecimal("20.00");
+
+ final RecurringInvoiceItem item = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, "test plan", "test phase", startDate, endDate,
+ rate, rate, Currency.USD);
recurringInvoiceItemDao.create(item, context);
- RecurringInvoiceItem thisItem = (RecurringInvoiceItem) recurringInvoiceItemDao.getById(item.getId().toString());
+ final RecurringInvoiceItem thisItem = (RecurringInvoiceItem) recurringInvoiceItemDao.getById(item.getId().toString());
assertNotNull(thisItem);
assertEquals(thisItem.getId(), item.getId());
assertEquals(thisItem.getInvoiceId(), item.getInvoiceId());
@@ -67,95 +66,95 @@ public class InvoiceItemDaoTests extends InvoiceDaoTestBase {
@Test
public void testGetInvoiceItemsBySubscriptionId() {
- UUID accountId = UUID.randomUUID();
- UUID subscriptionId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
- DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
- BigDecimal rate = new BigDecimal("20.00");
+ final UUID accountId = UUID.randomUUID();
+ final UUID subscriptionId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
+ final BigDecimal rate = new BigDecimal("20.00");
for (int i = 0; i < 3; i++) {
- UUID invoiceId = UUID.randomUUID();
+ final UUID invoiceId = UUID.randomUUID();
- RecurringInvoiceItem item = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId,
- "test plan", "test phase", startDate.plusMonths(i), startDate.plusMonths(i + 1),
- rate, rate, Currency.USD);
+ final RecurringInvoiceItem item = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId,
+ "test plan", "test phase", startDate.plusMonths(i), startDate.plusMonths(i + 1),
+ rate, rate, Currency.USD);
recurringInvoiceItemDao.create(item, context);
}
- List<InvoiceItem> items = recurringInvoiceItemDao.getInvoiceItemsBySubscription(subscriptionId.toString());
+ final List<InvoiceItem> items = recurringInvoiceItemDao.getInvoiceItemsBySubscription(subscriptionId.toString());
assertEquals(items.size(), 3);
}
@Test
public void testGetInvoiceItemsByInvoiceId() {
- UUID accountId = UUID.randomUUID();
- UUID invoiceId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
- DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
- BigDecimal rate = new BigDecimal("20.00");
+ final UUID accountId = UUID.randomUUID();
+ final UUID invoiceId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
+ final BigDecimal rate = new BigDecimal("20.00");
for (int i = 0; i < 5; i++) {
- UUID subscriptionId = UUID.randomUUID();
- BigDecimal amount = rate.multiply(new BigDecimal(i + 1));
+ final UUID subscriptionId = UUID.randomUUID();
+ final BigDecimal amount = rate.multiply(new BigDecimal(i + 1));
- RecurringInvoiceItem item = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId,
- "test plan", "test phase", startDate, startDate.plusMonths(1),
- amount, amount, Currency.USD);
+ final RecurringInvoiceItem item = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId,
+ "test plan", "test phase", startDate, startDate.plusMonths(1),
+ amount, amount, Currency.USD);
recurringInvoiceItemDao.create(item, context);
}
- List<InvoiceItem> items = recurringInvoiceItemDao.getInvoiceItemsByInvoice(invoiceId.toString());
+ final List<InvoiceItem> items = recurringInvoiceItemDao.getInvoiceItemsByInvoice(invoiceId.toString());
assertEquals(items.size(), 5);
}
@Test
public void testGetInvoiceItemsByAccountId() {
- UUID accountId = UUID.randomUUID();
- UUID bundleId = UUID.randomUUID();
- DateTime targetDate = new DateTime(2011, 5, 23, 0, 0, 0, 0);
- DefaultInvoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final DateTime targetDate = new DateTime(2011, 5, 23, 0, 0, 0, 0);
+ final DefaultInvoice invoice = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate, Currency.USD);
invoiceDao.create(invoice, context);
- UUID invoiceId = invoice.getId();
- DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
- BigDecimal rate = new BigDecimal("20.00");
+ final UUID invoiceId = invoice.getId();
+ final DateTime startDate = new DateTime(2011, 3, 1, 0, 0, 0, 0);
+ final BigDecimal rate = new BigDecimal("20.00");
- UUID subscriptionId = UUID.randomUUID();
+ final UUID subscriptionId = UUID.randomUUID();
- RecurringInvoiceItem item = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId,
- "test plan", "test phase", startDate, startDate.plusMonths(1),
- rate, rate, Currency.USD);
+ final RecurringInvoiceItem item = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId,
+ "test plan", "test phase", startDate, startDate.plusMonths(1),
+ rate, rate, Currency.USD);
recurringInvoiceItemDao.create(item, context);
- List<InvoiceItem> items = recurringInvoiceItemDao.getInvoiceItemsByAccount(accountId.toString());
+ final List<InvoiceItem> items = recurringInvoiceItemDao.getInvoiceItemsByAccount(accountId.toString());
assertEquals(items.size(), 1);
}
@Test
public void testCreditInvoiceSqlDao() {
- UUID invoiceId = UUID.randomUUID();
- UUID accountId = UUID.randomUUID();
- DateTime creditDate = new DateTime(2012, 4, 1, 0, 10, 22, 0);
+ final UUID invoiceId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
+ final DateTime creditDate = new DateTime(2012, 4, 1, 0, 10, 22, 0);
- InvoiceItem creditInvoiceItem = new CreditInvoiceItem(invoiceId, accountId, creditDate, TEN, Currency.USD);
+ final InvoiceItem creditInvoiceItem = new CreditInvoiceItem(invoiceId, accountId, creditDate, TEN, Currency.USD);
creditInvoiceItemSqlDao.create(creditInvoiceItem, context);
- InvoiceItem savedItem = creditInvoiceItemSqlDao.getById(creditInvoiceItem.getId().toString());
+ final InvoiceItem savedItem = creditInvoiceItemSqlDao.getById(creditInvoiceItem.getId().toString());
assertEquals(savedItem, creditInvoiceItem);
}
@Test
public void testFixedPriceInvoiceSqlDao() {
- UUID invoiceId = UUID.randomUUID();
- UUID accountId = UUID.randomUUID();
- DateTime startDate = new DateTime(2012, 4, 1, 0, 10, 22, 0);
+ final UUID invoiceId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
+ final DateTime startDate = new DateTime(2012, 4, 1, 0, 10, 22, 0);
- InvoiceItem fixedPriceInvoiceItem = new FixedPriceInvoiceItem(invoiceId, accountId, UUID.randomUUID(),
- UUID.randomUUID(), "test plan", "test phase", startDate, startDate.plusMonths(1), TEN, Currency.USD);
+ final InvoiceItem fixedPriceInvoiceItem = new FixedPriceInvoiceItem(invoiceId, accountId, UUID.randomUUID(),
+ UUID.randomUUID(), "test plan", "test phase", startDate, startDate.plusMonths(1), TEN, Currency.USD);
fixedPriceInvoiceItemSqlDao.create(fixedPriceInvoiceItem, context);
- InvoiceItem savedItem = fixedPriceInvoiceItemSqlDao.getById(fixedPriceInvoiceItem.getId().toString());
+ final InvoiceItem savedItem = fixedPriceInvoiceItemSqlDao.getById(fixedPriceInvoiceItem.getId().toString());
assertEquals(savedItem, fixedPriceInvoiceItem);
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
index e24effb..68987f8 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
@@ -23,12 +23,12 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.api.InvoiceApiException;
import org.joda.time.DateTime;
import com.google.inject.Inject;
+import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.api.user.DefaultInvoiceCreationEvent;
@@ -41,7 +41,7 @@ public class MockInvoiceDao implements InvoiceDao {
private final Map<UUID, Invoice> invoices = new LinkedHashMap<UUID, Invoice>();
@Inject
- public MockInvoiceDao(Bus eventBus) {
+ public MockInvoiceDao(final Bus eventBus) {
this.eventBus = eventBus;
}
@@ -52,16 +52,15 @@ public class MockInvoiceDao implements InvoiceDao {
}
try {
eventBus.post(new DefaultInvoiceCreationEvent(invoice.getId(), invoice.getAccountId(),
- invoice.getBalance(), invoice.getCurrency(),
- invoice.getInvoiceDate(), null));
- }
- catch (Bus.EventBusException ex) {
+ invoice.getBalance(), invoice.getCurrency(),
+ invoice.getInvoiceDate(), null));
+ } catch (Bus.EventBusException ex) {
throw new RuntimeException(ex);
}
}
@Override
- public Invoice getById(UUID id) {
+ public Invoice getById(final UUID id) {
synchronized (monitor) {
return invoices.get(id);
}
@@ -75,11 +74,11 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public List<Invoice> getInvoicesByAccount(UUID accountId) {
- List<Invoice> result = new ArrayList<Invoice>();
+ public List<Invoice> getInvoicesByAccount(final UUID accountId) {
+ final List<Invoice> result = new ArrayList<Invoice>();
synchronized (monitor) {
- for (Invoice invoice : invoices.values()) {
+ for (final Invoice invoice : invoices.values()) {
if (accountId.equals(invoice.getAccountId()) && !invoice.isMigrationInvoice()) {
result.add(invoice);
}
@@ -89,11 +88,11 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public List<Invoice> getInvoicesByAccount(UUID accountId, DateTime fromDate) {
- List<Invoice> invoicesForAccount = new ArrayList<Invoice>();
+ public List<Invoice> getInvoicesByAccount(final UUID accountId, final DateTime fromDate) {
+ final List<Invoice> invoicesForAccount = new ArrayList<Invoice>();
synchronized (monitor) {
- for (Invoice invoice : get()) {
+ for (final Invoice invoice : get()) {
if (accountId.equals(invoice.getAccountId()) && !invoice.getTargetDate().isBefore(fromDate) && !invoice.isMigrationInvoice()) {
invoicesForAccount.add(invoice);
}
@@ -104,12 +103,12 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public List<Invoice> getInvoicesBySubscription(UUID subscriptionId) {
- List<Invoice> result = new ArrayList<Invoice>();
+ public List<Invoice> getInvoicesBySubscription(final UUID subscriptionId) {
+ final List<Invoice> result = new ArrayList<Invoice>();
synchronized (monitor) {
- for (Invoice invoice : invoices.values()) {
- for (InvoiceItem item : invoice.getInvoiceItems()) {
+ for (final Invoice invoice : invoices.values()) {
+ for (final InvoiceItem item : invoice.getInvoiceItems()) {
if (subscriptionId.equals(item.getSubscriptionId()) && !invoice.isMigrationInvoice()) {
result.add(invoice);
break;
@@ -125,10 +124,10 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public UUID getInvoiceIdByPaymentAttemptId(UUID paymentAttemptId) {
- synchronized(monitor) {
- for (Invoice invoice : invoices.values()) {
- for (InvoicePayment payment : invoice.getPayments()) {
+ public UUID getInvoiceIdByPaymentAttemptId(final UUID paymentAttemptId) {
+ synchronized (monitor) {
+ for (final Invoice invoice : invoices.values()) {
+ for (final InvoicePayment payment : invoice.getPayments()) {
if (paymentAttemptId.equals(payment.getPaymentAttemptId())) {
return invoice.getId();
}
@@ -139,10 +138,10 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public InvoicePayment getInvoicePayment(UUID paymentAttemptId) {
- synchronized(monitor) {
- for (Invoice invoice : invoices.values()) {
- for (InvoicePayment payment : invoice.getPayments()) {
+ public InvoicePayment getInvoicePayment(final UUID paymentAttemptId) {
+ synchronized (monitor) {
+ for (final Invoice invoice : invoices.values()) {
+ for (final InvoicePayment payment : invoice.getPayments()) {
if (paymentAttemptId.equals(payment.getPaymentAttemptId())) {
return payment;
}
@@ -154,9 +153,9 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public void notifyOfPaymentAttempt(InvoicePayment invoicePayment, CallContext context) {
+ public void notifyOfPaymentAttempt(final InvoicePayment invoicePayment, final CallContext context) {
synchronized (monitor) {
- Invoice invoice = invoices.get(invoicePayment.getInvoiceId());
+ final Invoice invoice = invoices.get(invoicePayment.getInvoiceId());
if (invoice != null) {
invoice.addPayment(invoicePayment);
}
@@ -164,10 +163,10 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public BigDecimal getAccountBalance(UUID accountId) {
+ public BigDecimal getAccountBalance(final UUID accountId) {
BigDecimal balance = BigDecimal.ZERO;
- for (Invoice invoice : get()) {
+ for (final Invoice invoice : get()) {
if (accountId.equals(invoice.getAccountId())) {
balance = balance.add(invoice.getBalance());
}
@@ -177,10 +176,10 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public List<Invoice> getUnpaidInvoicesByAccountId(UUID accountId, DateTime upToDate) {
- List<Invoice> unpaidInvoices = new ArrayList<Invoice>();
+ public List<Invoice> getUnpaidInvoicesByAccountId(final UUID accountId, final DateTime upToDate) {
+ final List<Invoice> unpaidInvoices = new ArrayList<Invoice>();
- for (Invoice invoice : get()) {
+ for (final Invoice invoice : get()) {
if (accountId.equals(invoice.getAccountId()) && (invoice.getBalance().compareTo(BigDecimal.ZERO) > 0) && !invoice.isMigrationInvoice()) {
unpaidInvoices.add(invoice);
}
@@ -189,67 +188,67 @@ public class MockInvoiceDao implements InvoiceDao {
return unpaidInvoices;
}
- @Override
- public List<Invoice> getAllInvoicesByAccount(UUID accountId) {
- List<Invoice> result = new ArrayList<Invoice>();
+ @Override
+ public List<Invoice> getAllInvoicesByAccount(final UUID accountId) {
+ final List<Invoice> result = new ArrayList<Invoice>();
- synchronized (monitor) {
- for (Invoice invoice : invoices.values()) {
- if (accountId.equals(invoice.getAccountId())) {
- result.add(invoice);
- }
- }
- }
- return result;
- }
+ synchronized (monitor) {
+ for (final Invoice invoice : invoices.values()) {
+ if (accountId.equals(invoice.getAccountId())) {
+ result.add(invoice);
+ }
+ }
+ }
+ return result;
+ }
@Override
- public void setWrittenOff(UUID objectId, CallContext context) {
+ public void setWrittenOff(final UUID objectId, final CallContext context) {
throw new UnsupportedOperationException();
}
@Override
- public void removeWrittenOff(UUID objectId, CallContext context) {
+ public void removeWrittenOff(final UUID objectId, final CallContext context) {
throw new UnsupportedOperationException();
}
@Override
- public void postChargeback(UUID invoicePaymentId, BigDecimal amount, CallContext context) throws InvoiceApiException {
+ public void postChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException {
throw new UnsupportedOperationException();
}
@Override
- public BigDecimal getRemainingAmountPaid(UUID invoicePaymentId) {
+ public BigDecimal getRemainingAmountPaid(final UUID invoicePaymentId) {
throw new UnsupportedOperationException();
}
@Override
- public UUID getAccountIdFromInvoicePaymentId(UUID invoicePaymentId) throws InvoiceApiException {
+ public UUID getAccountIdFromInvoicePaymentId(final UUID invoicePaymentId) throws InvoiceApiException {
throw new UnsupportedOperationException();
}
@Override
- public List<InvoicePayment> getChargebacksByAccountId(UUID accountId) {
+ public List<InvoicePayment> getChargebacksByAccountId(final UUID accountId) {
throw new UnsupportedOperationException();
}
@Override
- public List<InvoicePayment> getChargebacksByPaymentAttemptId(UUID paymentAttemptId) {
+ public List<InvoicePayment> getChargebacksByPaymentAttemptId(final UUID paymentAttemptId) {
throw new UnsupportedOperationException();
}
@Override
- public InvoicePayment getChargebackById(UUID chargebackId) throws InvoiceApiException {
+ public InvoicePayment getChargebackById(final UUID chargebackId) throws InvoiceApiException {
throw new UnsupportedOperationException();
}
@Override
- public InvoiceItem getCreditById(UUID creditId) throws InvoiceApiException {
+ public InvoiceItem getCreditById(final UUID creditId) throws InvoiceApiException {
throw new UnsupportedOperationException();
}
@Override
- public InvoiceItem insertCredit(UUID accountId, BigDecimal amount, DateTime effectiveDate, Currency currency, CallContext context) {
+ public InvoiceItem insertCredit(final UUID accountId, final BigDecimal amount, final DateTime effectiveDate, final Currency currency, final CallContext context) {
throw new UnsupportedOperationException();
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java b/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
index 33feebe..6017a5a 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
@@ -16,8 +16,6 @@
package com.ning.billing.invoice.glue;
-import static org.testng.Assert.assertNotNull;
-
import java.io.IOException;
import java.net.URL;
@@ -52,6 +50,8 @@ import com.ning.billing.util.glue.TagStoreModule;
import com.ning.billing.util.notificationq.MockNotificationQueueService;
import com.ning.billing.util.notificationq.NotificationQueueService;
+import static org.testng.Assert.assertNotNull;
+
public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
private final MysqlTestingHelper helper = new MysqlTestingHelper();
private IDBI dbi;
@@ -107,7 +107,7 @@ public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
// install(new AccountModule());
bind(AccountUserApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class));
- BillingApi billingApi = BrainDeadProxyFactory.createBrainDeadProxyFor(BillingApi.class);
+ final BillingApi billingApi = BrainDeadProxyFactory.createBrainDeadProxyFor(BillingApi.class);
((ZombieControl) billingApi).addResult("setChargedThroughDateFromTransaction", BrainDeadProxyFactory.ZOMBIE_VOID);
bind(BillingApi.class).toInstance(billingApi);
@@ -127,7 +127,7 @@ public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
final URL url = InvoiceModuleWithEmbeddedDb.class.getResource(resource);
assertNotNull(url);
try {
- System.getProperties().load( url.openStream() );
+ System.getProperties().load(url.openStream());
} catch (IOException e) {
throw new RuntimeException(e);
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithMocks.java b/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithMocks.java
index 49a90bc..5e4a2c3 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithMocks.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithMocks.java
@@ -25,7 +25,7 @@ import com.ning.billing.util.globallocker.MockGlobalLocker;
public class InvoiceModuleWithMocks extends DefaultInvoiceModule {
- @Override
+ @Override
protected void installInvoiceDao() {
bind(MockInvoiceDao.class).asEagerSingleton();
bind(InvoiceDao.class).to(MockInvoiceDao.class);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/HtmlInvoiceGeneratorTest.java b/invoice/src/test/java/com/ning/billing/invoice/HtmlInvoiceGeneratorTest.java
index 144fb13..c9ca94b 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/HtmlInvoiceGeneratorTest.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/HtmlInvoiceGeneratorTest.java
@@ -16,6 +16,16 @@
package com.ning.billing.invoice;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.joda.time.DateTime;
+import org.skife.config.ConfigurationObjectFactory;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
@@ -28,41 +38,32 @@ import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
import com.ning.billing.util.email.templates.MustacheTemplateEngine;
import com.ning.billing.util.email.templates.TemplateEngine;
import com.ning.billing.util.template.translation.TranslatorConfig;
-import org.joda.time.DateTime;
-import org.skife.config.ConfigurationObjectFactory;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
import static org.testng.Assert.assertNotNull;
@Test(groups = {"fast", "email"})
public class HtmlInvoiceGeneratorTest {
private HtmlInvoiceGenerator g;
- private final static String TEST_TEMPLATE_NAME = "HtmlInvoiceTemplate";
+ private static final String TEST_TEMPLATE_NAME = "HtmlInvoiceTemplate";
@BeforeClass
public void setup() {
- TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
- TemplateEngine templateEngine = new MustacheTemplateEngine();
- InvoiceFormatterFactory factory = new DefaultInvoiceFormatterFactory();
+ final TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
+ final TemplateEngine templateEngine = new MustacheTemplateEngine();
+ final InvoiceFormatterFactory factory = new DefaultInvoiceFormatterFactory();
g = new HtmlInvoiceGenerator(factory, templateEngine, config);
}
@Test
public void testGenerateInvoice() throws Exception {
- String output = g.generateInvoice(createAccount(), createInvoice(), TEST_TEMPLATE_NAME);
+ final String output = g.generateInvoice(createAccount(), createInvoice(), TEST_TEMPLATE_NAME);
assertNotNull(output);
System.out.print(output);
}
private Account createAccount() {
- Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
- ZombieControl zombieControl = (ZombieControl) account;
+ final Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
+ final ZombieControl zombieControl = (ZombieControl) account;
zombieControl.addResult("getExternalKey", "1234abcd");
zombieControl.addResult("getName", "Jim Smith");
zombieControl.addResult("getFirstNameLength", 3);
@@ -80,13 +81,13 @@ public class HtmlInvoiceGeneratorTest {
}
private Invoice createInvoice() {
- DateTime startDate = new DateTime().minusMonths(1);
- DateTime endDate = new DateTime();
+ final DateTime startDate = new DateTime().minusMonths(1);
+ final DateTime endDate = new DateTime();
- BigDecimal price1 = new BigDecimal("29.95");
- BigDecimal price2 = new BigDecimal("59.95");
- Invoice dummyInvoice = BrainDeadProxyFactory.createBrainDeadProxyFor(Invoice.class);
- ZombieControl zombie = (ZombieControl) dummyInvoice;
+ final BigDecimal price1 = new BigDecimal("29.95");
+ final BigDecimal price2 = new BigDecimal("59.95");
+ final Invoice dummyInvoice = BrainDeadProxyFactory.createBrainDeadProxyFor(Invoice.class);
+ final ZombieControl zombie = (ZombieControl) dummyInvoice;
zombie.addResult("getInvoiceDate", startDate);
zombie.addResult("getInvoiceNumber", 42);
zombie.addResult("getCurrency", Currency.USD);
@@ -94,7 +95,7 @@ public class HtmlInvoiceGeneratorTest {
zombie.addResult("getAmountPaid", BigDecimal.ZERO);
zombie.addResult("getBalance", price1.add(price2));
- List<InvoiceItem> items = new ArrayList<InvoiceItem>();
+ final List<InvoiceItem> items = new ArrayList<InvoiceItem>();
items.add(createInvoiceItem(price1, "Domain 1", startDate, endDate, "ning-plus"));
items.add(createInvoiceItem(price2, "Domain 2", startDate, endDate, "ning-pro"));
zombie.addResult("getInvoiceItems", items);
@@ -102,9 +103,9 @@ public class HtmlInvoiceGeneratorTest {
return dummyInvoice;
}
- private InvoiceItem createInvoiceItem(BigDecimal amount, String networkName, DateTime startDate, DateTime endDate, String planName) {
- InvoiceItem item = BrainDeadProxyFactory.createBrainDeadProxyFor(InvoiceItem.class);
- ZombieControl zombie = (ZombieControl) item;
+ private InvoiceItem createInvoiceItem(final BigDecimal amount, final String networkName, final DateTime startDate, final DateTime endDate, final String planName) {
+ final InvoiceItem item = BrainDeadProxyFactory.createBrainDeadProxyFor(InvoiceItem.class);
+ final ZombieControl zombie = (ZombieControl) item;
zombie.addResult("getAmount", amount);
zombie.addResult("getStartDate", startDate);
zombie.addResult("getEndDate", endDate);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/MockBillingEventSet.java b/invoice/src/test/java/com/ning/billing/invoice/MockBillingEventSet.java
index e8002f0..c8ecf34 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/MockBillingEventSet.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/MockBillingEventSet.java
@@ -31,14 +31,14 @@ public class MockBillingEventSet extends TreeSet<BillingEvent> implements Billin
private boolean isAccountInvoiceOff;
private List<UUID> subscriptionIdsWithAutoInvoiceOff = new ArrayList<UUID>();
- public void addSubscriptionWithAutoInvoiceOff(UUID subscriptionId) {
+ public void addSubscriptionWithAutoInvoiceOff(final UUID subscriptionId) {
subscriptionIdsWithAutoInvoiceOff.add(subscriptionId);
}
@Override
- public boolean isLast(BillingEvent event) {
+ public boolean isLast(final BillingEvent event) {
return event == last();
- }
+ }
@Override
public boolean isAccountAutoInvoiceOff() {
@@ -50,11 +50,11 @@ public class MockBillingEventSet extends TreeSet<BillingEvent> implements Billin
return subscriptionIdsWithAutoInvoiceOff;
}
- public void setAccountInvoiceOff(boolean isAccountInvoiceOff) {
+ public void setAccountInvoiceOff(final boolean isAccountInvoiceOff) {
this.isAccountInvoiceOff = isAccountInvoiceOff;
}
- public void setSubscriptionIdsWithAutoInvoiceOff(List<UUID> subscriptionIdsWithAutoInvoiceOff) {
+ public void setSubscriptionIdsWithAutoInvoiceOff(final List<UUID> subscriptionIdsWithAutoInvoiceOff) {
this.subscriptionIdsWithAutoInvoiceOff = subscriptionIdsWithAutoInvoiceOff;
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/MockModule.java b/invoice/src/test/java/com/ning/billing/invoice/MockModule.java
index 816cd42..120ab0e 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/MockModule.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/MockModule.java
@@ -56,7 +56,7 @@ public class MockModule extends AbstractModule {
final DbiConfig config = new ConfigurationObjectFactory(System.getProperties()).build(DbiConfig.class);
bind(DbiConfig.class).toInstance(config);
} else {
- final IDBI dbi = helper.getDBI();
+ final IDBI dbi = helper.getDBI();
bind(IDBI.class).toInstance(dbi);
}
@@ -74,6 +74,6 @@ public class MockModule extends AbstractModule {
}
protected void installInvoiceModule() {
- install(new DefaultInvoiceModule());
+ install(new DefaultInvoiceModule());
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/notification/MockNextBillingDatePoster.java b/invoice/src/test/java/com/ning/billing/invoice/notification/MockNextBillingDatePoster.java
index 88ff62a..1079a2f 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/notification/MockNextBillingDatePoster.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/notification/MockNextBillingDatePoster.java
@@ -23,7 +23,7 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
public class MockNextBillingDatePoster implements NextBillingDatePoster {
@Override
- public void insertNextBillingNotification(Transmogrifier transactionalDao, UUID subscriptionId, DateTime futureNotificationTime) {
+ public void insertNextBillingNotification(final Transmogrifier transactionalDao, final UUID subscriptionId, final DateTime futureNotificationTime) {
// do nothing
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
index 0164fb6..e56006f 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
@@ -16,9 +16,6 @@
package com.ning.billing.invoice.notification;
-import static com.jayway.awaitility.Awaitility.await;
-import static java.util.concurrent.TimeUnit.MINUTES;
-
import java.io.IOException;
import java.sql.SQLException;
import java.util.UUID;
@@ -67,51 +64,54 @@ import com.ning.billing.util.notificationq.DummySqlTest;
import com.ning.billing.util.notificationq.NotificationQueueService;
import com.ning.billing.util.notificationq.dao.NotificationSqlDao;
+import static com.jayway.awaitility.Awaitility.await;
+import static java.util.concurrent.TimeUnit.MINUTES;
+
public class TestNextBillingDateNotifier {
- private Clock clock;
- private DefaultNextBillingDateNotifier notifier;
- private DummySqlTest dao;
- private Bus eventBus;
- private MysqlTestingHelper helper;
- private InvoiceListenerMock listener;
- private NotificationQueueService notificationQueueService;
-
-
- private static final class InvoiceListenerMock extends InvoiceListener {
- int eventCount = 0;
- UUID latestSubscriptionId = null;
-
- public InvoiceListenerMock(CallContextFactory factory, InvoiceDispatcher dispatcher) {
- super(factory, dispatcher);
- }
-
- @Override
- public void handleNextBillingDateEvent(UUID subscriptionId,
- DateTime eventDateTime) {
- eventCount++;
- latestSubscriptionId=subscriptionId;
- }
-
- public int getEventCount() {
- return eventCount;
- }
-
- public UUID getLatestSubscriptionId(){
- return latestSubscriptionId;
- }
-
- }
-
- @BeforeMethod(groups={"slow"})
+ private Clock clock;
+ private DefaultNextBillingDateNotifier notifier;
+ private DummySqlTest dao;
+ private Bus eventBus;
+ private MysqlTestingHelper helper;
+ private InvoiceListenerMock listener;
+ private NotificationQueueService notificationQueueService;
+
+
+ private static final class InvoiceListenerMock extends InvoiceListener {
+ int eventCount = 0;
+ UUID latestSubscriptionId = null;
+
+ public InvoiceListenerMock(final CallContextFactory factory, final InvoiceDispatcher dispatcher) {
+ super(factory, dispatcher);
+ }
+
+ @Override
+ public void handleNextBillingDateEvent(final UUID subscriptionId,
+ final DateTime eventDateTime) {
+ eventCount++;
+ latestSubscriptionId = subscriptionId;
+ }
+
+ public int getEventCount() {
+ return eventCount;
+ }
+
+ public UUID getLatestSubscriptionId() {
+ return latestSubscriptionId;
+ }
+
+ }
+
+ @BeforeMethod(groups = {"slow"})
public void cleanDb() {
- helper.cleanupAllTables();
- }
-
- @BeforeClass(groups={"slow"})
- public void setup() throws KillbillService.ServiceException, IOException, ClassNotFoundException, SQLException {
- //TestApiBase.loadSystemPropertiesFromClasspath("/entitlement.properties");
- final Injector g = Guice.createInjector(Stage.PRODUCTION, new AbstractModule() {
-
+ helper.cleanupAllTables();
+ }
+
+ @BeforeClass(groups = {"slow"})
+ public void setup() throws KillbillService.ServiceException, IOException, ClassNotFoundException, SQLException {
+ //TestApiBase.loadSystemPropertiesFromClasspath("/entitlement.properties");
+ final Injector g = Guice.createInjector(Stage.PRODUCTION, new AbstractModule() {
+
protected void configure() {
install(new MockClockModule());
install(new BusModule(BusType.MEMORY));
@@ -119,7 +119,7 @@ public class TestNextBillingDateNotifier {
install(new MockJunctionModule());
install(new MockCatalogModule());
install(new NotificationQueueModule());
-
+
final MysqlTestingHelper helper = new MysqlTestingHelper();
bind(MysqlTestingHelper.class).toInstance(helper);
if (helper.isUsingLocalInstance()) {
@@ -130,80 +130,80 @@ public class TestNextBillingDateNotifier {
final IDBI dbi = helper.getDBI();
bind(IDBI.class).toInstance(dbi);
}
-
-
+
+
}
});
clock = g.getInstance(Clock.class);
- IDBI dbi = g.getInstance(IDBI.class);
+ final IDBI dbi = g.getInstance(IDBI.class);
dao = dbi.onDemand(DummySqlTest.class);
eventBus = g.getInstance(Bus.class);
helper = g.getInstance(MysqlTestingHelper.class);
notificationQueueService = g.getInstance(NotificationQueueService.class);
- InvoiceDispatcher dispatcher = g.getInstance(InvoiceDispatcher.class);
+ final InvoiceDispatcher dispatcher = g.getInstance(InvoiceDispatcher.class);
- Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
- EntitlementUserApi entitlementUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementUserApi.class);
+ final Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+ final EntitlementUserApi entitlementUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementUserApi.class);
((ZombieControl) entitlementUserApi).addResult("getSubscriptionFromId", subscription);
- CallContextFactory factory = new DefaultCallContextFactory(clock);
+ final CallContextFactory factory = new DefaultCallContextFactory(clock);
listener = new InvoiceListenerMock(factory, dispatcher);
- notifier = new DefaultNextBillingDateNotifier(notificationQueueService,g.getInstance(InvoiceConfig.class), entitlementUserApi, listener);
+ notifier = new DefaultNextBillingDateNotifier(notificationQueueService, g.getInstance(InvoiceConfig.class), entitlementUserApi, listener);
startMysql();
- }
+ }
- private void startMysql() throws IOException, ClassNotFoundException, SQLException {
- final String ddl = IOUtils.toString(NotificationSqlDao.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
- final String testDdl = IOUtils.toString(NotificationSqlDao.class.getResourceAsStream("/com/ning/billing/util/ddl_test.sql"));
- helper.startMysql();
- helper.initDb(ddl);
- helper.initDb(testDdl);
- }
+ private void startMysql() throws IOException, ClassNotFoundException, SQLException {
+ final String ddl = IOUtils.toString(NotificationSqlDao.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
+ final String testDdl = IOUtils.toString(NotificationSqlDao.class.getResourceAsStream("/com/ning/billing/util/ddl_test.sql"));
+ helper.startMysql();
+ helper.initDb(ddl);
+ helper.initDb(testDdl);
+ }
- @Test(enabled=true, groups="slow")
- public void testInvoiceNotifier() throws Exception {
- final UUID subscriptionId = new UUID(0L,1L);
- final DateTime now = new DateTime();
- final DateTime readyTime = now.plusMillis(2000);
- final NextBillingDatePoster poster = new DefaultNextBillingDatePoster(notificationQueueService);
+ @Test(enabled = true, groups = "slow")
+ public void testInvoiceNotifier() throws Exception {
+ final UUID subscriptionId = new UUID(0L, 1L);
+ final DateTime now = new DateTime();
+ final DateTime readyTime = now.plusMillis(2000);
+ final NextBillingDatePoster poster = new DefaultNextBillingDatePoster(notificationQueueService);
- eventBus.start();
- notifier.initialize();
- notifier.start();
+ eventBus.start();
+ notifier.initialize();
+ notifier.start();
- dao.inTransaction(new Transaction<Void, DummySqlTest>() {
- @Override
- public Void inTransaction(DummySqlTest transactional,
- TransactionStatus status) throws Exception {
+ dao.inTransaction(new Transaction<Void, DummySqlTest>() {
+ @Override
+ public Void inTransaction(final DummySqlTest transactional,
+ final TransactionStatus status) throws Exception {
- poster.insertNextBillingNotification(transactional, subscriptionId, readyTime);
- return null;
- }
- });
+ poster.insertNextBillingNotification(transactional, subscriptionId, readyTime);
+ return null;
+ }
+ });
- // Move time in the future after the notification effectiveDate
- ((ClockMock) clock).setDeltaFromReality(3000);
+ // Move time in the future after the notification effectiveDate
+ ((ClockMock) clock).setDeltaFromReality(3000);
- await().atMost(1, MINUTES).until(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return listener.getEventCount() == 1;
- }
- });
+ await().atMost(1, MINUTES).until(new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ return listener.getEventCount() == 1;
+ }
+ });
- Assert.assertEquals(listener.getEventCount(), 1);
- Assert.assertEquals(listener.getLatestSubscriptionId(), subscriptionId);
- }
+ Assert.assertEquals(listener.getEventCount(), 1);
+ Assert.assertEquals(listener.getLatestSubscriptionId(), subscriptionId);
+ }
- @AfterClass(groups="slow")
+ @AfterClass(groups = "slow")
public void tearDown() throws Exception {
- notifier.stop();
- helper.stopMysql();
+ notifier.stop();
+ helper.stopMysql();
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
index 679049a..f864108 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
@@ -67,22 +67,22 @@ import com.ning.billing.util.globallocker.GlobalLocker;
@Test(groups = "slow")
@Guice(modules = {MockModule.class})
public class TestInvoiceDispatcher extends InvoicingTestBase {
- private Logger log = LoggerFactory.getLogger(TestInvoiceDispatcher.class);
+ private final Logger log = LoggerFactory.getLogger(TestInvoiceDispatcher.class);
- @Inject
- private InvoiceGenerator generator;
+ @Inject
+ private InvoiceGenerator generator;
- @Inject
- private InvoiceDao invoiceDao;
+ @Inject
+ private InvoiceDao invoiceDao;
- @Inject
- private GlobalLocker locker;
+ @Inject
+ private GlobalLocker locker;
- @Inject
- private MysqlTestingHelper helper;
+ @Inject
+ private MysqlTestingHelper helper;
- @Inject
- private NextBillingDateNotifier notifier;
+ @Inject
+ private NextBillingDateNotifier notifier;
@Inject
private BusService busService;
@@ -96,91 +96,90 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
private CallContext context;
@BeforeSuite(groups = "slow")
- public void setup() throws Exception
- {
- final String invoiceDdl = IOUtils.toString(TestInvoiceDispatcher.class.getResourceAsStream("/com/ning/billing/invoice/ddl.sql"));
- final String utilDdl = IOUtils.toString(TestInvoiceDispatcher.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
+ public void setup() throws Exception {
+ final String invoiceDdl = IOUtils.toString(TestInvoiceDispatcher.class.getResourceAsStream("/com/ning/billing/invoice/ddl.sql"));
+ final String utilDdl = IOUtils.toString(TestInvoiceDispatcher.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
- helper.startMysql();
+ helper.startMysql();
- helper.initDb(invoiceDdl);
- helper.initDb(utilDdl);
- notifier.initialize();
- notifier.start();
+ helper.initDb(invoiceDdl);
+ helper.initDb(utilDdl);
+ notifier.initialize();
+ notifier.start();
context = new DefaultCallContextFactory(clock).createCallContext("Miracle Max", CallOrigin.TEST, UserType.TEST);
- busService.getBus().start();
- ((ZombieControl)billingApi).addResult("setChargedThroughDate", BrainDeadProxyFactory.ZOMBIE_VOID);
- }
-
- @AfterClass(alwaysRun = true)
- public void tearDown() {
- try {
- ((DefaultBusService) busService).stopBus();
- notifier.stop();
- helper.stopMysql();
- } catch (Exception e) {
- log.warn("Failed to tearDown test properly ", e);
- }
+ busService.getBus().start();
+ ((ZombieControl) billingApi).addResult("setChargedThroughDate", BrainDeadProxyFactory.ZOMBIE_VOID);
}
-
- @Test(groups={"slow"}, enabled=true)
+
+ @AfterClass(alwaysRun = true)
+ public void tearDown() {
+ try {
+ ((DefaultBusService) busService).stopBus();
+ notifier.stop();
+ helper.stopMysql();
+ } catch (Exception e) {
+ log.warn("Failed to tearDown test properly ", e);
+ }
+ }
+
+ @Test(groups = {"slow"}, enabled = true)
public void testDryRunInvoice() throws InvoiceApiException {
- UUID accountId = UUID.randomUUID();
- UUID subscriptionId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
+ final UUID subscriptionId = UUID.randomUUID();
- AccountUserApi accountUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class);
- Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
+ final AccountUserApi accountUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class);
+ final Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
- ((ZombieControl)accountUserApi).addResult("getAccountById", account);
- ((ZombieControl)account).addResult("getCurrency", Currency.USD);
- ((ZombieControl)account).addResult("getId", accountId);
- ((ZombieControl)account).addResult(("isNotifiedForInvoices"), true);
+ ((ZombieControl) accountUserApi).addResult("getAccountById", account);
+ ((ZombieControl) account).addResult("getCurrency", Currency.USD);
+ ((ZombieControl) account).addResult("getId", accountId);
+ ((ZombieControl) account).addResult(("isNotifiedForInvoices"), true);
- Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
- ((ZombieControl)subscription).addResult("getId", subscriptionId);
- ((ZombieControl)subscription).addResult("getBundleId", new UUID(0L,0L));
- BillingEventSet events = new MockBillingEventSet();
- Plan plan = MockPlan.createBicycleNoTrialEvergreen1USD();
- PlanPhase planPhase = MockPlanPhase.create1USDMonthlyEvergreen();
- DateTime effectiveDate = new DateTime().minusDays(1);
- Currency currency = Currency.USD;
- BigDecimal fixedPrice = null;
- events.add(createMockBillingEvent(account, subscription, effectiveDate, plan, planPhase,
- fixedPrice, BigDecimal.ONE, currency, BillingPeriod.MONTHLY, 1,
- BillingModeType.IN_ADVANCE, "", 1L, SubscriptionTransitionType.CREATE));
+ final Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+ ((ZombieControl) subscription).addResult("getId", subscriptionId);
+ ((ZombieControl) subscription).addResult("getBundleId", new UUID(0L, 0L));
+ final BillingEventSet events = new MockBillingEventSet();
+ final Plan plan = MockPlan.createBicycleNoTrialEvergreen1USD();
+ final PlanPhase planPhase = MockPlanPhase.create1USDMonthlyEvergreen();
+ final DateTime effectiveDate = new DateTime().minusDays(1);
+ final Currency currency = Currency.USD;
+ final BigDecimal fixedPrice = null;
+ events.add(createMockBillingEvent(account, subscription, effectiveDate, plan, planPhase,
+ fixedPrice, BigDecimal.ONE, currency, BillingPeriod.MONTHLY, 1,
+ BillingModeType.IN_ADVANCE, "", 1L, SubscriptionTransitionType.CREATE));
- ((ZombieControl) billingApi).addResult("getBillingEventsForAccountAndUpdateAccountBCD", events);
+ ((ZombieControl) billingApi).addResult("getBillingEventsForAccountAndUpdateAccountBCD", events);
- DateTime target = new DateTime();
+ final DateTime target = new DateTime();
- InvoiceNotifier invoiceNotifier = new NullInvoiceNotifier();
- InvoiceDispatcher dispatcher = new InvoiceDispatcher(generator, accountUserApi, billingApi, invoiceDao,
- invoiceNotifier, locker, busService.getBus(), clock);
+ final InvoiceNotifier invoiceNotifier = new NullInvoiceNotifier();
+ final InvoiceDispatcher dispatcher = new InvoiceDispatcher(generator, accountUserApi, billingApi, invoiceDao,
+ invoiceNotifier, locker, busService.getBus(), clock);
- Invoice invoice = dispatcher.processAccount(accountId, target, true, context);
- Assert.assertNotNull(invoice);
+ Invoice invoice = dispatcher.processAccount(accountId, target, true, context);
+ Assert.assertNotNull(invoice);
- List<Invoice> invoices = invoiceDao.getInvoicesByAccount(accountId);
- Assert.assertEquals(invoices.size(), 0);
+ List<Invoice> invoices = invoiceDao.getInvoicesByAccount(accountId);
+ Assert.assertEquals(invoices.size(), 0);
- // Try it again to double check
- invoice = dispatcher.processAccount(accountId, target, true, context);
- Assert.assertNotNull(invoice);
+ // Try it again to double check
+ invoice = dispatcher.processAccount(accountId, target, true, context);
+ Assert.assertNotNull(invoice);
- invoices = invoiceDao.getInvoicesByAccount(accountId);
- Assert.assertEquals(invoices.size(), 0);
+ invoices = invoiceDao.getInvoicesByAccount(accountId);
+ Assert.assertEquals(invoices.size(), 0);
- // This time no dry run
- invoice = dispatcher.processAccount(accountId, target, false, context);
- Assert.assertNotNull(invoice);
+ // This time no dry run
+ invoice = dispatcher.processAccount(accountId, target, false, context);
+ Assert.assertNotNull(invoice);
- invoices = invoiceDao.getInvoicesByAccount(accountId);
- Assert.assertEquals(invoices.size(),1);
+ invoices = invoiceDao.getInvoicesByAccount(accountId);
+ Assert.assertEquals(invoices.size(), 1);
+
+ }
- }
-
//MDW add a test to cover when the account auto-invoice-off tag is present
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/ChargeBackTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/ChargeBackTests.java
index 8d5ac43..ce941b9 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/ChargeBackTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/ChargeBackTests.java
@@ -16,6 +16,15 @@
package com.ning.billing.invoice.tests;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.skife.jdbi.v2.IDBI;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.invoice.api.Invoice;
@@ -43,43 +52,33 @@ import com.ning.billing.util.tag.dao.MockTagDefinitionDao;
import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
-import org.skife.jdbi.v2.IDBI;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
@Test(groups = {"slow", "invoicing"})
public class ChargeBackTests {
- private final static BigDecimal FIFTEEN = new BigDecimal("15.00");
- private final static BigDecimal THIRTY = new BigDecimal("30.00");
- private final static BigDecimal ONE_MILLION = new BigDecimal("1000000.00");
+ private static final BigDecimal FIFTEEN = new BigDecimal("15.00");
+ private static final BigDecimal THIRTY = new BigDecimal("30.00");
+ private static final BigDecimal ONE_MILLION = new BigDecimal("1000000.00");
private InvoiceSqlDao invoiceSqlDao;
private InvoicePaymentApi invoicePaymentApi;
private CallContext context;
private final Clock clock = new ClockMock();
- private final static Currency CURRENCY = Currency.EUR;
+ private static final Currency CURRENCY = Currency.EUR;
@BeforeClass
public void setup() {
- MysqlTestingHelper helper = new MysqlTestingHelper();
- IDBI dbi = helper.getDBI();
+ final MysqlTestingHelper helper = new MysqlTestingHelper();
+ final IDBI dbi = helper.getDBI();
invoiceSqlDao = dbi.onDemand(InvoiceSqlDao.class);
invoiceSqlDao.test();
- NextBillingDatePoster nextBillingDatePoster = new MockNextBillingDatePoster();
+ final NextBillingDatePoster nextBillingDatePoster = new MockNextBillingDatePoster();
final TagDefinitionDao tagDefinitionDao = new MockTagDefinitionDao();
final TagDao tagDao = new MockTagDao();
final TagUserApi tagUserApi = new DefaultTagUserApi(tagDefinitionDao, tagDao);
- InvoiceDao invoiceDao = new DefaultInvoiceDao(dbi, nextBillingDatePoster, tagUserApi);
+ final InvoiceDao invoiceDao = new DefaultInvoiceDao(dbi, nextBillingDatePoster, tagUserApi);
invoicePaymentApi = new DefaultInvoicePaymentApi(invoiceDao);
context = new TestCallContext("Charge back tests");
@@ -87,34 +86,34 @@ public class ChargeBackTests {
@Test
public void testCompleteChargeBack() throws InvoiceApiException {
- Invoice invoice = createAndPersistInvoice(THIRTY);
- InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
+ final Invoice invoice = createAndPersistInvoice(THIRTY);
+ final InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
// create a full charge back
invoicePaymentApi.processChargeback(payment.getId(), THIRTY, context);
// check amount owed
- BigDecimal amount = invoicePaymentApi.getRemainingAmountPaid(payment.getId());
+ final BigDecimal amount = invoicePaymentApi.getRemainingAmountPaid(payment.getId());
assertTrue(amount.compareTo(BigDecimal.ZERO) == 0);
}
@Test
public void testPartialChargeBack() throws InvoiceApiException {
- Invoice invoice = createAndPersistInvoice(THIRTY);
- InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
+ final Invoice invoice = createAndPersistInvoice(THIRTY);
+ final InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
// create a partial charge back
invoicePaymentApi.processChargeback(payment.getId(), FIFTEEN, context);
// check amount owed
- BigDecimal amount = invoicePaymentApi.getRemainingAmountPaid(payment.getId());
+ final BigDecimal amount = invoicePaymentApi.getRemainingAmountPaid(payment.getId());
assertTrue(amount.compareTo(FIFTEEN) == 0);
}
@Test(expectedExceptions = InvoiceApiException.class)
public void testChargeBackLargerThanPaymentAmount() throws InvoiceApiException {
- Invoice invoice = createAndPersistInvoice(THIRTY);
- InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
+ final Invoice invoice = createAndPersistInvoice(THIRTY);
+ final InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
// create a large charge back
invoicePaymentApi.processChargeback(payment.getId(), ONE_MILLION, context);
@@ -122,8 +121,8 @@ public class ChargeBackTests {
@Test(expectedExceptions = InvoiceApiException.class)
public void testNegativeChargeBackAmount() throws InvoiceApiException {
- Invoice invoice = createAndPersistInvoice(THIRTY);
- InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
+ final Invoice invoice = createAndPersistInvoice(THIRTY);
+ final InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
// create a partial charge back
invoicePaymentApi.processChargeback(payment.getId(), BigDecimal.ONE.negate(), context);
@@ -131,9 +130,9 @@ public class ChargeBackTests {
@Test
public void testGetAccountIdFromPaymentIdHappyPath() throws InvoiceApiException {
- Invoice invoice = createAndPersistInvoice(THIRTY);
- InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
- UUID accountId = invoicePaymentApi.getAccountIdFromInvoicePaymentId(payment.getId());
+ final Invoice invoice = createAndPersistInvoice(THIRTY);
+ final InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
+ final UUID accountId = invoicePaymentApi.getAccountIdFromInvoicePaymentId(payment.getId());
assertEquals(accountId, invoice.getAccountId());
}
@@ -144,20 +143,20 @@ public class ChargeBackTests {
@Test
public void testGetChargeBacksByAccountIdWithEmptyReturnSet() throws InvoiceApiException {
- List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByAccountId(UUID.randomUUID());
+ final List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByAccountId(UUID.randomUUID());
assertNotNull(chargebacks);
assertEquals(chargebacks.size(), 0);
}
@Test
public void testGetChargeBacksByAccountIdHappyPath() throws InvoiceApiException {
- Invoice invoice = createAndPersistInvoice(THIRTY);
- InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
+ final Invoice invoice = createAndPersistInvoice(THIRTY);
+ final InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
// create a partial charge back
invoicePaymentApi.processChargeback(payment.getId(), FIFTEEN, context);
- List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByAccountId(invoice.getAccountId());
+ final List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByAccountId(invoice.getAccountId());
assertNotNull(chargebacks);
assertEquals(chargebacks.size(), 1);
assertEquals(chargebacks.get(0).getReversedInvoicePaymentId(), payment.getId());
@@ -165,30 +164,30 @@ public class ChargeBackTests {
@Test
public void testGetChargeBacksByPaymentAttemptIdWithEmptyReturnSet() throws InvoiceApiException {
- List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByPaymentAttemptId(UUID.randomUUID());
+ final List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByPaymentAttemptId(UUID.randomUUID());
assertNotNull(chargebacks);
assertEquals(chargebacks.size(), 0);
}
@Test
public void testGetChargeBacksByInvoicePaymentIdHappyPath() throws InvoiceApiException {
- Invoice invoice = createAndPersistInvoice(THIRTY);
- InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
+ final Invoice invoice = createAndPersistInvoice(THIRTY);
+ final InvoicePayment payment = createAndPersistPayment(invoice.getId(), THIRTY);
// create a partial charge back
invoicePaymentApi.processChargeback(payment.getId(), FIFTEEN, context);
- List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByPaymentAttemptId(payment.getPaymentAttemptId());
+ final List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByPaymentAttemptId(payment.getPaymentAttemptId());
assertNotNull(chargebacks);
assertEquals(chargebacks.size(), 1);
assertEquals(chargebacks.get(0).getReversedInvoicePaymentId(), payment.getId());
}
- private Invoice createAndPersistInvoice(BigDecimal amount) {
- Invoice invoice = BrainDeadProxyFactory.createBrainDeadProxyFor(Invoice.class);
- UUID invoiceId = UUID.randomUUID();
- UUID accountId = UUID.randomUUID();
- ZombieControl zombie = (ZombieControl) invoice;
+ private Invoice createAndPersistInvoice(final BigDecimal amount) {
+ final Invoice invoice = BrainDeadProxyFactory.createBrainDeadProxyFor(Invoice.class);
+ final UUID invoiceId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
+ final ZombieControl zombie = (ZombieControl) invoice;
zombie.addResult("getId", invoiceId);
zombie.addResult("getAccountId", accountId);
zombie.addResult("getInvoiceDate", clock.getUTCNow());
@@ -196,7 +195,7 @@ public class ChargeBackTests {
zombie.addResult("getCurrency", CURRENCY);
zombie.addResult("isMigrationInvoice", false);
- List<InvoiceItem> items = new ArrayList<InvoiceItem>();
+ final List<InvoiceItem> items = new ArrayList<InvoiceItem>();
items.add(createInvoiceItem(invoiceId, accountId, amount));
zombie.addResult("getInvoiceItems", items);
@@ -205,14 +204,14 @@ public class ChargeBackTests {
return invoice;
}
- private InvoiceItem createInvoiceItem(UUID invoiceId, UUID accountId, BigDecimal amount) {
+ private InvoiceItem createInvoiceItem(final UUID invoiceId, final UUID accountId, final BigDecimal amount) {
return new FixedPriceInvoiceItem(invoiceId, accountId, UUID.randomUUID(), UUID.randomUUID(),
- "charge back test", "charge back phase", clock.getUTCNow(), clock.getUTCNow(), amount, CURRENCY);
+ "charge back test", "charge back phase", clock.getUTCNow(), clock.getUTCNow(), amount, CURRENCY);
}
- private InvoicePayment createAndPersistPayment(UUID invoiceId, BigDecimal amount) {
- InvoicePayment payment = BrainDeadProxyFactory.createBrainDeadProxyFor(InvoicePayment.class);
- ZombieControl zombie = (ZombieControl) payment;
+ private InvoicePayment createAndPersistPayment(final UUID invoiceId, final BigDecimal amount) {
+ final InvoicePayment payment = BrainDeadProxyFactory.createBrainDeadProxyFor(InvoicePayment.class);
+ final ZombieControl zombie = (ZombieControl) payment;
zombie.addResult("getId", UUID.randomUUID());
zombie.addResult("getInvoiceId", invoiceId);
zombie.addResult("getPaymentAttemptId", UUID.randomUUID());
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
index 8f381bc..7441173 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
@@ -16,11 +16,7 @@
package com.ning.billing.invoice.tests;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
+import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
@@ -29,8 +25,6 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import javax.annotation.Nullable;
-
import org.joda.time.DateTime;
import org.testng.annotations.Test;
@@ -54,8 +48,8 @@ import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.model.CreditInvoiceItem;
-import com.ning.billing.invoice.model.DefaultInvoiceGenerator;
import com.ning.billing.invoice.model.DefaultInvoice;
+import com.ning.billing.invoice.model.DefaultInvoiceGenerator;
import com.ning.billing.invoice.model.DefaultInvoicePayment;
import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.invoice.model.InvoiceGenerator;
@@ -66,6 +60,11 @@ import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.clock.DefaultClock;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
@Test(groups = {"fast", "invoicing", "invoiceGenerator"})
public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
private final InvoiceGenerator generator;
@@ -73,8 +72,8 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
public DefaultInvoiceGeneratorTests() {
super();
- Clock clock = new DefaultClock();
- InvoiceConfig invoiceConfig = new InvoiceConfig() {
+ final Clock clock = new DefaultClock();
+ final InvoiceConfig invoiceConfig = new InvoiceConfig() {
@Override
public long getSleepTimeMs() {
throw new UnsupportedOperationException();
@@ -95,39 +94,39 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testWithNullEventSetAndNullInvoiceSet() throws InvoiceApiException {
- UUID accountId = UUID.randomUUID();
- Invoice invoice = generator.generateInvoice(accountId, null, null, new DateTime(), Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = generator.generateInvoice(accountId, null, null, new DateTime(), Currency.USD);
assertNull(invoice);
}
@Test
public void testWithEmptyEventSet() throws InvoiceApiException {
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
- UUID accountId = UUID.randomUUID();
- Invoice invoice = generator.generateInvoice(accountId, events, null, new DateTime(), Currency.USD);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = generator.generateInvoice(accountId, events, null, new DateTime(), Currency.USD);
assertNull(invoice);
}
@Test
public void testWithSingleMonthlyEvent() throws InvoiceApiException, CatalogApiException {
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
- Subscription sub = createZombieSubscription();
- DateTime startDate = buildDateTime(2011, 9, 1);
+ final Subscription sub = createZombieSubscription();
+ final DateTime startDate = buildDateTime(2011, 9, 1);
- Plan plan = new MockPlan();
- BigDecimal rate1 = TEN;
- PlanPhase phase = createMockMonthlyPlanPhase(rate1);
+ final Plan plan = new MockPlan();
+ final BigDecimal rate1 = TEN;
+ final PlanPhase phase = createMockMonthlyPlanPhase(rate1);
- BillingEvent event = createBillingEvent(sub.getId(), startDate, plan, phase, 1);
+ final BillingEvent event = createBillingEvent(sub.getId(), startDate, plan, phase, 1);
events.add(event);
- DateTime targetDate = buildDateTime(2011, 10, 3);
- UUID accountId = UUID.randomUUID();
- Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
+ final DateTime targetDate = buildDateTime(2011, 10, 3);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
assertNotNull(invoice);
assertEquals(invoice.getNumberOfItems(), 2);
@@ -139,8 +138,8 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
return createZombieSubscription(UUID.randomUUID());
}
- private Subscription createZombieSubscription(UUID subscriptionId) {
- Subscription sub = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+ private Subscription createZombieSubscription(final UUID subscriptionId) {
+ final Subscription sub = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
((ZombieControl) sub).addResult("getId", subscriptionId);
((ZombieControl) sub).addResult("getBundleId", UUID.randomUUID());
@@ -149,53 +148,53 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testWithSingleMonthlyEventWithLeadingProRation() throws InvoiceApiException, CatalogApiException {
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
- Subscription sub = createZombieSubscription();
- DateTime startDate = buildDateTime(2011, 9, 1);
+ final Subscription sub = createZombieSubscription();
+ final DateTime startDate = buildDateTime(2011, 9, 1);
- Plan plan = new MockPlan();
- BigDecimal rate = TEN;
- PlanPhase phase = createMockMonthlyPlanPhase(rate);
- BillingEvent event = createBillingEvent(sub.getId(), startDate, plan, phase, 15);
+ final Plan plan = new MockPlan();
+ final BigDecimal rate = TEN;
+ final PlanPhase phase = createMockMonthlyPlanPhase(rate);
+ final BillingEvent event = createBillingEvent(sub.getId(), startDate, plan, phase, 15);
events.add(event);
- DateTime targetDate = buildDateTime(2011, 10, 3);
- UUID accountId = UUID.randomUUID();
- Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
+ final DateTime targetDate = buildDateTime(2011, 10, 3);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
assertNotNull(invoice);
assertEquals(invoice.getNumberOfItems(), 2);
- BigDecimal expectedNumberOfBillingCycles;
+ final BigDecimal expectedNumberOfBillingCycles;
expectedNumberOfBillingCycles = ONE.add(FOURTEEN.divide(THIRTY_ONE, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD));
- BigDecimal expectedAmount = expectedNumberOfBillingCycles.multiply(rate).setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedAmount = expectedNumberOfBillingCycles.multiply(rate).setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD);
assertEquals(invoice.getBalance(), expectedAmount);
}
@Test
public void testTwoMonthlySubscriptionsWithAlignedBillingDates() throws InvoiceApiException, CatalogApiException {
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
- Plan plan1 = new MockPlan();
- BigDecimal rate1 = FIVE;
- PlanPhase phase1 = createMockMonthlyPlanPhase(rate1);
+ final Plan plan1 = new MockPlan();
+ final BigDecimal rate1 = FIVE;
+ final PlanPhase phase1 = createMockMonthlyPlanPhase(rate1);
- Plan plan2 = new MockPlan();
- BigDecimal rate2 = TEN;
- PlanPhase phase2 = createMockMonthlyPlanPhase(rate2);
+ final Plan plan2 = new MockPlan();
+ final BigDecimal rate2 = TEN;
+ final PlanPhase phase2 = createMockMonthlyPlanPhase(rate2);
- Subscription sub = createZombieSubscription();
+ final Subscription sub = createZombieSubscription();
- BillingEvent event1 = createBillingEvent(sub.getId(), buildDateTime(2011, 9, 1), plan1, phase1, 1);
+ final BillingEvent event1 = createBillingEvent(sub.getId(), buildDateTime(2011, 9, 1), plan1, phase1, 1);
events.add(event1);
- BillingEvent event2 = createBillingEvent(sub.getId(), buildDateTime(2011, 10, 1), plan2, phase2, 1);
+ final BillingEvent event2 = createBillingEvent(sub.getId(), buildDateTime(2011, 10, 1), plan2, phase2, 1);
events.add(event2);
- DateTime targetDate = buildDateTime(2011, 10, 3);
- UUID accountId = UUID.randomUUID();
- Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
+ final DateTime targetDate = buildDateTime(2011, 10, 3);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
assertNotNull(invoice);
assertEquals(invoice.getNumberOfItems(), 2);
@@ -204,32 +203,32 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testOnePlan_TwoMonthlyPhases_ChangeImmediate() throws InvoiceApiException, CatalogApiException {
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
- Plan plan1 = new MockPlan();
- BigDecimal rate1 = FIVE;
- PlanPhase phase1 = createMockMonthlyPlanPhase(rate1);
+ final Plan plan1 = new MockPlan();
+ final BigDecimal rate1 = FIVE;
+ final PlanPhase phase1 = createMockMonthlyPlanPhase(rate1);
- Subscription sub = createZombieSubscription();
- BillingEvent event1 = createBillingEvent(sub.getId(), buildDateTime(2011, 9, 1), plan1,phase1, 1);
+ final Subscription sub = createZombieSubscription();
+ final BillingEvent event1 = createBillingEvent(sub.getId(), buildDateTime(2011, 9, 1), plan1, phase1, 1);
events.add(event1);
- BigDecimal rate2 = TEN;
- PlanPhase phase2 = createMockMonthlyPlanPhase(rate2);
- BillingEvent event2 = createBillingEvent(sub.getId(), buildDateTime(2011, 10, 15), plan1, phase2, 15);
+ final BigDecimal rate2 = TEN;
+ final PlanPhase phase2 = createMockMonthlyPlanPhase(rate2);
+ final BillingEvent event2 = createBillingEvent(sub.getId(), buildDateTime(2011, 10, 15), plan1, phase2, 15);
events.add(event2);
- DateTime targetDate = buildDateTime(2011, 12, 3);
- UUID accountId = UUID.randomUUID();
- Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
+ final DateTime targetDate = buildDateTime(2011, 12, 3);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
assertNotNull(invoice);
assertEquals(invoice.getNumberOfItems(), 4);
- BigDecimal numberOfCyclesEvent1;
+ final BigDecimal numberOfCyclesEvent1;
numberOfCyclesEvent1 = ONE.add(FOURTEEN.divide(THIRTY_ONE, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD));
- BigDecimal numberOfCyclesEvent2 = TWO;
+ final BigDecimal numberOfCyclesEvent2 = TWO;
BigDecimal expectedValue;
expectedValue = numberOfCyclesEvent1.multiply(rate1);
@@ -241,29 +240,29 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testOnePlan_ThreeMonthlyPhases_ChangeEOT() throws InvoiceApiException, CatalogApiException {
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
- Plan plan1 = new MockPlan();
- BigDecimal rate1 = FIVE;
- PlanPhase phase1 = createMockMonthlyPlanPhase(rate1);
+ final Plan plan1 = new MockPlan();
+ final BigDecimal rate1 = FIVE;
+ final PlanPhase phase1 = createMockMonthlyPlanPhase(rate1);
- Subscription sub = createZombieSubscription();
- BillingEvent event1 = createBillingEvent(sub.getId(), buildDateTime(2011, 9, 1), plan1, phase1, 1);
+ final Subscription sub = createZombieSubscription();
+ final BillingEvent event1 = createBillingEvent(sub.getId(), buildDateTime(2011, 9, 1), plan1, phase1, 1);
events.add(event1);
- BigDecimal rate2 = TEN;
- PlanPhase phase2 = createMockMonthlyPlanPhase(rate2);
- BillingEvent event2 = createBillingEvent(sub.getId(), buildDateTime(2011, 10, 1), plan1, phase2, 1);
+ final BigDecimal rate2 = TEN;
+ final PlanPhase phase2 = createMockMonthlyPlanPhase(rate2);
+ final BillingEvent event2 = createBillingEvent(sub.getId(), buildDateTime(2011, 10, 1), plan1, phase2, 1);
events.add(event2);
- BigDecimal rate3 = THIRTY;
- PlanPhase phase3 = createMockMonthlyPlanPhase(rate3);
- BillingEvent event3 = createBillingEvent(sub.getId(), buildDateTime(2011, 11, 1), plan1, phase3, 1);
+ final BigDecimal rate3 = THIRTY;
+ final PlanPhase phase3 = createMockMonthlyPlanPhase(rate3);
+ final BillingEvent event3 = createBillingEvent(sub.getId(), buildDateTime(2011, 11, 1), plan1, phase3, 1);
events.add(event3);
- DateTime targetDate = buildDateTime(2011, 12, 3);
- UUID accountId = UUID.randomUUID();
- Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
+ final DateTime targetDate = buildDateTime(2011, 12, 3);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
assertNotNull(invoice);
assertEquals(invoice.getNumberOfItems(), 4);
@@ -272,26 +271,26 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testSingleEventWithExistingInvoice() throws InvoiceApiException, CatalogApiException {
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
- Subscription sub = createZombieSubscription();
- DateTime startDate = buildDateTime(2011, 9, 1);
+ final Subscription sub = createZombieSubscription();
+ final DateTime startDate = buildDateTime(2011, 9, 1);
- Plan plan1 = new MockPlan();
- BigDecimal rate = FIVE;
- PlanPhase phase1 = createMockMonthlyPlanPhase(rate);
+ final Plan plan1 = new MockPlan();
+ final BigDecimal rate = FIVE;
+ final PlanPhase phase1 = createMockMonthlyPlanPhase(rate);
- BillingEvent event1 = createBillingEvent(sub.getId(), startDate, plan1, phase1, 1);
+ final BillingEvent event1 = createBillingEvent(sub.getId(), startDate, plan1, phase1, 1);
events.add(event1);
DateTime targetDate = buildDateTime(2011, 12, 1);
- UUID accountId = UUID.randomUUID();
- Invoice invoice1 = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
- List<Invoice> existingInvoices = new ArrayList<Invoice>();
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
+ final List<Invoice> existingInvoices = new ArrayList<Invoice>();
existingInvoices.add(invoice1);
targetDate = buildDateTime(2011, 12, 3);
- Invoice invoice2 = generator.generateInvoice(accountId, events, existingInvoices, targetDate, Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, existingInvoices, targetDate, Currency.USD);
assertNull(invoice2);
}
@@ -304,52 +303,52 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
// plan 3: change of term from monthly (BCD = 20) to annual (BCD = 31; immediate)
// plan 4: change of plan, effective EOT, BCD = 7 (covers change of plan)
// plan 5: addon to plan 2, with bill cycle alignment to plan; immediate cancellation
- UUID accountId = UUID.randomUUID();
- UUID subscriptionId1 = UUID.randomUUID();
- UUID subscriptionId2 = UUID.randomUUID();
- UUID subscriptionId3 = UUID.randomUUID();
- UUID subscriptionId4 = UUID.randomUUID();
- UUID subscriptionId5 = UUID.randomUUID();
-
- Plan plan1 = new MockPlan("Change from trial to discount with immediate cancellation");
- PlanPhase plan1Phase1 = createMockMonthlyPlanPhase(EIGHT, PhaseType.TRIAL);
- PlanPhase plan1Phase2 = createMockMonthlyPlanPhase(TWELVE, PhaseType.DISCOUNT);
- PlanPhase plan1Phase3 = createMockMonthlyPlanPhase();
- DateTime plan1StartDate = buildDateTime(2011, 1, 5);
- DateTime plan1PhaseChangeDate = buildDateTime(2011, 4, 5);
- DateTime plan1CancelDate = buildDateTime(2011, 4, 29);
-
- Plan plan2 = new MockPlan("Change phase from trial to discount to evergreen");
- PlanPhase plan2Phase1 = createMockMonthlyPlanPhase(TWENTY, PhaseType.TRIAL);
- PlanPhase plan2Phase2 = createMockMonthlyPlanPhase(THIRTY, PhaseType.DISCOUNT);
- PlanPhase plan2Phase3 = createMockMonthlyPlanPhase(FORTY, PhaseType.EVERGREEN);
- DateTime plan2StartDate = buildDateTime(2011, 3, 10);
- DateTime plan2PhaseChangeToDiscountDate = buildDateTime(2011, 6, 10);
- DateTime plan2PhaseChangeToEvergreenDate = buildDateTime(2011, 9, 10);
-
- Plan plan3 = new MockPlan("Upgrade with immediate change, BCD = 31");
- PlanPhase plan3Phase1 = createMockMonthlyPlanPhase(TEN, PhaseType.EVERGREEN);
- PlanPhase plan3Phase2 = createMockAnnualPlanPhase(ONE_HUNDRED, PhaseType.EVERGREEN);
- DateTime plan3StartDate = buildDateTime(2011, 5, 20);
- DateTime plan3UpgradeToAnnualDate = buildDateTime(2011, 7, 31);
-
- Plan plan4a = new MockPlan("Plan change effective EOT; plan 1");
- Plan plan4b = new MockPlan("Plan change effective EOT; plan 2");
- PlanPhase plan4aPhase1 = createMockMonthlyPlanPhase(FIFTEEN);
- PlanPhase plan4bPhase1 = createMockMonthlyPlanPhase(TWENTY_FOUR);
-
- DateTime plan4StartDate = buildDateTime(2011, 6, 7);
- DateTime plan4ChangeOfPlanDate = buildDateTime(2011, 8, 7);
-
- Plan plan5 = new MockPlan("Add-on");
- PlanPhase plan5Phase1 = createMockMonthlyPlanPhase(TWENTY);
- PlanPhase plan5Phase2 = createMockMonthlyPlanPhase();
- DateTime plan5StartDate = buildDateTime(2011, 6, 21);
- DateTime plan5CancelDate = buildDateTime(2011, 10, 7);
+ final UUID accountId = UUID.randomUUID();
+ final UUID subscriptionId1 = UUID.randomUUID();
+ final UUID subscriptionId2 = UUID.randomUUID();
+ final UUID subscriptionId3 = UUID.randomUUID();
+ final UUID subscriptionId4 = UUID.randomUUID();
+ final UUID subscriptionId5 = UUID.randomUUID();
+
+ final Plan plan1 = new MockPlan("Change from trial to discount with immediate cancellation");
+ final PlanPhase plan1Phase1 = createMockMonthlyPlanPhase(EIGHT, PhaseType.TRIAL);
+ final PlanPhase plan1Phase2 = createMockMonthlyPlanPhase(TWELVE, PhaseType.DISCOUNT);
+ final PlanPhase plan1Phase3 = createMockMonthlyPlanPhase();
+ final DateTime plan1StartDate = buildDateTime(2011, 1, 5);
+ final DateTime plan1PhaseChangeDate = buildDateTime(2011, 4, 5);
+ final DateTime plan1CancelDate = buildDateTime(2011, 4, 29);
+
+ final Plan plan2 = new MockPlan("Change phase from trial to discount to evergreen");
+ final PlanPhase plan2Phase1 = createMockMonthlyPlanPhase(TWENTY, PhaseType.TRIAL);
+ final PlanPhase plan2Phase2 = createMockMonthlyPlanPhase(THIRTY, PhaseType.DISCOUNT);
+ final PlanPhase plan2Phase3 = createMockMonthlyPlanPhase(FORTY, PhaseType.EVERGREEN);
+ final DateTime plan2StartDate = buildDateTime(2011, 3, 10);
+ final DateTime plan2PhaseChangeToDiscountDate = buildDateTime(2011, 6, 10);
+ final DateTime plan2PhaseChangeToEvergreenDate = buildDateTime(2011, 9, 10);
+
+ final Plan plan3 = new MockPlan("Upgrade with immediate change, BCD = 31");
+ final PlanPhase plan3Phase1 = createMockMonthlyPlanPhase(TEN, PhaseType.EVERGREEN);
+ final PlanPhase plan3Phase2 = createMockAnnualPlanPhase(ONE_HUNDRED, PhaseType.EVERGREEN);
+ final DateTime plan3StartDate = buildDateTime(2011, 5, 20);
+ final DateTime plan3UpgradeToAnnualDate = buildDateTime(2011, 7, 31);
+
+ final Plan plan4a = new MockPlan("Plan change effective EOT; plan 1");
+ final Plan plan4b = new MockPlan("Plan change effective EOT; plan 2");
+ final PlanPhase plan4aPhase1 = createMockMonthlyPlanPhase(FIFTEEN);
+ final PlanPhase plan4bPhase1 = createMockMonthlyPlanPhase(TWENTY_FOUR);
+
+ final DateTime plan4StartDate = buildDateTime(2011, 6, 7);
+ final DateTime plan4ChangeOfPlanDate = buildDateTime(2011, 8, 7);
+
+ final Plan plan5 = new MockPlan("Add-on");
+ final PlanPhase plan5Phase1 = createMockMonthlyPlanPhase(TWENTY);
+ final PlanPhase plan5Phase2 = createMockMonthlyPlanPhase();
+ final DateTime plan5StartDate = buildDateTime(2011, 6, 21);
+ final DateTime plan5CancelDate = buildDateTime(2011, 10, 7);
BigDecimal expectedAmount;
- List<Invoice> invoices = new ArrayList<Invoice>();
- BillingEventSet events = new MockBillingEventSet();
+ final List<Invoice> invoices = new ArrayList<Invoice>();
+ final BillingEventSet events = new MockBillingEventSet();
// on 1/5/2011, create subscription 1 (trial)
events.add(createBillingEvent(subscriptionId1, plan1StartDate, plan1, plan1Phase1, 5));
@@ -358,7 +357,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
// on 2/5/2011, invoice subscription 1 (trial)
expectedAmount = EIGHT;
- testInvoiceGeneration(accountId, events, invoices, buildDateTime(2011, 2, 5) , 1, expectedAmount);
+ testInvoiceGeneration(accountId, events, invoices, buildDateTime(2011, 2, 5), 1, expectedAmount);
// on 3/5/2011, invoice subscription 1 (trial)
expectedAmount = EIGHT;
@@ -454,33 +453,33 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
testInvoiceGeneration(accountId, events, invoices, plan5CancelDate, 3, expectedAmount);
// on 10/10/2011, invoice plan 2 (evergreen)
- expectedAmount = FORTY ;
+ expectedAmount = FORTY;
testInvoiceGeneration(accountId, events, invoices, buildDateTime(2011, 10, 10), 1, expectedAmount);
}
@Test
public void testZeroDollarEvents() throws InvoiceApiException, CatalogApiException {
- Plan plan = new MockPlan();
- PlanPhase planPhase = createMockMonthlyPlanPhase(ZERO);
- BillingEventSet events = new MockBillingEventSet();
- DateTime targetDate = buildDateTime(2011, 1, 1);
+ final Plan plan = new MockPlan();
+ final PlanPhase planPhase = createMockMonthlyPlanPhase(ZERO);
+ final BillingEventSet events = new MockBillingEventSet();
+ final DateTime targetDate = buildDateTime(2011, 1, 1);
events.add(createBillingEvent(UUID.randomUUID(), targetDate, plan, planPhase, 1));
- Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate, Currency.USD);
+ final Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate, Currency.USD);
assertEquals(invoice.getNumberOfItems(), 1);
}
@Test
public void testEndDateIsCorrect() throws InvoiceApiException, CatalogApiException {
- Plan plan = new MockPlan();
- PlanPhase planPhase = createMockMonthlyPlanPhase(ZERO);
- BillingEventSet events = new MockBillingEventSet();
- DateTime targetDate = new DateTime();
+ final Plan plan = new MockPlan();
+ final PlanPhase planPhase = createMockMonthlyPlanPhase(ZERO);
+ final BillingEventSet events = new MockBillingEventSet();
+ final DateTime targetDate = new DateTime();
events.add(createBillingEvent(UUID.randomUUID(), targetDate, plan, planPhase, targetDate.getDayOfMonth()));
- Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate, Currency.USD);
- RecurringInvoiceItem item = (RecurringInvoiceItem) invoice.getInvoiceItems().get(0);
+ final Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, targetDate, Currency.USD);
+ final RecurringInvoiceItem item = (RecurringInvoiceItem) invoice.getInvoiceItems().get(0);
// end date of the invoice item should be equal to exactly one month later
assertEquals(item.getEndDate().compareTo(targetDate.plusMonths(1)), 0);
@@ -488,77 +487,77 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testFixedPriceLifeCycle() throws InvoiceApiException {
- UUID accountId = UUID.randomUUID();
- Subscription subscription = createZombieSubscription();
+ final UUID accountId = UUID.randomUUID();
+ final Subscription subscription = createZombieSubscription();
- Plan plan = new MockPlan("plan 1");
- MockInternationalPrice zeroPrice = new MockInternationalPrice(new DefaultPrice(ZERO, Currency.USD));
- MockInternationalPrice cheapPrice = new MockInternationalPrice(new DefaultPrice(ONE, Currency.USD));
+ final Plan plan = new MockPlan("plan 1");
+ final MockInternationalPrice zeroPrice = new MockInternationalPrice(new DefaultPrice(ZERO, Currency.USD));
+ final MockInternationalPrice cheapPrice = new MockInternationalPrice(new DefaultPrice(ONE, Currency.USD));
- PlanPhase phase1 = new MockPlanPhase(null, zeroPrice, BillingPeriod.NO_BILLING_PERIOD, PhaseType.TRIAL);
- PlanPhase phase2 = new MockPlanPhase(cheapPrice, null, BillingPeriod.MONTHLY, PhaseType.DISCOUNT);
+ final PlanPhase phase1 = new MockPlanPhase(null, zeroPrice, BillingPeriod.NO_BILLING_PERIOD, PhaseType.TRIAL);
+ final PlanPhase phase2 = new MockPlanPhase(cheapPrice, null, BillingPeriod.MONTHLY, PhaseType.DISCOUNT);
- DateTime changeDate = new DateTime("2012-04-1T00:00:00.000-08:00");
+ final DateTime changeDate = new DateTime("2012-04-1T00:00:00.000-08:00");
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
- BillingEvent event1 = createMockBillingEvent(null, subscription, new DateTime("2012-01-1T00:00:00.000-08:00"),
- plan, phase1,
- ZERO, null, Currency.USD, BillingPeriod.NO_BILLING_PERIOD, 1,
- BillingModeType.IN_ADVANCE, "Test Event 1", 1L,
- SubscriptionTransitionType.CREATE);
+ final BillingEvent event1 = createMockBillingEvent(null, subscription, new DateTime("2012-01-1T00:00:00.000-08:00"),
+ plan, phase1,
+ ZERO, null, Currency.USD, BillingPeriod.NO_BILLING_PERIOD, 1,
+ BillingModeType.IN_ADVANCE, "Test Event 1", 1L,
+ SubscriptionTransitionType.CREATE);
- BillingEvent event2 = createMockBillingEvent(null, subscription, changeDate,
- plan, phase2,
- ZERO, null, Currency.USD, BillingPeriod.NO_BILLING_PERIOD, 1,
- BillingModeType.IN_ADVANCE, "Test Event 2", 2L,
- SubscriptionTransitionType.PHASE);
+ final BillingEvent event2 = createMockBillingEvent(null, subscription, changeDate,
+ plan, phase2,
+ ZERO, null, Currency.USD, BillingPeriod.NO_BILLING_PERIOD, 1,
+ BillingModeType.IN_ADVANCE, "Test Event 2", 2L,
+ SubscriptionTransitionType.PHASE);
events.add(event2);
events.add(event1);
- Invoice invoice1 = generator.generateInvoice(accountId, events, null, new DateTime("2012-02-01T00:01:00.000-08:00"), Currency.USD);
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, null, new DateTime("2012-02-01T00:01:00.000-08:00"), Currency.USD);
assertNotNull(invoice1);
assertEquals(invoice1.getNumberOfItems(), 1);
- List<Invoice> invoiceList = new ArrayList<Invoice>();
+ final List<Invoice> invoiceList = new ArrayList<Invoice>();
invoiceList.add(invoice1);
- Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, new DateTime("2012-04-05T00:01:00.000-08:00"), Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, new DateTime("2012-04-05T00:01:00.000-08:00"), Currency.USD);
assertNotNull(invoice2);
assertEquals(invoice2.getNumberOfItems(), 1);
- FixedPriceInvoiceItem item = (FixedPriceInvoiceItem) invoice2.getInvoiceItems().get(0);
+ final FixedPriceInvoiceItem item = (FixedPriceInvoiceItem) invoice2.getInvoiceItems().get(0);
assertEquals(item.getStartDate().compareTo(changeDate), 0);
- }
+ }
@Test
public void testMixedModeLifeCycle() throws InvoiceApiException, CatalogApiException {
// create a subscription with a fixed price and recurring price
- Plan plan1 = new MockPlan();
- BigDecimal monthlyRate = FIVE;
- BigDecimal fixedCost = TEN;
- PlanPhase phase1 = createMockMonthlyPlanPhase(monthlyRate, fixedCost, PhaseType.TRIAL);
+ final Plan plan1 = new MockPlan();
+ final BigDecimal monthlyRate = FIVE;
+ final BigDecimal fixedCost = TEN;
+ final PlanPhase phase1 = createMockMonthlyPlanPhase(monthlyRate, fixedCost, PhaseType.TRIAL);
- BillingEventSet events = new MockBillingEventSet();
- UUID subscriptionId = UUID.randomUUID();
- UUID accountId = UUID.randomUUID();
+ final BillingEventSet events = new MockBillingEventSet();
+ final UUID subscriptionId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
- DateTime startDate = new DateTime(2011, 1, 1, 3, 40, 27, 0);
- BillingEvent event1 = createBillingEvent(subscriptionId, startDate, plan1, phase1, 1);
+ final DateTime startDate = new DateTime(2011, 1, 1, 3, 40, 27, 0);
+ final BillingEvent event1 = createBillingEvent(subscriptionId, startDate, plan1, phase1, 1);
events.add(event1);
// ensure both components are invoiced
- Invoice invoice1 = generator.generateInvoice(accountId, events, null, startDate, Currency.USD);
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, null, startDate, Currency.USD);
assertNotNull(invoice1);
assertEquals(invoice1.getNumberOfItems(), 2);
assertEquals(invoice1.getBalance(), FIFTEEN);
- List<Invoice> invoiceList = new ArrayList<Invoice>();
+ final List<Invoice> invoiceList = new ArrayList<Invoice>();
invoiceList.add(invoice1);
// move forward in time one billing period
- DateTime currentDate = startDate.plusMonths(1);
+ final DateTime currentDate = startDate.plusMonths(1);
// ensure that only the recurring price is invoiced
- Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, currentDate, Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, currentDate, Currency.USD);
assertNotNull(invoice2);
assertEquals(invoice2.getNumberOfItems(), 1);
assertEquals(invoice2.getBalance(), FIVE);
@@ -567,36 +566,36 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testFixedModePlanChange() throws InvoiceApiException, CatalogApiException {
// create a subscription with a fixed price and recurring price
- Plan plan1 = new MockPlan();
- BigDecimal fixedCost1 = TEN;
- BigDecimal fixedCost2 = TWENTY;
- PlanPhase phase1 = createMockMonthlyPlanPhase(null, fixedCost1, PhaseType.TRIAL);
- PlanPhase phase2 = createMockMonthlyPlanPhase(null, fixedCost2, PhaseType.EVERGREEN);
-
- BillingEventSet events = new MockBillingEventSet();
- UUID subscriptionId = UUID.randomUUID();
- UUID accountId = UUID.randomUUID();
-
- DateTime startDate = new DateTime(2011, 1, 1, 3, 40, 27, 0);
- BillingEvent event1 = createBillingEvent(subscriptionId, startDate, plan1, phase1, 1);
+ final Plan plan1 = new MockPlan();
+ final BigDecimal fixedCost1 = TEN;
+ final BigDecimal fixedCost2 = TWENTY;
+ final PlanPhase phase1 = createMockMonthlyPlanPhase(null, fixedCost1, PhaseType.TRIAL);
+ final PlanPhase phase2 = createMockMonthlyPlanPhase(null, fixedCost2, PhaseType.EVERGREEN);
+
+ final BillingEventSet events = new MockBillingEventSet();
+ final UUID subscriptionId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
+
+ final DateTime startDate = new DateTime(2011, 1, 1, 3, 40, 27, 0);
+ final BillingEvent event1 = createBillingEvent(subscriptionId, startDate, plan1, phase1, 1);
events.add(event1);
// ensure that a single invoice item is generated for the fixed cost
- Invoice invoice1 = generator.generateInvoice(accountId, events, null, startDate, Currency.USD);
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, null, startDate, Currency.USD);
assertNotNull(invoice1);
assertEquals(invoice1.getNumberOfItems(), 1);
assertEquals(invoice1.getBalance(), fixedCost1);
- List<Invoice> invoiceList = new ArrayList<Invoice>();
+ final List<Invoice> invoiceList = new ArrayList<Invoice>();
invoiceList.add(invoice1);
// move forward in time one billing period
- DateTime phaseChangeDate = startDate.plusMonths(1);
- BillingEvent event2 = createBillingEvent(subscriptionId, phaseChangeDate, plan1, phase2, 1);
+ final DateTime phaseChangeDate = startDate.plusMonths(1);
+ final BillingEvent event2 = createBillingEvent(subscriptionId, phaseChangeDate, plan1, phase2, 1);
events.add(event2);
// ensure that a single invoice item is generated for the fixed cost
- Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, phaseChangeDate, Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, phaseChangeDate, Currency.USD);
assertNotNull(invoice2);
assertEquals(invoice2.getNumberOfItems(), 1);
assertEquals(invoice2.getBalance(), fixedCost2);
@@ -604,39 +603,39 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testInvoiceGenerationFailureScenario() throws InvoiceApiException, CatalogApiException {
- BillingEventSet events = new MockBillingEventSet();
- UUID subscriptionId = UUID.randomUUID();
- UUID accountId = UUID.randomUUID();
+ final BillingEventSet events = new MockBillingEventSet();
+ final UUID subscriptionId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
final int BILL_CYCLE_DAY = 15;
// create subscription with a zero-dollar trial, a monthly discount period and a monthly evergreen
- Plan plan1 = new MockPlan();
- PlanPhase phase1 = createMockMonthlyPlanPhase(null, ZERO, PhaseType.TRIAL);
+ final Plan plan1 = new MockPlan();
+ final PlanPhase phase1 = createMockMonthlyPlanPhase(null, ZERO, PhaseType.TRIAL);
final BigDecimal DISCOUNT_PRICE = new BigDecimal("9.95");
- PlanPhase phase2 = createMockMonthlyPlanPhase(DISCOUNT_PRICE, null, PhaseType.DISCOUNT);
- PlanPhase phase3 = createMockMonthlyPlanPhase(new BigDecimal("19.95"), null, PhaseType.EVERGREEN);
+ final PlanPhase phase2 = createMockMonthlyPlanPhase(DISCOUNT_PRICE, null, PhaseType.DISCOUNT);
+ final PlanPhase phase3 = createMockMonthlyPlanPhase(new BigDecimal("19.95"), null, PhaseType.EVERGREEN);
// set up billing events
- DateTime creationDate = new DateTime(2012, 3, 6, 21, 36, 18, 896);
+ final DateTime creationDate = new DateTime(2012, 3, 6, 21, 36, 18, 896);
events.add(createBillingEvent(subscriptionId, creationDate, plan1, phase1, BILL_CYCLE_DAY));
// trialPhaseEndDate = 2012/4/5
- DateTime trialPhaseEndDate = creationDate.plusDays(30);
+ final DateTime trialPhaseEndDate = creationDate.plusDays(30);
events.add(createBillingEvent(subscriptionId, trialPhaseEndDate, plan1, phase2, BILL_CYCLE_DAY));
// discountPhaseEndDate = 2012/10/5
- DateTime discountPhaseEndDate = trialPhaseEndDate.plusMonths(6);
+ final DateTime discountPhaseEndDate = trialPhaseEndDate.plusMonths(6);
events.add(createBillingEvent(subscriptionId, discountPhaseEndDate, plan1, phase3, BILL_CYCLE_DAY));
- Invoice invoice1 = generator.generateInvoice(accountId, events, null, creationDate, Currency.USD);
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, null, creationDate, Currency.USD);
assertNotNull(invoice1);
assertEquals(invoice1.getNumberOfItems(), 1);
assertEquals(invoice1.getBalance().compareTo(ZERO), 0);
- List<Invoice> invoiceList = new ArrayList<Invoice>();
+ final List<Invoice> invoiceList = new ArrayList<Invoice>();
invoiceList.add(invoice1);
- Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, trialPhaseEndDate, Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, trialPhaseEndDate, Currency.USD);
assertNotNull(invoice2);
assertEquals(invoice2.getNumberOfItems(), 1);
assertEquals(invoice2.getInvoiceItems().get(0).getStartDate().compareTo(trialPhaseEndDate), 0);
@@ -644,7 +643,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
invoiceList.add(invoice2);
DateTime targetDate = trialPhaseEndDate.toMutableDateTime().dayOfMonth().set(BILL_CYCLE_DAY).toDateTime();
- Invoice invoice3 = generator.generateInvoice(accountId, events, invoiceList, targetDate, Currency.USD);
+ final Invoice invoice3 = generator.generateInvoice(accountId, events, invoiceList, targetDate, Currency.USD);
assertNotNull(invoice3);
assertEquals(invoice3.getNumberOfItems(), 1);
assertEquals(invoice3.getInvoiceItems().get(0).getStartDate().compareTo(targetDate), 0);
@@ -652,17 +651,17 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
invoiceList.add(invoice3);
targetDate = targetDate.plusMonths(6);
- Invoice invoice4 = generator.generateInvoice(accountId, events, invoiceList, targetDate, Currency.USD);
+ final Invoice invoice4 = generator.generateInvoice(accountId, events, invoiceList, targetDate, Currency.USD);
assertNotNull(invoice4);
assertEquals(invoice4.getNumberOfItems(), 7);
}
@Test(expectedExceptions = {InvoiceApiException.class})
public void testTargetDateRestrictionFailure() throws InvoiceApiException, CatalogApiException {
- DateTime targetDate = DateTime.now().plusMonths(60);
- BillingEventSet events = new MockBillingEventSet();
- Plan plan1 = new MockPlan();
- PlanPhase phase1 = createMockMonthlyPlanPhase(null, ZERO, PhaseType.TRIAL);
+ final DateTime targetDate = DateTime.now().plusMonths(60);
+ final BillingEventSet events = new MockBillingEventSet();
+ final Plan plan1 = new MockPlan();
+ final PlanPhase phase1 = createMockMonthlyPlanPhase(null, ZERO, PhaseType.TRIAL);
events.add(createBillingEvent(UUID.randomUUID(), DateTime.now(), plan1, phase1, 1));
generator.generateInvoice(UUID.randomUUID(), events, null, targetDate, Currency.USD);
}
@@ -681,11 +680,11 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
null, BillingPeriod.MONTHLY, phaseType);
}
- private MockPlanPhase createMockMonthlyPlanPhase(@Nullable BigDecimal recurringRate,
+ private MockPlanPhase createMockMonthlyPlanPhase(@Nullable final BigDecimal recurringRate,
@Nullable final BigDecimal fixedCost,
final PhaseType phaseType) {
- MockInternationalPrice recurringPrice = (recurringRate == null) ? null : new MockInternationalPrice(new DefaultPrice(recurringRate, Currency.USD));
- MockInternationalPrice fixedPrice = (fixedCost == null) ? null : new MockInternationalPrice(new DefaultPrice(fixedCost, Currency.USD));
+ final MockInternationalPrice recurringPrice = (recurringRate == null) ? null : new MockInternationalPrice(new DefaultPrice(recurringRate, Currency.USD));
+ final MockInternationalPrice fixedPrice = (fixedCost == null) ? null : new MockInternationalPrice(new DefaultPrice(fixedCost, Currency.USD));
return new MockPlanPhase(recurringPrice, fixedPrice, BillingPeriod.MONTHLY, phaseType);
}
@@ -696,22 +695,22 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
}
private BillingEvent createBillingEvent(final UUID subscriptionId, final DateTime startDate,
- final Plan plan, final PlanPhase planPhase, final int billCycleDay) throws CatalogApiException {
- Subscription sub = createZombieSubscription(subscriptionId);
- Currency currency = Currency.USD;
+ final Plan plan, final PlanPhase planPhase, final int billCycleDay) throws CatalogApiException {
+ final Subscription sub = createZombieSubscription(subscriptionId);
+ final Currency currency = Currency.USD;
return createMockBillingEvent(null, sub, startDate, plan, planPhase,
- planPhase.getFixedPrice() == null ? null : planPhase.getFixedPrice().getPrice(currency),
- planPhase.getRecurringPrice() == null ? null : planPhase.getRecurringPrice().getPrice(currency),
- currency, planPhase.getBillingPeriod(),
- billCycleDay, BillingModeType.IN_ADVANCE, "Test", 1L, SubscriptionTransitionType.CREATE);
+ planPhase.getFixedPrice() == null ? null : planPhase.getFixedPrice().getPrice(currency),
+ planPhase.getRecurringPrice() == null ? null : planPhase.getRecurringPrice().getPrice(currency),
+ currency, planPhase.getBillingPeriod(),
+ billCycleDay, BillingModeType.IN_ADVANCE, "Test", 1L, SubscriptionTransitionType.CREATE);
}
private void testInvoiceGeneration(final UUID accountId, final BillingEventSet events, final List<Invoice> existingInvoices,
final DateTime targetDate, final int expectedNumberOfItems,
final BigDecimal expectedAmount) throws InvoiceApiException {
- Currency currency = Currency.USD;
- Invoice invoice = generator.generateInvoice(accountId, events, existingInvoices, targetDate, currency);
+ final Currency currency = Currency.USD;
+ final Invoice invoice = generator.generateInvoice(accountId, events, existingInvoices, targetDate, currency);
assertNotNull(invoice);
assertEquals(invoice.getNumberOfItems(), expectedNumberOfItems);
existingInvoices.add(invoice);
@@ -722,44 +721,44 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testAddOnInvoiceGeneration() throws CatalogApiException, InvoiceApiException {
- DateTime april25 = new DateTime(2012, 4, 25, 0, 0, 0, 0);
+ final DateTime april25 = new DateTime(2012, 4, 25, 0, 0, 0, 0);
// create a base plan on April 25th
- UUID accountId = UUID.randomUUID();
- Subscription baseSubscription = createZombieSubscription();
+ final UUID accountId = UUID.randomUUID();
+ final Subscription baseSubscription = createZombieSubscription();
- Plan basePlan = new MockPlan("base Plan");
- MockInternationalPrice price5 = new MockInternationalPrice(new DefaultPrice(FIVE, Currency.USD));
- MockInternationalPrice price10 = new MockInternationalPrice(new DefaultPrice(TEN, Currency.USD));
- MockInternationalPrice price20 = new MockInternationalPrice(new DefaultPrice(TWENTY, Currency.USD));
- PlanPhase basePlanEvergreen = new MockPlanPhase(price10, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
+ final Plan basePlan = new MockPlan("base Plan");
+ final MockInternationalPrice price5 = new MockInternationalPrice(new DefaultPrice(FIVE, Currency.USD));
+ final MockInternationalPrice price10 = new MockInternationalPrice(new DefaultPrice(TEN, Currency.USD));
+ final MockInternationalPrice price20 = new MockInternationalPrice(new DefaultPrice(TWENTY, Currency.USD));
+ final PlanPhase basePlanEvergreen = new MockPlanPhase(price10, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
events.add(createBillingEvent(baseSubscription.getId(), april25, basePlan, basePlanEvergreen, 25));
// generate invoice
- Invoice invoice1 = generator.generateInvoice(accountId, events, null, april25, Currency.USD);
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, null, april25, Currency.USD);
assertNotNull(invoice1);
assertEquals(invoice1.getNumberOfItems(), 1);
assertEquals(invoice1.getBalance().compareTo(TEN), 0);
- List<Invoice> invoices = new ArrayList<Invoice>();
+ final List<Invoice> invoices = new ArrayList<Invoice>();
invoices.add(invoice1);
// create 2 add ons on April 28th
- DateTime april28 = new DateTime(2012, 4, 28, 0, 0, 0, 0);
- Subscription addOnSubscription1 = createZombieSubscription();
- Plan addOn1Plan = new MockPlan("add on 1");
- PlanPhase addOn1PlanPhaseEvergreen = new MockPlanPhase(price5, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
+ final DateTime april28 = new DateTime(2012, 4, 28, 0, 0, 0, 0);
+ final Subscription addOnSubscription1 = createZombieSubscription();
+ final Plan addOn1Plan = new MockPlan("add on 1");
+ final PlanPhase addOn1PlanPhaseEvergreen = new MockPlanPhase(price5, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
events.add(createBillingEvent(addOnSubscription1.getId(), april28, addOn1Plan, addOn1PlanPhaseEvergreen, 25));
- Subscription addOnSubscription2 = createZombieSubscription();
- Plan addOn2Plan = new MockPlan("add on 2");
- PlanPhase addOn2PlanPhaseEvergreen = new MockPlanPhase(price20, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
+ final Subscription addOnSubscription2 = createZombieSubscription();
+ final Plan addOn2Plan = new MockPlan("add on 2");
+ final PlanPhase addOn2PlanPhaseEvergreen = new MockPlanPhase(price20, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
events.add(createBillingEvent(addOnSubscription2.getId(), april28, addOn2Plan, addOn2PlanPhaseEvergreen, 25));
// generate invoice
- Invoice invoice2 = generator.generateInvoice(accountId, events, invoices, april28, Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, invoices, april28, Currency.USD);
invoices.add(invoice2);
assertNotNull(invoice2);
assertEquals(invoice2.getNumberOfItems(), 2);
@@ -767,16 +766,16 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
// perform a repair (change base plan; remove one add-on)
// event stream should include just two plans
- MockBillingEventSet newEvents = new MockBillingEventSet();
- Plan basePlan2 = new MockPlan("base plan 2");
- MockInternationalPrice price13 = new MockInternationalPrice(new DefaultPrice(THIRTEEN, Currency.USD));
- PlanPhase basePlan2Phase = new MockPlanPhase(price13, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
+ final MockBillingEventSet newEvents = new MockBillingEventSet();
+ final Plan basePlan2 = new MockPlan("base plan 2");
+ final MockInternationalPrice price13 = new MockInternationalPrice(new DefaultPrice(THIRTEEN, Currency.USD));
+ final PlanPhase basePlan2Phase = new MockPlanPhase(price13, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
newEvents.add(createBillingEvent(baseSubscription.getId(), april25, basePlan2, basePlan2Phase, 25));
newEvents.add(createBillingEvent(addOnSubscription1.getId(), april28, addOn1Plan, addOn1PlanPhaseEvergreen, 25));
// generate invoice
- DateTime may1 = new DateTime(2012, 5, 1, 0, 0, 0, 0);
- Invoice invoice3 = generator.generateInvoice(accountId, newEvents, invoices, may1, Currency.USD);
+ final DateTime may1 = new DateTime(2012, 5, 1, 0, 0, 0, 0);
+ final Invoice invoice3 = generator.generateInvoice(accountId, newEvents, invoices, may1, Currency.USD);
assertNotNull(invoice3);
assertEquals(invoice3.getNumberOfItems(), 5);
// -4.50 -18 - 10 (to correct the previous 2 invoices) + 4.50 + 13
@@ -786,22 +785,22 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testRepairForPaidInvoice() throws CatalogApiException, InvoiceApiException {
// create an invoice
- DateTime april25 = new DateTime(2012, 4, 25, 0, 0, 0, 0);
+ final DateTime april25 = new DateTime(2012, 4, 25, 0, 0, 0, 0);
// create a base plan on April 25th
- UUID accountId = UUID.randomUUID();
- Subscription originalSubscription = createZombieSubscription();
+ final UUID accountId = UUID.randomUUID();
+ final Subscription originalSubscription = createZombieSubscription();
- Plan originalPlan = new MockPlan("original plan");
- MockInternationalPrice price10 = new MockInternationalPrice(new DefaultPrice(TEN, Currency.USD));
- PlanPhase originalPlanEvergreen = new MockPlanPhase(price10, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
+ final Plan originalPlan = new MockPlan("original plan");
+ final MockInternationalPrice price10 = new MockInternationalPrice(new DefaultPrice(TEN, Currency.USD));
+ final PlanPhase originalPlanEvergreen = new MockPlanPhase(price10, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
- BillingEventSet events = new MockBillingEventSet();
+ final BillingEventSet events = new MockBillingEventSet();
events.add(createBillingEvent(originalSubscription.getId(), april25, originalPlan, originalPlanEvergreen, 25));
- Invoice invoice1 = generator.generateInvoice(accountId, events, null, april25, Currency.USD);
+ final Invoice invoice1 = generator.generateInvoice(accountId, events, null, april25, Currency.USD);
assertEquals(invoice1.getNumberOfItems(), 1);
- List<Invoice> invoices = new ArrayList<Invoice>();
+ final List<Invoice> invoices = new ArrayList<Invoice>();
invoices.add(invoice1);
// pay the invoice
@@ -810,14 +809,14 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
// change the plan (i.e. repair) on start date
events.clear();
- Subscription newSubscription = createZombieSubscription();
- Plan newPlan = new MockPlan("new plan");
- MockInternationalPrice price5 = new MockInternationalPrice(new DefaultPrice(FIVE, Currency.USD));
- PlanPhase newPlanEvergreen = new MockPlanPhase(price5, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
+ final Subscription newSubscription = createZombieSubscription();
+ final Plan newPlan = new MockPlan("new plan");
+ final MockInternationalPrice price5 = new MockInternationalPrice(new DefaultPrice(FIVE, Currency.USD));
+ final PlanPhase newPlanEvergreen = new MockPlanPhase(price5, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
events.add(createBillingEvent(newSubscription.getId(), april25, newPlan, newPlanEvergreen, 25));
// generate a new invoice
- Invoice invoice2 = generator.generateInvoice(accountId, events, invoices, april25, Currency.USD);
+ final Invoice invoice2 = generator.generateInvoice(accountId, events, invoices, april25, Currency.USD);
assertEquals(invoice2.getNumberOfItems(), 4);
invoices.add(invoice2);
@@ -831,26 +830,26 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
assertEquals(invoice2.getBalance().compareTo(ZERO), 0);
// ensure that the account has a credit balance
- BigDecimal creditBalance = invoice1.getAmountCredited().add(invoice2.getAmountCredited());
+ final BigDecimal creditBalance = invoice1.getAmountCredited().add(invoice2.getAmountCredited());
assertTrue(creditBalance.compareTo(FIVE) == 0);
}
- private void distributeItems(List<Invoice> invoices) {
- Map<UUID, Invoice> invoiceMap = new HashMap<UUID, Invoice>();
+ private void distributeItems(final List<Invoice> invoices) {
+ final Map<UUID, Invoice> invoiceMap = new HashMap<UUID, Invoice>();
- for (Invoice invoice : invoices) {
+ for (final Invoice invoice : invoices) {
invoiceMap.put(invoice.getId(), invoice);
}
- for (final Invoice invoice: invoices) {
- Iterator<InvoiceItem> itemIterator = invoice.getInvoiceItems().iterator();
+ for (final Invoice invoice : invoices) {
+ final Iterator<InvoiceItem> itemIterator = invoice.getInvoiceItems().iterator();
final UUID invoiceId = invoice.getId();
while (itemIterator.hasNext()) {
- InvoiceItem item = itemIterator.next();
+ final InvoiceItem item = itemIterator.next();
if (!item.getInvoiceId().equals(invoiceId)) {
- Invoice thisInvoice = invoiceMap.get(item.getInvoiceId());
+ final Invoice thisInvoice = invoiceMap.get(item.getInvoiceId());
if (thisInvoice == null) {
throw new NullPointerException();
}
@@ -863,49 +862,49 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
@Test
public void testAutoInvoiceOffAccount() throws Exception {
- MockBillingEventSet events = new MockBillingEventSet();
+ final MockBillingEventSet events = new MockBillingEventSet();
events.setAccountInvoiceOff(true);
- Subscription sub = createZombieSubscription();
- DateTime startDate = buildDateTime(2011, 9, 1);
+ final Subscription sub = createZombieSubscription();
+ final DateTime startDate = buildDateTime(2011, 9, 1);
- Plan plan = new MockPlan();
- BigDecimal rate1 = TEN;
- PlanPhase phase = createMockMonthlyPlanPhase(rate1);
+ final Plan plan = new MockPlan();
+ final BigDecimal rate1 = TEN;
+ final PlanPhase phase = createMockMonthlyPlanPhase(rate1);
- BillingEvent event = createBillingEvent(sub.getId(), startDate, plan, phase, 1);
+ final BillingEvent event = createBillingEvent(sub.getId(), startDate, plan, phase, 1);
events.add(event);
- DateTime targetDate = buildDateTime(2011, 10, 3);
- UUID accountId = UUID.randomUUID();
- Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
+ final DateTime targetDate = buildDateTime(2011, 10, 3);
+ final UUID accountId = UUID.randomUUID();
+ final Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
assertNull(invoice);
}
-
+
public void testAutoInvoiceOffWithCredits() throws CatalogApiException, InvoiceApiException {
- Currency currency = Currency.USD;
- List<Invoice> invoices = new ArrayList<Invoice>();
- MockBillingEventSet eventSet = new MockBillingEventSet();
- UUID accountId = UUID.randomUUID();
+ final Currency currency = Currency.USD;
+ final List<Invoice> invoices = new ArrayList<Invoice>();
+ final MockBillingEventSet eventSet = new MockBillingEventSet();
+ final UUID accountId = UUID.randomUUID();
- DateTime startDate = new DateTime(2012, 1, 1, 0, 12, 34, 0);
+ final DateTime startDate = new DateTime(2012, 1, 1, 0, 12, 34, 0);
// add first subscription creation event
- UUID subscriptionId1 = UUID.randomUUID();
- Plan plan1 = new MockPlan();
- PlanPhase plan1phase1 = createMockMonthlyPlanPhase(FIFTEEN, null, PhaseType.DISCOUNT);
- BillingEvent subscription1creation = createBillingEvent(subscriptionId1, startDate, plan1, plan1phase1, 1);
+ final UUID subscriptionId1 = UUID.randomUUID();
+ final Plan plan1 = new MockPlan();
+ final PlanPhase plan1phase1 = createMockMonthlyPlanPhase(FIFTEEN, null, PhaseType.DISCOUNT);
+ final BillingEvent subscription1creation = createBillingEvent(subscriptionId1, startDate, plan1, plan1phase1, 1);
eventSet.add(subscription1creation);
// add second subscription creation event
- UUID subscriptionId2 = UUID.randomUUID();
- Plan plan2 = new MockPlan();
- PlanPhase plan2phase1 = createMockMonthlyPlanPhase(TWELVE, null, PhaseType.EVERGREEN);
+ final UUID subscriptionId2 = UUID.randomUUID();
+ final Plan plan2 = new MockPlan();
+ final PlanPhase plan2phase1 = createMockMonthlyPlanPhase(TWELVE, null, PhaseType.EVERGREEN);
eventSet.add(createBillingEvent(subscriptionId2, startDate, plan2, plan2phase1, 1));
// generate the first invoice
- Invoice invoice1 = generator.generateInvoice(accountId, eventSet, invoices, startDate, currency);
+ final Invoice invoice1 = generator.generateInvoice(accountId, eventSet, invoices, startDate, currency);
assertNotNull(invoice1);
assertTrue(invoice1.getBalance().compareTo(FIFTEEN.add(TWELVE)) == 0);
invoices.add(invoice1);
@@ -915,51 +914,51 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
eventSet.remove(subscription1creation);
eventSet.addSubscriptionWithAutoInvoiceOff(subscriptionId1);
- DateTime targetDate2 = startDate.plusMonths(1);
- Invoice invoice2 = generator.generateInvoice(accountId, eventSet, invoices, targetDate2, currency);
+ final DateTime targetDate2 = startDate.plusMonths(1);
+ final Invoice invoice2 = generator.generateInvoice(accountId, eventSet, invoices, targetDate2, currency);
assertNotNull(invoice2);
assertTrue(invoice2.getBalance().compareTo(TWELVE) == 0);
invoices.add(invoice2);
- DateTime targetDate3 = targetDate2.plusMonths(1);
+ final DateTime targetDate3 = targetDate2.plusMonths(1);
eventSet.clearSubscriptionsWithAutoInvoiceOff();
eventSet.add(subscription1creation);
- Invoice invoice3 = generator.generateInvoice(accountId, eventSet, invoices, targetDate3, currency);
+ final Invoice invoice3 = generator.generateInvoice(accountId, eventSet, invoices, targetDate3, currency);
assertNotNull(invoice3);
assertTrue(invoice3.getBalance().compareTo(FIFTEEN.multiply(TWO).add(TWELVE)) == 0);
}
@Test
public void testAccountCredit() throws CatalogApiException, InvoiceApiException {
- BillingEventSet billingEventSet = new MockBillingEventSet();
-
- DateTime startDate = new DateTime(2012, 3, 1, 0, 0, 0, 0);
- UUID accountId = UUID.randomUUID();
- UUID subscriptionId = UUID.randomUUID();
- Plan plan = new MockPlan("original plan");
- MockInternationalPrice price10 = new MockInternationalPrice(new DefaultPrice(TEN, Currency.USD));
- PlanPhase planPhase = new MockPlanPhase(price10, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
- BillingEvent creation = createBillingEvent(subscriptionId, startDate, plan, planPhase, 1);
+ final BillingEventSet billingEventSet = new MockBillingEventSet();
+
+ final DateTime startDate = new DateTime(2012, 3, 1, 0, 0, 0, 0);
+ final UUID accountId = UUID.randomUUID();
+ final UUID subscriptionId = UUID.randomUUID();
+ final Plan plan = new MockPlan("original plan");
+ final MockInternationalPrice price10 = new MockInternationalPrice(new DefaultPrice(TEN, Currency.USD));
+ final PlanPhase planPhase = new MockPlanPhase(price10, null, BillingPeriod.MONTHLY, PhaseType.EVERGREEN);
+ final BillingEvent creation = createBillingEvent(subscriptionId, startDate, plan, planPhase, 1);
billingEventSet.add(creation);
- List<Invoice> invoices = new ArrayList<Invoice>();
+ final List<Invoice> invoices = new ArrayList<Invoice>();
- Invoice initialInvoice = generator.generateInvoice(accountId, billingEventSet, null, startDate, Currency.USD);
+ final Invoice initialInvoice = generator.generateInvoice(accountId, billingEventSet, null, startDate, Currency.USD);
assertNotNull(initialInvoice);
assertEquals(initialInvoice.getNumberOfItems(), 1);
assertEquals(initialInvoice.getBalance().compareTo(TEN), 0);
invoices.add(initialInvoice);
// add account-level credit
- DateTime creditDate = startDate.plusDays(5);
- Invoice invoiceWithCredit = new DefaultInvoice(accountId, creditDate, creditDate, Currency.USD);
- InvoiceItem accountCredit = new CreditInvoiceItem(invoiceWithCredit.getId(), accountId, creditDate, FIVE, Currency.USD);
+ final DateTime creditDate = startDate.plusDays(5);
+ final Invoice invoiceWithCredit = new DefaultInvoice(accountId, creditDate, creditDate, Currency.USD);
+ final InvoiceItem accountCredit = new CreditInvoiceItem(invoiceWithCredit.getId(), accountId, creditDate, FIVE, Currency.USD);
invoiceWithCredit.addInvoiceItem(accountCredit);
invoices.add(invoiceWithCredit);
// invoice one month after the initial subscription
- Invoice finalInvoice = generator.generateInvoice(accountId, billingEventSet, invoices, startDate.plusMonths(1), Currency.USD);
+ final Invoice finalInvoice = generator.generateInvoice(accountId, billingEventSet, invoices, startDate.plusMonths(1), Currency.USD);
assertEquals(finalInvoice.getBalance().compareTo(FIVE), 0);
assertEquals(finalInvoice.getNumberOfItems(), 2);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/DoubleProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/DoubleProRationTests.java
index c08c8b8..524e666 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/DoubleProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/DoubleProRationTests.java
@@ -34,39 +34,39 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 1);
- DateTime endDate = buildDateTime(2012, 1, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 1);
+ final DateTime endDate = buildDateTime(2012, 1, 27);
- BigDecimal expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 15, expectedValue);
}
@Test
public void testDoubleProRation_TargetDateInFirstProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 7);
- DateTime endDate = buildDateTime(2012, 1, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 7);
+ final DateTime endDate = buildDateTime(2012, 1, 27);
- BigDecimal expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 15, expectedValue);
}
@Test
public void testDoubleProRation_TargetDateOnFirstBillingCycleDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 15);
- DateTime endDate = buildDateTime(2012, 1, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 15);
+ final DateTime endDate = buildDateTime(2012, 1, 27);
- BigDecimal expectedValue = ONE.add(FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 15, expectedValue);
}
@Test
public void testDoubleProRation_TargetDateInFullBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 22);
- DateTime endDate = buildDateTime(2012, 1, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 22);
+ final DateTime endDate = buildDateTime(2012, 1, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -77,9 +77,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnSecondBillingCycleDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2012, 1, 15);
- DateTime endDate = buildDateTime(2012, 1, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2012, 1, 15);
+ final DateTime endDate = buildDateTime(2012, 1, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -92,9 +92,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateInSecondProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2012, 1, 17);
- DateTime endDate = buildDateTime(2012, 1, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2012, 1, 17);
+ final DateTime endDate = buildDateTime(2012, 1, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -107,9 +107,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2012, 1, 27);
- DateTime endDate = buildDateTime(2012, 1, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2012, 1, 27);
+ final DateTime endDate = buildDateTime(2012, 1, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -122,9 +122,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2012, 3, 7);
- DateTime endDate = buildDateTime(2012, 1, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2012, 3, 7);
+ final DateTime endDate = buildDateTime(2012, 1, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -137,9 +137,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRationWithMultiplePeriods_TargetDateInSecondFullBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2012, 2, 26);
- DateTime endDate = buildDateTime(2013, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2012, 2, 26);
+ final DateTime endDate = buildDateTime(2013, 4, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/LeadingProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/LeadingProRationTests.java
index 68611f7..facea50 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/LeadingProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/LeadingProRationTests.java
@@ -34,10 +34,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 1);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -45,10 +45,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 4);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 4);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -56,10 +56,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateOnFirstBillingDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -67,10 +67,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateAfterFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 4, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -78,11 +78,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 1);
- DateTime endDate = buildDateTime(2012, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 1);
+ final DateTime endDate = buildDateTime(2012, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -90,11 +90,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 4);
- DateTime endDate = buildDateTime(2012, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 4);
+ final DateTime endDate = buildDateTime(2012, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -102,11 +102,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnFirstBillingDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 13);
- DateTime endDate = buildDateTime(2012, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 13);
+ final DateTime endDate = buildDateTime(2012, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -114,11 +114,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateInFinalBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 4, 10);
- DateTime endDate = buildDateTime(2012, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 10);
+ final DateTime endDate = buildDateTime(2012, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -126,11 +126,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2012, 2, 13);
- DateTime endDate = buildDateTime(2012, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2012, 2, 13);
+ final DateTime endDate = buildDateTime(2012, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -138,11 +138,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2012, 4, 10);
- DateTime endDate = buildDateTime(2012, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2012, 4, 10);
+ final DateTime endDate = buildDateTime(2012, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/ProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/ProRationTests.java
index 88922e2..4c9b88b 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/ProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/ProRationTests.java
@@ -34,29 +34,29 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_PrecedingProRation() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 31);
- DateTime targetDate = buildDateTime(2011, 2, 24);
+ final DateTime startDate = buildDateTime(2011, 1, 31);
+ final DateTime targetDate = buildDateTime(2011, 2, 24);
- BigDecimal expectedValue = ONE.add(FIFTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(FIFTEEN.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, expectedValue);
}
@Test
public void testSinglePlan_PrecedingProRation_CrossingYearBoundary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 12, 15);
- DateTime targetDate = buildDateTime(2011, 1, 13);
+ final DateTime startDate = buildDateTime(2010, 12, 15);
+ final DateTime targetDate = buildDateTime(2011, 1, 13);
- BigDecimal expectedValue = ONE.add(TWENTY.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(TWENTY.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, targetDate, 4, expectedValue);
}
@Test(enabled = false)
public void testSinglePlanDoubleProRation() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 10);
- DateTime endDate = buildDateTime(2012, 3, 4);
- DateTime targetDate = buildDateTime(2012, 4, 5);
+ final DateTime startDate = buildDateTime(2011, 1, 10);
+ final DateTime endDate = buildDateTime(2012, 3, 4);
+ final DateTime targetDate = buildDateTime(2012, 4, 5);
- BigDecimal expectedValue = BigDecimal.ZERO;
+ final BigDecimal expectedValue = BigDecimal.ZERO;
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/TrailingProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/TrailingProRationTests.java
index d1c2013..8861890 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/TrailingProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/annual/TrailingProRationTests.java
@@ -34,58 +34,58 @@ public class TrailingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testTargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2012, 6, 25);
- DateTime targetDate = buildDateTime(2010, 6, 17);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2012, 6, 25);
+ final DateTime targetDate = buildDateTime(2010, 6, 17);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, ONE);
}
@Test
public void testTargetDateInFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2011, 6, 25);
- DateTime targetDate = buildDateTime(2010, 6, 20);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2011, 6, 25);
+ final DateTime targetDate = buildDateTime(2010, 6, 20);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, ONE);
}
@Test
public void testTargetDateAtEndOfFirstBillingCycle() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2011, 6, 25);
- DateTime targetDate = buildDateTime(2011, 6, 17);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2011, 6, 25);
+ final DateTime targetDate = buildDateTime(2011, 6, 17);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(THREE_HUNDRED_AND_SIXTY_FIVE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
@Test
public void testTargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2011, 6, 25);
- DateTime targetDate = buildDateTime(2011, 6, 18);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2011, 6, 25);
+ final DateTime targetDate = buildDateTime(2011, 6, 18);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(THREE_HUNDRED_AND_SIXTY_SIX, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(THREE_HUNDRED_AND_SIXTY_SIX, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
@Test
public void testTargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2011, 6, 25);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2011, 6, 25);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(THREE_HUNDRED_AND_SIXTY_SIX, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(THREE_HUNDRED_AND_SIXTY_SIX, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, endDate, 17, expectedValue);
}
@Test
public void testTargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2011, 6, 25);
- DateTime targetDate = buildDateTime(2011, 7, 30);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2011, 6, 25);
+ final DateTime targetDate = buildDateTime(2011, 7, 30);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(THREE_HUNDRED_AND_SIXTY_SIX, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(THREE_HUNDRED_AND_SIXTY_SIX, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/GenericProRationTestBase.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/GenericProRationTestBase.java
index 70f1f8f..ea37848 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/GenericProRationTestBase.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/GenericProRationTestBase.java
@@ -27,53 +27,54 @@ import com.ning.billing.invoice.model.InvalidDateSequenceException;
public abstract class GenericProRationTestBase extends ProRationInAdvanceTestBase {
/**
* used for testing cancellation in less than a single billing period
+ *
* @return BigDecimal the number of days in the billing period beginning 2011/1/1
*/
protected abstract BigDecimal getDaysInTestPeriod();
-
+
@Test
public void testSinglePlan_OnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 15);
+ final DateTime startDate = buildDateTime(2011, 2, 15);
testCalculateNumberOfBillingCycles(startDate, startDate, 15, ONE);
}
@Test
public void testSinglePlan_LessThanOnePeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = buildDateTime(2011, 3, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = buildDateTime(2011, 3, 1);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, ONE);
}
@Test
public void testSinglePlan_OnePeriodLessADayAfterStart() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths()).plusDays(-1);
+ final DateTime startDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths()).plusDays(-1);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, ONE);
}
@Test
public void testSinglePlan_ExactlyOnePeriodAfterStart() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths());
+ final DateTime startDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths());
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, TWO);
}
@Test
public void testSinglePlan_SlightlyMoreThanOnePeriodAfterStart() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths()).plusDays(1);
+ final DateTime startDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths()).plusDays(1);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, TWO);
}
@Test
public void testSinglePlan_CrossingYearBoundary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 12, 15);
- DateTime oneCycleLater = startDate.plusMonths(getBillingPeriod().getNumberOfMonths());
+ final DateTime startDate = buildDateTime(2011, 12, 15);
+ final DateTime oneCycleLater = startDate.plusMonths(getBillingPeriod().getNumberOfMonths());
// test just before the billing cycle day
testCalculateNumberOfBillingCycles(startDate, oneCycleLater.plusDays(-1), 15, ONE);
@@ -87,27 +88,27 @@ public abstract class GenericProRationTestBase extends ProRationInAdvanceTestBas
@Test
public void testSinglePlan_StartingMidFebruary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths());
+ final DateTime startDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths());
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, TWO);
}
@Test
public void testSinglePlan_StartingMidFebruaryOfLeapYear() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 2, 15);
- DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths());
+ final DateTime startDate = buildDateTime(2012, 2, 15);
+ final DateTime targetDate = startDate.plusMonths(getBillingPeriod().getNumberOfMonths());
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, TWO);
}
@Test
public void testSinglePlan_MovingForwardThroughTime() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 31);
+ final DateTime startDate = buildDateTime(2011, 1, 31);
BigDecimal expectedValue = ONE;
for (int i = 1; i <= 12; i++) {
- DateTime oneCycleLater = startDate.plusMonths(i * getBillingPeriod().getNumberOfMonths());
+ final DateTime oneCycleLater = startDate.plusMonths(i * getBillingPeriod().getNumberOfMonths());
// test just before the billing cycle day
testCalculateNumberOfBillingCycles(startDate, oneCycleLater.plusDays(-1), 31, expectedValue);
@@ -120,65 +121,65 @@ public abstract class GenericProRationTestBase extends ProRationInAdvanceTestBas
testCalculateNumberOfBillingCycles(startDate, oneCycleLater.plusDays(1), 31, expectedValue);
}
}
-
+
// tests for cancellation in less than one period, beginning Jan 1
@Test
public void testCancelledBeforeOnePeriod_TargetDateInStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 1);
- DateTime endDate = buildDateTime(2011, 1, 15);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 1);
+ final DateTime endDate = buildDateTime(2011, 1, 15);
- BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 1, expectedValue);
}
@Test
public void testCancelledBeforeOnePeriod_TargetDateInSubscriptionPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 7);
- DateTime endDate = buildDateTime(2011, 1, 15);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 7);
+ final DateTime endDate = buildDateTime(2011, 1, 15);
- BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 1, expectedValue);
}
@Test
public void testCancelledBeforeOnePeriod_TargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 15);
- DateTime endDate = buildDateTime(2011, 1, 15);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 15);
+ final DateTime endDate = buildDateTime(2011, 1, 15);
- BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 1, expectedValue);
}
@Test
public void testCancelledBeforeOnePeriod_TargetDateAfterEndDateButInFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 17);
- DateTime endDate = buildDateTime(2011, 1, 15);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 17);
+ final DateTime endDate = buildDateTime(2011, 1, 15);
- BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 1, expectedValue);
}
@Test
public void testCancelledBeforeOnePeriod_TargetDateAtEndOfFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 2, 1);
- DateTime endDate = buildDateTime(2011, 1, 15);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 1);
+ final DateTime endDate = buildDateTime(2011, 1, 15);
- BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 1, expectedValue);
}
@Test
public void testCancelledBeforeOnePeriod_TargetDateAfterFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 4, 5);
- DateTime endDate = buildDateTime(2011, 1, 15);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 5);
+ final DateTime endDate = buildDateTime(2011, 1, 15);
- BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(getDaysInTestPeriod(), NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 1, expectedValue);
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/DoubleProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/DoubleProRationTests.java
index 8c9b61d..230d60c 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/DoubleProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/DoubleProRationTests.java
@@ -34,39 +34,39 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 1);
- DateTime endDate = buildDateTime(2011, 2, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 1);
+ final DateTime endDate = buildDateTime(2011, 2, 27);
- BigDecimal expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 15, expectedValue);
}
@Test
public void testDoubleProRation_TargetDateInFirstProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 7);
- DateTime endDate = buildDateTime(2011, 2, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 7);
+ final DateTime endDate = buildDateTime(2011, 2, 27);
- BigDecimal expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 15, expectedValue);
}
@Test
public void testDoubleProRation_TargetDateOnFirstBillingCycleDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 15);
- DateTime endDate = buildDateTime(2011, 2, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 15);
+ final DateTime endDate = buildDateTime(2011, 2, 27);
- BigDecimal expectedValue = ONE.add(FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 15, expectedValue);
}
@Test
public void testDoubleProRation_TargetDateInFullBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 22);
- DateTime endDate = buildDateTime(2011, 2, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 22);
+ final DateTime endDate = buildDateTime(2011, 2, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -77,9 +77,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnSecondBillingCycleDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 2, 27);
- DateTime endDate = buildDateTime(2011, 2, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 27);
+ final DateTime endDate = buildDateTime(2011, 2, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -91,9 +91,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateInSecondProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 2, 26);
- DateTime endDate = buildDateTime(2011, 2, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 26);
+ final DateTime endDate = buildDateTime(2011, 2, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -105,9 +105,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 2, 27);
- DateTime endDate = buildDateTime(2011, 2, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 27);
+ final DateTime endDate = buildDateTime(2011, 2, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -119,9 +119,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 3, 7);
- DateTime endDate = buildDateTime(2011, 2, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 3, 7);
+ final DateTime endDate = buildDateTime(2011, 2, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -133,9 +133,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRationWithMultiplePeriods_TargetDateInSecondFullBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 2, 26);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 26);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/LeadingProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/LeadingProRationTests.java
index f723738..11b6789 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/LeadingProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/LeadingProRationTests.java
@@ -34,10 +34,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 1);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -45,10 +45,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 4);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 4);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -56,10 +56,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateOnFirstBillingDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -67,10 +67,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateAfterFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 4, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(THREE);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -78,11 +78,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 1);
- DateTime endDate = buildDateTime(2011, 4, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 1);
+ final DateTime endDate = buildDateTime(2011, 4, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -90,11 +90,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 4);
- DateTime endDate = buildDateTime(2011, 4, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 4);
+ final DateTime endDate = buildDateTime(2011, 4, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -102,11 +102,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnFirstBillingDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 13);
- DateTime endDate = buildDateTime(2011, 4, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 13);
+ final DateTime endDate = buildDateTime(2011, 4, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -114,11 +114,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateInFinalBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 4, 10);
- DateTime endDate = buildDateTime(2011, 4, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 10);
+ final DateTime endDate = buildDateTime(2011, 4, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -126,11 +126,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 4, 13);
- DateTime endDate = buildDateTime(2011, 4, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 13);
+ final DateTime endDate = buildDateTime(2011, 4, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -138,11 +138,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 4, 10);
- DateTime endDate = buildDateTime(2011, 4, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 10);
+ final DateTime endDate = buildDateTime(2011, 4, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/ProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/ProRationTests.java
index 78f06b4..eb2d3e8 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/ProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/ProRationTests.java
@@ -34,9 +34,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_WithPhaseChange() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 10);
- DateTime phaseChangeDate = buildDateTime(2011, 2, 24);
- DateTime targetDate = buildDateTime(2011, 3, 6);
+ final DateTime startDate = buildDateTime(2011, 2, 10);
+ final DateTime phaseChangeDate = buildDateTime(2011, 2, 24);
+ final DateTime targetDate = buildDateTime(2011, 3, 6);
testCalculateNumberOfBillingCycles(startDate, phaseChangeDate, targetDate, 10, ONE_HALF);
testCalculateNumberOfBillingCycles(phaseChangeDate, targetDate, 10, ONE_HALF);
@@ -44,9 +44,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_WithPhaseChange_BeforeBillCycleDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 3);
- DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
- DateTime targetDate = buildDateTime(2011, 3, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 3);
+ final DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
+ final DateTime targetDate = buildDateTime(2011, 3, 1);
testCalculateNumberOfBillingCycles(startDate, phaseChangeDate, targetDate, 3, ONE_HALF);
testCalculateNumberOfBillingCycles(phaseChangeDate, targetDate, 3, ONE_HALF);
@@ -54,9 +54,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_WithPhaseChange_OnBillCycleDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 3);
- DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
- DateTime targetDate = buildDateTime(2011, 3, 3);
+ final DateTime startDate = buildDateTime(2011, 2, 3);
+ final DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
+ final DateTime targetDate = buildDateTime(2011, 3, 3);
testCalculateNumberOfBillingCycles(startDate, phaseChangeDate, targetDate, 3, ONE_HALF);
testCalculateNumberOfBillingCycles(phaseChangeDate, targetDate, 3, ONE_AND_A_HALF);
@@ -64,9 +64,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_WithPhaseChange_AfterBillCycleDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 3);
- DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
- DateTime targetDate = buildDateTime(2011, 3, 4);
+ final DateTime startDate = buildDateTime(2011, 2, 3);
+ final DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
+ final DateTime targetDate = buildDateTime(2011, 3, 4);
testCalculateNumberOfBillingCycles(startDate, phaseChangeDate, targetDate, 3, ONE_HALF);
testCalculateNumberOfBillingCycles(phaseChangeDate, targetDate, 3, ONE_AND_A_HALF);
@@ -74,9 +74,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_WithChangeOfBillCycleDayToLaterDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime planChangeDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = buildDateTime(2011, 3, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime planChangeDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = buildDateTime(2011, 3, 1);
testCalculateNumberOfBillingCycles(startDate, planChangeDate, targetDate, 1, ONE_HALF);
testCalculateNumberOfBillingCycles(planChangeDate, targetDate, 15, ONE);
@@ -84,9 +84,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_WithChangeOfBillCycleDayToEarlierDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 20);
- DateTime planChangeDate = buildDateTime(2011, 3, 6);
- DateTime targetDate = buildDateTime(2011, 3, 9);
+ final DateTime startDate = buildDateTime(2011, 2, 20);
+ final DateTime planChangeDate = buildDateTime(2011, 3, 6);
+ final DateTime targetDate = buildDateTime(2011, 3, 9);
testCalculateNumberOfBillingCycles(startDate, planChangeDate, targetDate, 20, ONE_HALF);
testCalculateNumberOfBillingCycles(planChangeDate, targetDate, 6, ONE);
@@ -94,41 +94,41 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_CrossingYearBoundary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 12, 15);
- DateTime targetDate = buildDateTime(2011, 1, 16);
+ final DateTime startDate = buildDateTime(2010, 12, 15);
+ final DateTime targetDate = buildDateTime(2011, 1, 16);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, TWO);
}
@Test
public void testSinglePlan_LeapYear_StartingMidFebruary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 2, 15);
- DateTime targetDate = buildDateTime(2012, 3, 15);
+ final DateTime startDate = buildDateTime(2012, 2, 15);
+ final DateTime targetDate = buildDateTime(2012, 3, 15);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, TWO);
}
@Test
public void testSinglePlan_LeapYear_StartingBeforeFebruary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 1, 15);
- DateTime targetDate = buildDateTime(2012, 2, 3);
+ final DateTime startDate = buildDateTime(2012, 1, 15);
+ final DateTime targetDate = buildDateTime(2012, 2, 3);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, ONE);
}
@Test
public void testSinglePlan_LeapYear_IncludingAllOfFebruary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 1, 30);
- DateTime targetDate = buildDateTime(2012, 3, 1);
+ final DateTime startDate = buildDateTime(2012, 1, 30);
+ final DateTime targetDate = buildDateTime(2012, 3, 1);
testCalculateNumberOfBillingCycles(startDate, targetDate, 30, TWO);
}
@Test
public void testSinglePlan_ChangeBCDTo31() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime planChangeDate = buildDateTime(2011, 2, 14);
- DateTime targetDate = buildDateTime(2011, 3, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime planChangeDate = buildDateTime(2011, 2, 14);
+ final DateTime targetDate = buildDateTime(2011, 3, 1);
BigDecimal expectedValue;
@@ -141,9 +141,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_ChangeBCD() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime planChangeDate = buildDateTime(2011, 2, 14);
- DateTime targetDate = buildDateTime(2011, 3, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime planChangeDate = buildDateTime(2011, 2, 14);
+ final DateTime targetDate = buildDateTime(2011, 3, 1);
BigDecimal expectedValue;
@@ -156,11 +156,11 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_LeapYearFebruaryProRation() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 2, 1);
- DateTime endDate = buildDateTime(2012, 2, 15);
- DateTime targetDate = buildDateTime(2012, 2, 19);
+ final DateTime startDate = buildDateTime(2012, 2, 1);
+ final DateTime endDate = buildDateTime(2012, 2, 15);
+ final DateTime targetDate = buildDateTime(2012, 2, 19);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(TWENTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 1, expectedValue);
@@ -168,11 +168,11 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_BeforeBillingDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 7);
- DateTime changeDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = buildDateTime(2011, 4, 21);
-
- BigDecimal expectedValue;
+ final DateTime startDate = buildDateTime(2011, 2, 7);
+ final DateTime changeDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = buildDateTime(2011, 4, 21);
+
+ final BigDecimal expectedValue;
expectedValue = EIGHT.divide(TWENTY_EIGHT, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, changeDate, targetDate, 7, expectedValue);
@@ -182,22 +182,22 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_OnBillingDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 7);
- DateTime changeDate = buildDateTime(2011, 3, 7);
- DateTime targetDate = buildDateTime(2011, 4, 21);
+ final DateTime startDate = buildDateTime(2011, 2, 7);
+ final DateTime changeDate = buildDateTime(2011, 3, 7);
+ final DateTime targetDate = buildDateTime(2011, 4, 21);
testCalculateNumberOfBillingCycles(startDate, changeDate, targetDate, 7, ONE);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = EIGHT.divide(TWENTY_EIGHT, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(changeDate, targetDate, 15, expectedValue);
}
@Test
public void testPlanChange_AfterBillingDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 7);
- DateTime changeDate = buildDateTime(2011, 3, 10);
- DateTime targetDate = buildDateTime(2011, 4, 21);
+ final DateTime startDate = buildDateTime(2011, 2, 7);
+ final DateTime changeDate = buildDateTime(2011, 3, 10);
+ final DateTime targetDate = buildDateTime(2011, 4, 21);
BigDecimal expectedValue;
@@ -210,9 +210,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_DoubleProRation() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 31);
- DateTime planChangeDate = buildDateTime(2011, 3, 10);
- DateTime targetDate = buildDateTime(2011, 4, 21);
+ final DateTime startDate = buildDateTime(2011, 1, 31);
+ final DateTime planChangeDate = buildDateTime(2011, 3, 10);
+ final DateTime targetDate = buildDateTime(2011, 4, 21);
BigDecimal expectedValue;
expectedValue = SEVEN.divide(THIRTY_ONE, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -221,17 +221,17 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
expectedValue = expectedValue.setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, planChangeDate, targetDate, 7, expectedValue);
- expectedValue = FIVE.divide(TWENTY_EIGHT, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
+ expectedValue = FIVE.divide(TWENTY_EIGHT, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(planChangeDate, targetDate, 15, expectedValue);
}
@Test
public void testStartTargetEnd() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 12, 15);
- DateTime targetDate = buildDateTime(2011, 3, 15);
- DateTime endDate = buildDateTime(2011, 3, 17);
+ final DateTime startDate = buildDateTime(2010, 12, 15);
+ final DateTime targetDate = buildDateTime(2011, 3, 15);
+ final DateTime endDate = buildDateTime(2011, 3, 17);
- BigDecimal expectedValue = THREE.add(TWO.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = THREE.add(TWO.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 15, expectedValue);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/TrailingProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/TrailingProRationTests.java
index 581e8af..5e6366d 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/TrailingProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/monthly/TrailingProRationTests.java
@@ -34,58 +34,58 @@ public class TrailingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testTargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 7, 25);
- DateTime targetDate = buildDateTime(2010, 6, 17);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 7, 25);
+ final DateTime targetDate = buildDateTime(2010, 6, 17);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, ONE);
}
@Test
public void testTargetDateInFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 7, 25);
- DateTime targetDate = buildDateTime(2010, 6, 20);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 7, 25);
+ final DateTime targetDate = buildDateTime(2010, 6, 20);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, ONE);
}
@Test
public void testTargetDateAtEndOfFirstBillingCycle() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 7, 25);
- DateTime targetDate = buildDateTime(2010, 7, 17);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 7, 25);
+ final DateTime targetDate = buildDateTime(2010, 7, 17);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
@Test
public void testTargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 7, 25);
- DateTime targetDate = buildDateTime(2010, 7, 18);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 7, 25);
+ final DateTime targetDate = buildDateTime(2010, 7, 18);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
@Test
public void testTargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 7, 25);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 7, 25);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, endDate, 17, expectedValue);
}
@Test
public void testTargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 7, 25);
- DateTime targetDate = buildDateTime(2010, 7, 30);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 7, 25);
+ final DateTime targetDate = buildDateTime(2010, 7, 30);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(THIRTY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/DoubleProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/DoubleProRationTests.java
index e6c3cf3..6aa022b 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/DoubleProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/DoubleProRationTests.java
@@ -34,9 +34,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 1);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 1);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue = FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
expectedValue = expectedValue.setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -45,9 +45,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateInFirstProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 7);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 7);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue = FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
expectedValue = expectedValue.setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -56,9 +56,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnFirstBillingCycleDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 15);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 15);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue = ONE.add(FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD));
expectedValue = expectedValue.setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -67,9 +67,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateInFullBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 1, 22);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 1, 22);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -81,9 +81,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnSecondBillingCycleDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 4, 15);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 15);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -96,9 +96,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateInSecondProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 4, 26);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 26);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -111,9 +111,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 4, 27);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 4, 27);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -126,9 +126,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRation_TargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 5, 7);
- DateTime endDate = buildDateTime(2011, 4, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 5, 7);
+ final DateTime endDate = buildDateTime(2011, 4, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -141,9 +141,9 @@ public class DoubleProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testDoubleProRationWithMultiplePeriods_TargetDateInSecondFullBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 1);
- DateTime targetDate = buildDateTime(2011, 6, 26);
- DateTime endDate = buildDateTime(2011, 8, 27);
+ final DateTime startDate = buildDateTime(2011, 1, 1);
+ final DateTime targetDate = buildDateTime(2011, 6, 26);
+ final DateTime endDate = buildDateTime(2011, 8, 27);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(NINETY_TWO, 2 * NUMBER_OF_DECIMALS, ROUNDING_METHOD);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/LeadingProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/LeadingProRationTests.java
index 18bb8af..681fac1 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/LeadingProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/LeadingProRationTests.java
@@ -34,10 +34,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 1);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -45,10 +45,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 4);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 4);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -56,10 +56,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateOnFirstBillingDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -67,10 +67,10 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_Evergreen_TargetDateAfterFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 6, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 6, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(startDate, targetDate, 13, expectedValue);
@@ -78,11 +78,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 1);
- DateTime endDate = buildDateTime(2011, 8, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 1);
+ final DateTime endDate = buildDateTime(2011, 8, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -90,11 +90,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 4);
- DateTime endDate = buildDateTime(2011, 8, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 4);
+ final DateTime endDate = buildDateTime(2011, 8, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -102,11 +102,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnFirstBillingDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 2, 13);
- DateTime endDate = buildDateTime(2011, 8, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 2, 13);
+ final DateTime endDate = buildDateTime(2011, 8, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -114,11 +114,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateInFinalBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 8, 10);
- DateTime endDate = buildDateTime(2011, 8, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 8, 10);
+ final DateTime endDate = buildDateTime(2011, 8, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -126,11 +126,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 8, 13);
- DateTime endDate = buildDateTime(2011, 8, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 8, 13);
+ final DateTime endDate = buildDateTime(2011, 8, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
@@ -138,11 +138,11 @@ public class LeadingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testLeadingProRation_WithEndDate_TargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime targetDate = buildDateTime(2011, 9, 10);
- DateTime endDate = buildDateTime(2011, 8, 13);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime targetDate = buildDateTime(2011, 9, 10);
+ final DateTime endDate = buildDateTime(2011, 8, 13);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = TWELVE.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(TWO);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 13, expectedValue);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/ProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/ProRationTests.java
index 2988dfe..20611b1 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/ProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/ProRationTests.java
@@ -34,9 +34,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_WithPhaseChange() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 10);
- DateTime phaseChangeDate = buildDateTime(2011, 2, 24);
- DateTime targetDate = buildDateTime(2011, 3, 6);
+ final DateTime startDate = buildDateTime(2011, 2, 10);
+ final DateTime phaseChangeDate = buildDateTime(2011, 2, 24);
+ final DateTime targetDate = buildDateTime(2011, 3, 6);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -48,9 +48,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_WithPhaseChange_BeforeBillCycleDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 3);
- DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
- DateTime targetDate = buildDateTime(2011, 3, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 3);
+ final DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
+ final DateTime targetDate = buildDateTime(2011, 3, 1);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -62,9 +62,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_WithPhaseChange_OnBillCycleDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 3);
- DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
- DateTime targetDate = buildDateTime(2011, 3, 3);
+ final DateTime startDate = buildDateTime(2011, 2, 3);
+ final DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
+ final DateTime targetDate = buildDateTime(2011, 3, 3);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -76,9 +76,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_WithPhaseChange_AfterBillCycleDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 3);
- DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
- DateTime targetDate = buildDateTime(2011, 3, 4);
+ final DateTime startDate = buildDateTime(2011, 2, 3);
+ final DateTime phaseChangeDate = buildDateTime(2011, 2, 17);
+ final DateTime targetDate = buildDateTime(2011, 3, 4);
BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -90,63 +90,63 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_WithChangeOfBillCycleDayToLaterDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime planChangeDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = buildDateTime(2011, 3, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime planChangeDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = buildDateTime(2011, 3, 1);
- BigDecimal expectedValue = FOURTEEN.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, planChangeDate, targetDate, 1, expectedValue);
testCalculateNumberOfBillingCycles(planChangeDate, targetDate, 15, ONE);
}
@Test
public void testPlanChange_WithChangeOfBillCycleDayToEarlierDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 20);
- DateTime planChangeDate = buildDateTime(2011, 3, 6);
- DateTime targetDate = buildDateTime(2011, 3, 9);
+ final DateTime startDate = buildDateTime(2011, 2, 20);
+ final DateTime planChangeDate = buildDateTime(2011, 3, 6);
+ final DateTime targetDate = buildDateTime(2011, 3, 9);
- BigDecimal expectedValue = FOURTEEN.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
+ final BigDecimal expectedValue = FOURTEEN.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, planChangeDate, targetDate, 20, expectedValue);
testCalculateNumberOfBillingCycles(planChangeDate, targetDate, 6, ONE);
}
@Test
public void testSinglePlan_CrossingYearBoundary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 12, 15);
- DateTime targetDate = buildDateTime(2011, 1, 16);
+ final DateTime startDate = buildDateTime(2010, 12, 15);
+ final DateTime targetDate = buildDateTime(2011, 1, 16);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, ONE);
}
@Test
public void testSinglePlan_LeapYear_StartingMidFebruary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 2, 15);
- DateTime targetDate = buildDateTime(2012, 3, 15);
+ final DateTime startDate = buildDateTime(2012, 2, 15);
+ final DateTime targetDate = buildDateTime(2012, 3, 15);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, ONE);
}
@Test
public void testSinglePlan_LeapYear_StartingBeforeFebruary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 1, 15);
- DateTime targetDate = buildDateTime(2012, 2, 3);
+ final DateTime startDate = buildDateTime(2012, 1, 15);
+ final DateTime targetDate = buildDateTime(2012, 2, 3);
testCalculateNumberOfBillingCycles(startDate, targetDate, 15, ONE);
}
@Test
public void testSinglePlan_LeapYear_IncludingAllOfFebruary() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 1, 30);
- DateTime targetDate = buildDateTime(2012, 3, 1);
+ final DateTime startDate = buildDateTime(2012, 1, 30);
+ final DateTime targetDate = buildDateTime(2012, 3, 1);
testCalculateNumberOfBillingCycles(startDate, targetDate, 30, ONE);
}
@Test
public void testSinglePlan_ChangeBCDTo31() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime planChangeDate = buildDateTime(2011, 2, 14);
- DateTime targetDate = buildDateTime(2011, 3, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime planChangeDate = buildDateTime(2011, 2, 14);
+ final DateTime targetDate = buildDateTime(2011, 3, 1);
BigDecimal expectedValue;
@@ -159,9 +159,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_ChangeBCD() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 1);
- DateTime planChangeDate = buildDateTime(2011, 2, 14);
- DateTime targetDate = buildDateTime(2011, 5, 1);
+ final DateTime startDate = buildDateTime(2011, 2, 1);
+ final DateTime planChangeDate = buildDateTime(2011, 2, 14);
+ final DateTime targetDate = buildDateTime(2011, 5, 1);
BigDecimal expectedValue;
@@ -174,11 +174,11 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testSinglePlan_LeapYearFebruaryProRation() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2012, 2, 1);
- DateTime endDate = buildDateTime(2012, 2, 15);
- DateTime targetDate = buildDateTime(2012, 2, 19);
+ final DateTime startDate = buildDateTime(2012, 2, 1);
+ final DateTime endDate = buildDateTime(2012, 2, 15);
+ final DateTime targetDate = buildDateTime(2012, 2, 19);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = FOURTEEN.divide(NINETY, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 1, expectedValue);
@@ -186,11 +186,11 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_BeforeBillingDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 7);
- DateTime changeDate = buildDateTime(2011, 2, 15);
- DateTime targetDate = buildDateTime(2011, 9, 21);
-
- BigDecimal expectedValue;
+ final DateTime startDate = buildDateTime(2011, 2, 7);
+ final DateTime changeDate = buildDateTime(2011, 2, 15);
+ final DateTime targetDate = buildDateTime(2011, 9, 21);
+
+ final BigDecimal expectedValue;
expectedValue = EIGHT.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
testCalculateNumberOfBillingCycles(startDate, changeDate, targetDate, 7, expectedValue);
@@ -200,22 +200,22 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_OnBillingDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 7);
- DateTime changeDate = buildDateTime(2011, 5, 7);
- DateTime targetDate = buildDateTime(2011, 7, 21);
+ final DateTime startDate = buildDateTime(2011, 2, 7);
+ final DateTime changeDate = buildDateTime(2011, 5, 7);
+ final DateTime targetDate = buildDateTime(2011, 7, 21);
testCalculateNumberOfBillingCycles(startDate, changeDate, targetDate, 7, ONE);
- BigDecimal expectedValue;
+ final BigDecimal expectedValue;
expectedValue = EIGHT.divide(EIGHTY_NINE, NUMBER_OF_DECIMALS, ROUNDING_METHOD).add(ONE);
testCalculateNumberOfBillingCycles(changeDate, targetDate, 15, expectedValue);
}
@Test
public void testPlanChange_AfterBillingDay() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 2, 7);
- DateTime changeDate = buildDateTime(2011, 5, 10);
- DateTime targetDate = buildDateTime(2011, 9, 21);
+ final DateTime startDate = buildDateTime(2011, 2, 7);
+ final DateTime changeDate = buildDateTime(2011, 5, 10);
+ final DateTime targetDate = buildDateTime(2011, 9, 21);
BigDecimal expectedValue;
@@ -228,9 +228,9 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testPlanChange_DoubleProRation() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 31);
- DateTime planChangeDate = buildDateTime(2011, 5, 10);
- DateTime targetDate = buildDateTime(2011, 5, 21);
+ final DateTime startDate = buildDateTime(2011, 1, 31);
+ final DateTime planChangeDate = buildDateTime(2011, 5, 10);
+ final DateTime targetDate = buildDateTime(2011, 5, 21);
BigDecimal expectedValue;
expectedValue = SEVEN.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD);
@@ -244,11 +244,11 @@ public class ProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testStartTargetEnd() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 12, 15);
- DateTime targetDate = buildDateTime(2011, 6, 15);
- DateTime endDate = buildDateTime(2011, 6, 17);
+ final DateTime startDate = buildDateTime(2010, 12, 15);
+ final DateTime targetDate = buildDateTime(2011, 6, 15);
+ final DateTime endDate = buildDateTime(2011, 6, 17);
- BigDecimal expectedValue = TWO.add(TWO.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = TWO.add(TWO.divide(NINETY_TWO, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 15, expectedValue);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/TrailingProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/TrailingProRationTests.java
index 270518d..a0b1573 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/TrailingProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/quarterly/TrailingProRationTests.java
@@ -34,58 +34,58 @@ public class TrailingProRationTests extends ProRationInAdvanceTestBase {
@Test
public void testTargetDateOnStartDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 9, 25);
- DateTime targetDate = buildDateTime(2010, 6, 17);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 9, 25);
+ final DateTime targetDate = buildDateTime(2010, 6, 17);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, ONE);
}
@Test
public void testTargetDateInFirstBillingPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 9, 25);
- DateTime targetDate = buildDateTime(2010, 6, 20);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 9, 25);
+ final DateTime targetDate = buildDateTime(2010, 6, 20);
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, ONE);
}
@Test
public void testTargetDateAtEndOfFirstBillingCycle() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 9, 25);
- DateTime targetDate = buildDateTime(2010, 9, 17);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 9, 25);
+ final DateTime targetDate = buildDateTime(2010, 9, 17);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(NINETY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(NINETY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
@Test
public void testTargetDateInProRationPeriod() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 9, 25);
- DateTime targetDate = buildDateTime(2010, 9, 18);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 9, 25);
+ final DateTime targetDate = buildDateTime(2010, 9, 18);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(NINETY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(NINETY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
@Test
public void testTargetDateOnEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 9, 25);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 9, 25);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(NINETY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(NINETY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, endDate, 17, expectedValue);
}
@Test
public void testTargetDateAfterEndDate() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2010, 6, 17);
- DateTime endDate = buildDateTime(2010, 9, 25);
- DateTime targetDate = buildDateTime(2010, 9, 30);
+ final DateTime startDate = buildDateTime(2010, 6, 17);
+ final DateTime endDate = buildDateTime(2010, 9, 25);
+ final DateTime targetDate = buildDateTime(2010, 9, 30);
- BigDecimal expectedValue = ONE.add(EIGHT.divide(NINETY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
+ final BigDecimal expectedValue = ONE.add(EIGHT.divide(NINETY_ONE, NUMBER_OF_DECIMALS, ROUNDING_METHOD));
testCalculateNumberOfBillingCycles(startDate, endDate, targetDate, 17, expectedValue);
}
-}
\ No newline at end of file
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/ValidationProRationTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/ValidationProRationTests.java
index 21dd092..30f0d4a 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/ValidationProRationTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/inAdvance/ValidationProRationTests.java
@@ -16,8 +16,6 @@
package com.ning.billing.invoice.tests.inAdvance;
-import static org.testng.Assert.assertEquals;
-
import java.math.BigDecimal;
import org.joda.time.DateTime;
@@ -29,6 +27,8 @@ import com.ning.billing.invoice.model.InAdvanceBillingMode;
import com.ning.billing.invoice.model.InvalidDateSequenceException;
import com.ning.billing.invoice.tests.ProRationTestBase;
+import static org.testng.Assert.assertEquals;
+
@Test(groups = {"fast", "invoicing", "proRation"})
public class ValidationProRationTests extends ProRationTestBase {
protected BillingPeriod getBillingPeriod() {
@@ -42,52 +42,52 @@ public class ValidationProRationTests extends ProRationTestBase {
@Test(expectedExceptions = InvalidDateSequenceException.class)
public void testTargetStartEnd() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 30);
- DateTime endDate = buildDateTime(2011, 3, 15);
- DateTime targetDate = buildDateTime(2011, 1, 15);
+ final DateTime startDate = buildDateTime(2011, 1, 30);
+ final DateTime endDate = buildDateTime(2011, 3, 15);
+ final DateTime targetDate = buildDateTime(2011, 1, 15);
calculateNumberOfBillingCycles(startDate, endDate, targetDate, 15);
}
@Test(expectedExceptions = InvalidDateSequenceException.class)
public void testTargetEndStart() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 4, 30);
- DateTime endDate = buildDateTime(2011, 3, 15);
- DateTime targetDate = buildDateTime(2011, 2, 15);
+ final DateTime startDate = buildDateTime(2011, 4, 30);
+ final DateTime endDate = buildDateTime(2011, 3, 15);
+ final DateTime targetDate = buildDateTime(2011, 2, 15);
calculateNumberOfBillingCycles(startDate, endDate, targetDate, 15);
}
@Test(expectedExceptions = InvalidDateSequenceException.class)
public void testEndTargetStart() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 3, 30);
- DateTime endDate = buildDateTime(2011, 1, 15);
- DateTime targetDate = buildDateTime(2011, 2, 15);
+ final DateTime startDate = buildDateTime(2011, 3, 30);
+ final DateTime endDate = buildDateTime(2011, 1, 15);
+ final DateTime targetDate = buildDateTime(2011, 2, 15);
calculateNumberOfBillingCycles(startDate, endDate, targetDate, 15);
}
@Test(expectedExceptions = InvalidDateSequenceException.class)
public void testEndStartTarget() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 1, 30);
- DateTime endDate = buildDateTime(2011, 1, 15);
- DateTime targetDate = buildDateTime(2011, 2, 15);
+ final DateTime startDate = buildDateTime(2011, 1, 30);
+ final DateTime endDate = buildDateTime(2011, 1, 15);
+ final DateTime targetDate = buildDateTime(2011, 2, 15);
calculateNumberOfBillingCycles(startDate, endDate, targetDate, 15);
}
@Test(expectedExceptions = InvalidDateSequenceException.class)
public void testTargetStart() throws InvalidDateSequenceException {
- DateTime startDate = buildDateTime(2011, 4, 30);
- DateTime targetDate = buildDateTime(2011, 2, 15);
+ final DateTime startDate = buildDateTime(2011, 4, 30);
+ final DateTime targetDate = buildDateTime(2011, 2, 15);
calculateNumberOfBillingCycles(startDate, targetDate, 15);
}
@Test
public void testBigDecimalTruncation() {
- BigDecimal value = new BigDecimal("1.3349573498567");
- BigDecimal truncated = value.setScale(0, BigDecimal.ROUND_DOWN).setScale(NUMBER_OF_DECIMALS);
+ final BigDecimal value = new BigDecimal("1.3349573498567");
+ final BigDecimal truncated = value.setScale(0, BigDecimal.ROUND_DOWN).setScale(NUMBER_OF_DECIMALS);
assertEquals(truncated, ONE);
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/InternationalPriceMock.java b/invoice/src/test/java/com/ning/billing/invoice/tests/InternationalPriceMock.java
index ab11024..4e7467f 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/InternationalPriceMock.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/InternationalPriceMock.java
@@ -16,18 +16,18 @@
package com.ning.billing.invoice.tests;
-import static org.testng.Assert.fail;
-
import java.math.BigDecimal;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.InternationalPrice;
import com.ning.billing.catalog.api.Price;
+import static org.testng.Assert.fail;
+
public class InternationalPriceMock implements InternationalPrice {
private final BigDecimal rate;
- public InternationalPriceMock(BigDecimal rate) {
+ public InternationalPriceMock(final BigDecimal rate) {
this.rate = rate;
}
@@ -39,13 +39,13 @@ public class InternationalPriceMock implements InternationalPrice {
}
@Override
- public BigDecimal getPrice(Currency currency) {
+ public BigDecimal getPrice(final Currency currency) {
return rate;
}
- @Override
- public boolean isZero() {
- return rate.compareTo(BigDecimal.ZERO) == 0;
- }
+ @Override
+ public boolean isZero() {
+ return rate.compareTo(BigDecimal.ZERO) == 0;
+ }
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/InvoicingTestBase.java b/invoice/src/test/java/com/ning/billing/invoice/tests/InvoicingTestBase.java
index 5beea5c..1b4efdd 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/InvoicingTestBase.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/InvoicingTestBase.java
@@ -16,8 +16,12 @@
package com.ning.billing.invoice.tests;
+import javax.annotation.Nullable;
import java.math.BigDecimal;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Currency;
@@ -27,12 +31,8 @@ import com.ning.billing.entitlement.api.SubscriptionTransitionType;
import com.ning.billing.entitlement.api.billing.BillingEvent;
import com.ning.billing.entitlement.api.billing.BillingModeType;
import com.ning.billing.entitlement.api.user.Subscription;
-import org.joda.time.DateTime;
-
import com.ning.billing.invoice.model.InvoicingConfiguration;
-import javax.annotation.Nullable;
-
public abstract class InvoicingTestBase {
protected static final int NUMBER_OF_DECIMALS = InvoicingConfiguration.getNumberOfDecimals();
protected static final int ROUNDING_METHOD = InvoicingConfiguration.getRoundingMode();
@@ -80,7 +80,7 @@ public abstract class InvoicingTestBase {
protected static final BigDecimal THREE_HUNDRED_AND_SIXTY_FIVE = new BigDecimal("365.0").setScale(NUMBER_OF_DECIMALS);
protected static final BigDecimal THREE_HUNDRED_AND_SIXTY_SIX = new BigDecimal("366.0").setScale(NUMBER_OF_DECIMALS);
- protected DateTime buildDateTime(int year, int month, int day) {
+ protected DateTime buildDateTime(final int year, final int month, final int day) {
return new DateTime(year, month, day, 0, 0, 0, 0);
}
@@ -97,64 +97,83 @@ public abstract class InvoicingTestBase {
public Account getAccount() {
return account;
}
+
@Override
public int getBillCycleDay() {
return billCycleDay;
}
+
@Override
public Subscription getSubscription() {
return subscription;
}
+
@Override
public DateTime getEffectiveDate() {
return effectiveDate;
}
+
@Override
public PlanPhase getPlanPhase() {
return planPhase;
}
+
@Override
public Plan getPlan() {
return plan;
}
+
@Override
public BillingPeriod getBillingPeriod() {
return billingPeriod;
}
+
@Override
public BillingModeType getBillingMode() {
return billingModeType;
}
+
@Override
public String getDescription() {
return description;
}
+
@Override
public BigDecimal getFixedPrice() {
return fixedPrice;
}
+
@Override
public BigDecimal getRecurringPrice() {
return recurringPrice;
}
+
@Override
public Currency getCurrency() {
return currency;
}
+
@Override
public SubscriptionTransitionType getTransitionType() {
return type;
}
+
@Override
public Long getTotalOrdering() {
return totalOrdering;
}
+
+ @Override
+ public DateTimeZone getTimeZone() {
+ return DateTimeZone.UTC;
+ }
+
@Override
- public int compareTo(BillingEvent e1) {
+ public int compareTo(final BillingEvent e1) {
if (!getSubscription().getId().equals(e1.getSubscription().getId())) { // First order by subscription
return getSubscription().getId().compareTo(e1.getSubscription().getId());
} else { // subscriptions are the same
- if (! getEffectiveDate().equals(e1.getEffectiveDate())) { // Secondly order by date
+ if (!getEffectiveDate().equals(e1.getEffectiveDate())) { // Secondly order by date
return getEffectiveDate().compareTo(e1.getEffectiveDate());
} else { // dates and subscriptions are the same
return getTotalOrdering().compareTo(e1.getTotalOrdering());
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/ProRationTestBase.java b/invoice/src/test/java/com/ning/billing/invoice/tests/ProRationTestBase.java
index 1cd4e2f..578b199 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/ProRationTestBase.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/ProRationTestBase.java
@@ -16,9 +16,6 @@
package com.ning.billing.invoice.tests;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.fail;
-
import java.math.BigDecimal;
import java.util.List;
@@ -29,13 +26,17 @@ import com.ning.billing.invoice.model.BillingMode;
import com.ning.billing.invoice.model.InvalidDateSequenceException;
import com.ning.billing.invoice.model.RecurringInvoiceItemData;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+
public abstract class ProRationTestBase extends InvoicingTestBase {
protected abstract BillingMode getBillingMode();
+
protected abstract BillingPeriod getBillingPeriod();
- protected void testCalculateNumberOfBillingCycles(DateTime startDate, DateTime targetDate, int billingCycleDay, BigDecimal expectedValue) throws InvalidDateSequenceException {
+ protected void testCalculateNumberOfBillingCycles(final DateTime startDate, final DateTime targetDate, final int billingCycleDay, final BigDecimal expectedValue) throws InvalidDateSequenceException {
try {
- BigDecimal numberOfBillingCycles;
+ final BigDecimal numberOfBillingCycles;
numberOfBillingCycles = calculateNumberOfBillingCycles(startDate, targetDate, billingCycleDay);
assertEquals(numberOfBillingCycles.compareTo(expectedValue), 0, "Actual: " + numberOfBillingCycles.toString() + "; expected: " + expectedValue.toString());
@@ -46,9 +47,9 @@ public abstract class ProRationTestBase extends InvoicingTestBase {
}
}
- protected void testCalculateNumberOfBillingCycles(DateTime startDate, DateTime endDate, DateTime targetDate, int billingCycleDay, BigDecimal expectedValue) throws InvalidDateSequenceException {
+ protected void testCalculateNumberOfBillingCycles(final DateTime startDate, final DateTime endDate, final DateTime targetDate, final int billingCycleDay, final BigDecimal expectedValue) throws InvalidDateSequenceException {
try {
- BigDecimal numberOfBillingCycles;
+ final BigDecimal numberOfBillingCycles;
numberOfBillingCycles = calculateNumberOfBillingCycles(startDate, endDate, targetDate, billingCycleDay);
assertEquals(numberOfBillingCycles.compareTo(expectedValue), 0);
@@ -59,25 +60,25 @@ public abstract class ProRationTestBase extends InvoicingTestBase {
}
}
- protected BigDecimal calculateNumberOfBillingCycles(DateTime startDate, DateTime endDate, DateTime targetDate, int billingCycleDay) throws InvalidDateSequenceException {
- List<RecurringInvoiceItemData> items = getBillingMode().calculateInvoiceItemData(startDate, endDate, targetDate, billingCycleDay, getBillingPeriod());
+ protected BigDecimal calculateNumberOfBillingCycles(final DateTime startDate, final DateTime endDate, final DateTime targetDate, final int billingCycleDay) throws InvalidDateSequenceException {
+ final List<RecurringInvoiceItemData> items = getBillingMode().calculateInvoiceItemData(startDate, endDate, targetDate, billingCycleDay, getBillingPeriod());
BigDecimal numberOfBillingCycles = ZERO;
- for (RecurringInvoiceItemData item : items) {
+ for (final RecurringInvoiceItemData item : items) {
numberOfBillingCycles = numberOfBillingCycles.add(item.getNumberOfCycles());
}
return numberOfBillingCycles.setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD);
}
- protected BigDecimal calculateNumberOfBillingCycles(DateTime startDate, DateTime targetDate, int billingCycleDay) throws InvalidDateSequenceException {
- List<RecurringInvoiceItemData> items = getBillingMode().calculateInvoiceItemData(startDate, targetDate, billingCycleDay, getBillingPeriod());
+ protected BigDecimal calculateNumberOfBillingCycles(final DateTime startDate, final DateTime targetDate, final int billingCycleDay) throws InvalidDateSequenceException {
+ final List<RecurringInvoiceItemData> items = getBillingMode().calculateInvoiceItemData(startDate, targetDate, billingCycleDay, getBillingPeriod());
BigDecimal numberOfBillingCycles = ZERO;
- for (RecurringInvoiceItemData item : items) {
+ for (final RecurringInvoiceItemData item : items) {
numberOfBillingCycles = numberOfBillingCycles.add(item.getNumberOfCycles());
}
return numberOfBillingCycles.setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD);
}
-}
\ No newline at end of file
+}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
index a302336..33d778c 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
@@ -23,6 +23,7 @@ import com.ning.billing.jaxrs.json.CustomFieldJson;
import com.ning.billing.jaxrs.util.JaxrsUriBuilder;
import com.ning.billing.jaxrs.util.TagHelper;
import com.ning.billing.util.api.CustomFieldUserApi;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.api.TagDefinitionApiException;
import com.ning.billing.util.api.TagUserApi;
import com.ning.billing.util.callcontext.CallContext;
@@ -87,6 +88,8 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
} catch (TagDefinitionApiException e) {
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
+ } catch (TagApiException e) {
+ return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
}
}
@@ -105,6 +108,8 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
} catch (TagDefinitionApiException e) {
return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
+ } catch (TagApiException e) {
+ return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
}
}
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BlockingCalculator.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BlockingCalculator.java
index e33c063..19fce2b 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BlockingCalculator.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BlockingCalculator.java
@@ -26,6 +26,7 @@ import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
@@ -199,11 +200,12 @@ public class BlockingCalculator {
final BillingPeriod billingPeriod = previousEvent.getBillingPeriod();
final SubscriptionTransitionType type = SubscriptionTransitionType.CANCEL;
final Long totalOrdering = globaltotalOrder.getAndIncrement();
+ final DateTimeZone tz = previousEvent.getTimeZone();
return new DefaultBillingEvent(account, subscription, effectiveDate, plan, planPhase,
fixedPrice, recurringPrice, currency,
billingPeriod, billCycleDay, billingModeType,
- description, totalOrdering, type);
+ description, totalOrdering, type, tz);
}
protected BillingEvent createNewReenableEvent(DateTime odEventTime, BillingEvent previousEvent) {
@@ -221,11 +223,12 @@ public class BlockingCalculator {
final BillingPeriod billingPeriod = previousEvent.getBillingPeriod();
final SubscriptionTransitionType type = SubscriptionTransitionType.RE_CREATE;
final Long totalOrdering = globaltotalOrder.getAndIncrement();
+ final DateTimeZone tz = previousEvent.getTimeZone();
return new DefaultBillingEvent(account, subscription, effectiveDate, plan, planPhase,
fixedPrice, recurringPrice, currency,
billingPeriod, billCycleDay, billingModeType,
- description, totalOrdering, type);
+ description, totalOrdering, type, tz);
}
protected Hashtable<UUID,List<Subscription>> createBundleSubscriptionMap(SortedSet<BillingEvent> billingEvents) {
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingEvent.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingEvent.java
index 35bc837..be5005b 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingEvent.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingEvent.java
@@ -19,6 +19,7 @@ package com.ning.billing.junction.plumbing.billing;
import java.math.BigDecimal;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.api.BillingPeriod;
@@ -27,7 +28,6 @@ import com.ning.billing.catalog.api.CatalogApiException;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
-
import com.ning.billing.entitlement.api.SubscriptionTransitionType;
import com.ning.billing.entitlement.api.billing.BillingEvent;
import com.ning.billing.entitlement.api.billing.BillingModeType;
@@ -49,6 +49,7 @@ public class DefaultBillingEvent implements BillingEvent {
final private BillingPeriod billingPeriod;
final private SubscriptionTransitionType type;
final private Long totalOrdering;
+ final private DateTimeZone timeZone;
public DefaultBillingEvent(Account account, SubscriptionEvent transition, Subscription subscription, int billCycleDay, Currency currency, Catalog catalog) throws CatalogApiException {
@@ -82,12 +83,13 @@ public class DefaultBillingEvent implements BillingEvent {
nextPhase.getBillingPeriod() : prevPhase.getBillingPeriod();
type = transition.getTransitionType();
totalOrdering = transition.getTotalOrdering();
+ timeZone = account.getTimeZone();
}
public DefaultBillingEvent(Account account, Subscription subscription, DateTime effectiveDate, Plan plan, PlanPhase planPhase,
BigDecimal fixedPrice, BigDecimal recurringPrice, Currency currency,
BillingPeriod billingPeriod, int billCycleDay, BillingModeType billingModeType,
- String description, long totalOrdering, SubscriptionTransitionType type) {
+ String description, long totalOrdering, SubscriptionTransitionType type, DateTimeZone timeZone) {
this.account = account;
this.subscription = subscription;
this.effectiveDate = effectiveDate;
@@ -102,6 +104,7 @@ public class DefaultBillingEvent implements BillingEvent {
this.description = description;
this.type = type;
this.totalOrdering = totalOrdering;
+ this.timeZone = timeZone;
}
@@ -265,4 +268,9 @@ public class DefaultBillingEvent implements BillingEvent {
result = 31 * result + totalOrdering.hashCode();
return result;
}
+
+ @Override
+ public DateTimeZone getTimeZone() {
+ return timeZone;
+ }
}
\ No newline at end of file
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
index 68469b6..f4aab90 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
@@ -253,6 +253,7 @@ public class TestBillingApi {
((ZombieControl)account).addResult("getBillCycleDay", 32);
((ZombieControl)account).addResult("getCurrency", Currency.USD);
((ZombieControl)account).addResult("getId", UUID.randomUUID());
+ ((ZombieControl)account).addResult("getTimeZone", DateTimeZone.UTC);
((ZombieControl)accountApi).addResult("getAccountById", account);
BillCycleDayCalculator bcdCalculator = new BillCycleDayCalculator(catalogService, entitlementApi);
@@ -318,6 +319,7 @@ public class TestBillingApi {
((ZombieControl)account).addResult("getBillCycleDay", 32);
((ZombieControl)account).addResult("getCurrency", Currency.USD);
((ZombieControl)account).addResult("getId", UUID.randomUUID());
+ ((ZombieControl)account).addResult("getTimeZone", DateTimeZone.UTC);
((ZombieControl)accountApi).addResult("getAccountById", account);
((MockCatalog)catalogService.getFullCatalog()).setBillingAlignment(BillingAlignment.ACCOUNT);
@@ -351,6 +353,7 @@ public class TestBillingApi {
((ZombieControl)account).addResult("getBillCycleDay", 1).addResult("getTimeZone", DateTimeZone.UTC);
((ZombieControl)account).addResult("getCurrency", Currency.USD);
((ZombieControl)account).addResult("getId", UUID.randomUUID());
+ ((ZombieControl)account).addResult("getTimeZone", DateTimeZone.UTC);
AccountUserApi accountApi = BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class);
((ZombieControl)accountApi).addResult("getAccountById", account);
@@ -389,6 +392,7 @@ public class TestBillingApi {
Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
((ZombieControl)account).addResult("getBillCycleDay", 32);
((ZombieControl)account).addResult("getCurrency", Currency.USD);
+ ((ZombieControl)account).addResult("getTimeZone", DateTimeZone.UTC);
((ZombieControl)accountApi).addResult("getAccountById", account);
((ZombieControl)account).addResult("getId", UUID.randomUUID());
@@ -551,7 +555,7 @@ public class TestBillingApi {
Assert.assertEquals(BCD, event.getBillCycleDay());
Assert.assertEquals(id, event.getSubscription().getId());
- Assert.assertEquals(time, event.getEffectiveDate());
+ Assert.assertEquals(time.getDayOfMonth(), event.getEffectiveDate().getDayOfMonth());
Assert.assertEquals(nextPhase, event.getPlanPhase());
Assert.assertEquals(nextPlan, event.getPlan());
Assert.assertEquals(nextPhase.getBillingPeriod(), event.getBillingPeriod());
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
index b501c98..9ca10cd 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
@@ -30,6 +30,7 @@ import java.util.TreeSet;
import java.util.UUID;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -557,11 +558,12 @@ public class TestBlockingCalculator {
final BillingPeriod billingPeriod = BillingPeriod.MONTHLY;
final SubscriptionTransitionType type = SubscriptionTransitionType.CHANGE;
final Long totalOrdering = 0L;
+ final DateTimeZone tz = DateTimeZone.UTC;
return new DefaultBillingEvent(account, subscription, effectiveDate, plan, planPhase,
fixedPrice, recurringPrice, currency,
billingPeriod, billCycleDay, billingModeType,
- description, totalOrdering, type);
+ description, totalOrdering, type, tz);
}
@@ -629,7 +631,7 @@ public class TestBlockingCalculator {
private class MockBillingEvent extends DefaultBillingEvent {
public MockBillingEvent() {
super(account, subscription1, clock.getUTCNow(), null, null, BigDecimal.ZERO, BigDecimal.TEN, Currency.USD, BillingPeriod.ANNUAL,
- 4, BillingModeType.IN_ADVANCE, "", 3L, SubscriptionTransitionType.CREATE);
+ 4, BillingModeType.IN_ADVANCE, "", 3L, SubscriptionTransitionType.CREATE, DateTimeZone.UTC);
}
}
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
index 92e2bf2..10fdc1c 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
@@ -25,6 +25,7 @@ import java.util.UUID;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -142,7 +143,7 @@ public class TestDefaultBillingEvent {
return new DefaultBillingEvent(null, sub , effectiveDate,
shotgun, shotgunMonthly,
BigDecimal.ZERO, null, Currency.USD, BillingPeriod.NO_BILLING_PERIOD, billCycleDay,
- BillingModeType.IN_ADVANCE, "Test Event 1", totalOrdering, type);
+ BillingModeType.IN_ADVANCE, "Test Event 1", totalOrdering, type, DateTimeZone.UTC);
}
private MockPlanPhase createMockMonthlyPlanPhase(@Nullable final BigDecimal recurringRate,
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagService.java b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagService.java
index e5627e5..0a1fa28 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagService.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagService.java
@@ -21,8 +21,8 @@ import com.ning.billing.util.api.TagService;
import com.ning.billing.util.api.TagUserApi;
public class DefaultTagService implements TagService {
-
private static final String TAG_DEFINITION_SERVICE_NAME = "tag-service";
+
private final TagUserApi api;
@Inject
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
index 4a065de..075e10e 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
@@ -21,6 +21,7 @@ import java.util.Map;
import java.util.UUID;
import com.google.inject.Inject;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.api.TagDefinitionApiException;
import com.ning.billing.util.api.TagUserApi;
import com.ning.billing.util.callcontext.CallContext;
@@ -35,7 +36,7 @@ public class DefaultTagUserApi implements TagUserApi {
private final TagDao tagDao;
@Inject
- public DefaultTagUserApi(TagDefinitionDao tagDefinitionDao, TagDao tagDao) {
+ public DefaultTagUserApi(final TagDefinitionDao tagDefinitionDao, final TagDao tagDao) {
this.tagDefinitionDao = tagDefinitionDao;
this.tagDao = tagDao;
}
@@ -51,41 +52,38 @@ public class DefaultTagUserApi implements TagUserApi {
}
@Override
- public void deleteAllTagsForDefinition(final String definitionName, final CallContext context)
- throws TagDefinitionApiException {
- tagDefinitionDao.deleteAllTagsForDefinition(definitionName, context);
+ public void deleteTagDefinition(final String definitionName, final CallContext context) throws TagDefinitionApiException {
+ tagDefinitionDao.deleteTagDefinition(definitionName, context);
}
@Override
- public void deleteTagDefinition(final String definitionName, final CallContext context) throws TagDefinitionApiException {
- tagDefinitionDao.deleteAllTagsForDefinition(definitionName, context);
+ public TagDefinition getTagDefinition(final String name)
+ throws TagDefinitionApiException {
+ return tagDefinitionDao.getByName(name);
}
- @Override
- public TagDefinition getTagDefinition(final String name)
- throws TagDefinitionApiException {
- return tagDefinitionDao.getByName(name);
- }
-
@Override
- public void addTags(UUID objectId, ObjectType objectType, List<TagDefinition> tagDefinitions, CallContext context) {
- tagDao.insertTags(objectId, objectType, tagDefinitions, context);
+ public void addTags(final UUID objectId, final ObjectType objectType, final List<TagDefinition> tagDefinitions, final CallContext context) throws TagApiException {
+ // TODO: consider making this batch
+ for (final TagDefinition tagDefinition : tagDefinitions) {
+ tagDao.insertTag(objectId, objectType, tagDefinition, context);
+ }
}
@Override
- public void addTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context) {
+ public void addTag(final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final CallContext context) throws TagApiException {
tagDao.insertTag(objectId, objectType, tagDefinition, context);
}
@Override
- public void removeTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context) {
+ public void removeTag(final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final CallContext context) throws TagApiException {
tagDao.deleteTag(objectId, objectType, tagDefinition, context);
}
@Override
- public void removeTags(UUID objectId, ObjectType objectType, List<TagDefinition> tagDefinitions, CallContext context) {
+ public void removeTags(final UUID objectId, final ObjectType objectType, final List<TagDefinition> tagDefinitions, final CallContext context) throws TagApiException {
// TODO: consider making this batch
- for (TagDefinition tagDefinition : tagDefinitions) {
+ for (final TagDefinition tagDefinition : tagDefinitions) {
tagDao.deleteTag(objectId, objectType, tagDefinition, context);
}
}
@@ -94,26 +92,4 @@ public class DefaultTagUserApi implements TagUserApi {
public Map<String, Tag> getTags(final UUID objectId, final ObjectType objectType) {
return tagDao.loadEntities(objectId, objectType);
}
-
-// @Override
-// public Tag createControlTags(String controlTagName) throws TagDefinitionApiException {
-// ControlTagType type = null;
-// for(ControlTagType t : ControlTagType.values()) {
-// if(t.toString().equals(controlTagName)) {
-// type = t;
-// }
-// }
-//
-// if(type == null) {
-// throw new TagDefinitionApiException(ErrorCode.CONTROL_TAG_DOES_NOT_EXIST, controlTagName);
-// }
-// return new DefaultControlTag(type);
-// }
-//
-// @Override
-// public Tag createDescriptiveTags(List) throws TagDefinitionApiException {
-// TagDefinition tagDefinition = getTagDefinition(tagDefinitionName);
-//
-// return new DescriptiveTag(tagDefinition);
-// }
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java
new file mode 100644
index 0000000..3f24ac4
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.ControlTagCreationEvent;
+
+public class DefaultControlTagCreationEvent implements ControlTagCreationEvent {
+ private final UUID tagId;
+ private final UUID objectId;
+ private final ObjectType objectType;
+ private final TagDefinition tagDefinition;
+ private final UUID userToken;
+
+ @JsonCreator
+ public DefaultControlTagCreationEvent(@JsonProperty("tagId") final UUID tagId,
+ @JsonProperty("objectId") final UUID objectId,
+ @JsonProperty("objectType") final ObjectType objectType,
+ @JsonProperty("tagDefinition") final TagDefinition tagDefinition,
+ @JsonProperty("userToken") final UUID userToken) {
+ this.tagId = tagId;
+ this.objectId = objectId;
+ this.objectType = objectType;
+ this.tagDefinition = tagDefinition;
+ this.userToken = userToken;
+ }
+
+ @Override
+ public UUID getTagId() {
+ return tagId;
+ }
+
+ @Override
+ public UUID getObjectId() {
+ return objectId;
+ }
+
+ @Override
+ public ObjectType getObjectType() {
+ return objectType;
+ }
+
+ @Override
+ public TagDefinition getTagDefinition() {
+ return tagDefinition;
+ }
+
+ @JsonIgnore
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.CONTROL_TAG_CREATION;
+ }
+
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultControlTagCreationEvent");
+ sb.append("{objectId=").append(objectId);
+ sb.append(", tagId=").append(tagId);
+ sb.append(", objectType=").append(objectType);
+ sb.append(", tagDefinition=").append(tagDefinition);
+ sb.append(", userToken=").append(userToken);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultControlTagCreationEvent that = (DefaultControlTagCreationEvent) o;
+
+ if (objectId != null ? !objectId.equals(that.objectId) : that.objectId != null) {
+ return false;
+ }
+ if (objectType != that.objectType) {
+ return false;
+ }
+ if (tagDefinition != null ? !tagDefinition.equals(that.tagDefinition) : that.tagDefinition != null) {
+ return false;
+ }
+ if (tagId != null ? !tagId.equals(that.tagId) : that.tagId != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = tagId != null ? tagId.hashCode() : 0;
+ result = 31 * result + (objectId != null ? objectId.hashCode() : 0);
+ result = 31 * result + (objectType != null ? objectType.hashCode() : 0);
+ result = 31 * result + (tagDefinition != null ? tagDefinition.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionCreationEvent.java
new file mode 100644
index 0000000..f21db81
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionCreationEvent.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.ControlTagDefinitionCreationEvent;
+
+public class DefaultControlTagDefinitionCreationEvent implements ControlTagDefinitionCreationEvent {
+ private final UUID tagDefinitionId;
+ private final TagDefinition tagDefinition;
+ private final UUID userToken;
+
+ @JsonCreator
+ public DefaultControlTagDefinitionCreationEvent(@JsonProperty("tagDefinitionId") final UUID tagDefinitionId,
+ @JsonProperty("tagDefinition") final TagDefinition tagDefinition,
+ @JsonProperty("userToken") final UUID userToken) {
+ this.tagDefinitionId = tagDefinitionId;
+ this.tagDefinition = tagDefinition;
+ this.userToken = userToken;
+ }
+
+ @Override
+ public UUID getTagDefinitionId() {
+ return tagDefinitionId;
+ }
+
+ @Override
+ public TagDefinition getTagDefinition() {
+ return tagDefinition;
+ }
+
+ @JsonIgnore
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.CONTROL_TAGDEFINITION_CREATION;
+ }
+
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultControlTagDefinitionCreationEvent");
+ sb.append("{tagDefinition=").append(tagDefinition);
+ sb.append(", tagDefinitionId=").append(tagDefinitionId);
+ sb.append(", userToken=").append(userToken);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultControlTagDefinitionCreationEvent that = (DefaultControlTagDefinitionCreationEvent) o;
+
+ if (tagDefinition != null ? !tagDefinition.equals(that.tagDefinition) : that.tagDefinition != null) {
+ return false;
+ }
+ if (tagDefinitionId != null ? !tagDefinitionId.equals(that.tagDefinitionId) : that.tagDefinitionId != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = tagDefinitionId != null ? tagDefinitionId.hashCode() : 0;
+ result = 31 * result + (tagDefinition != null ? tagDefinition.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionDeletionEvent.java
new file mode 100644
index 0000000..386b25b
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionDeletionEvent.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.ControlTagDefinitionDeletionEvent;
+
+public class DefaultControlTagDefinitionDeletionEvent implements ControlTagDefinitionDeletionEvent {
+ private final UUID tagDefinitionId;
+ private final TagDefinition tagDefinition;
+ private final UUID userToken;
+
+ @JsonCreator
+ public DefaultControlTagDefinitionDeletionEvent(@JsonProperty("tagDefinitionId") final UUID tagDefinitionId,
+ @JsonProperty("tagDefinition") final TagDefinition tagDefinition,
+ @JsonProperty("userToken") final UUID userToken) {
+ this.tagDefinitionId = tagDefinitionId;
+ this.tagDefinition = tagDefinition;
+ this.userToken = userToken;
+ }
+
+ @Override
+ public UUID getTagDefinitionId() {
+ return tagDefinitionId;
+ }
+
+ @Override
+ public TagDefinition getTagDefinition() {
+ return tagDefinition;
+ }
+
+ @JsonIgnore
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.CONTROL_TAGDEFINITION_DELETION;
+ }
+
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultControlTagDefinitionDeletionEvent");
+ sb.append("{tagDefinition=").append(tagDefinition);
+ sb.append(", tagDefinitionId=").append(tagDefinitionId);
+ sb.append(", userToken=").append(userToken);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultControlTagDefinitionDeletionEvent that = (DefaultControlTagDefinitionDeletionEvent) o;
+
+ if (tagDefinition != null ? !tagDefinition.equals(that.tagDefinition) : that.tagDefinition != null) {
+ return false;
+ }
+ if (tagDefinitionId != null ? !tagDefinitionId.equals(that.tagDefinitionId) : that.tagDefinitionId != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = tagDefinitionId != null ? tagDefinitionId.hashCode() : 0;
+ result = 31 * result + (tagDefinition != null ? tagDefinition.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java
new file mode 100644
index 0000000..326d50f
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.ControlTagDeletionEvent;
+
+public class DefaultControlTagDeletionEvent implements ControlTagDeletionEvent {
+ private final UUID tagId;
+ final UUID objectId;
+ final ObjectType objectType;
+ final TagDefinition tagDefinition;
+ final UUID userToken;
+
+ @JsonCreator
+ public DefaultControlTagDeletionEvent(@JsonProperty("tagId") final UUID tagId,
+ @JsonProperty("objectId") final UUID objectId,
+ @JsonProperty("objectType") final ObjectType objectType,
+ @JsonProperty("tagDefinition") final TagDefinition tagDefinition,
+ @JsonProperty("userToken") final UUID userToken) {
+ this.tagId = tagId;
+ this.objectId = objectId;
+ this.objectType = objectType;
+ this.tagDefinition = tagDefinition;
+ this.userToken = userToken;
+ }
+
+ @Override
+ public UUID getTagId() {
+ return tagId;
+ }
+
+ @Override
+ public UUID getObjectId() {
+ return objectId;
+ }
+
+ @Override
+ public ObjectType getObjectType() {
+ return objectType;
+ }
+
+ @Override
+ public TagDefinition getTagDefinition() {
+ return tagDefinition;
+ }
+
+ @JsonIgnore
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.CONTROL_TAG_DELETION;
+ }
+
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultControlTagDeletionEvent");
+ sb.append("{objectId=").append(objectId);
+ sb.append(", tagId=").append(tagId);
+ sb.append(", objectType=").append(objectType);
+ sb.append(", tagDefinition=").append(tagDefinition);
+ sb.append(", userToken=").append(userToken);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultControlTagDeletionEvent that = (DefaultControlTagDeletionEvent) o;
+
+ if (objectId != null ? !objectId.equals(that.objectId) : that.objectId != null) {
+ return false;
+ }
+ if (objectType != that.objectType) {
+ return false;
+ }
+ if (tagDefinition != null ? !tagDefinition.equals(that.tagDefinition) : that.tagDefinition != null) {
+ return false;
+ }
+ if (tagId != null ? !tagId.equals(that.tagId) : that.tagId != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = tagId != null ? tagId.hashCode() : 0;
+ result = 31 * result + (objectId != null ? objectId.hashCode() : 0);
+ result = 31 * result + (objectType != null ? objectType.hashCode() : 0);
+ result = 31 * result + (tagDefinition != null ? tagDefinition.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java
new file mode 100644
index 0000000..ae386f1
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.UserTagCreationEvent;
+
+public class DefaultUserTagCreationEvent implements UserTagCreationEvent {
+ private final UUID tagId;
+ private final UUID objectId;
+ private final ObjectType objectType;
+ private final TagDefinition tagDefinition;
+ private final UUID userToken;
+
+ @JsonCreator
+ public DefaultUserTagCreationEvent(@JsonProperty("tagId") final UUID tagId,
+ @JsonProperty("objectId") final UUID objectId,
+ @JsonProperty("objectType") final ObjectType objectType,
+ @JsonProperty("tagDefinition") final TagDefinition tagDefinition,
+ @JsonProperty("userToken") final UUID userToken) {
+ this.tagId = tagId;
+ this.objectId = objectId;
+ this.objectType = objectType;
+ this.tagDefinition = tagDefinition;
+ this.userToken = userToken;
+ }
+
+ @Override
+ public UUID getTagId() {
+ return tagId;
+ }
+
+ @Override
+ public UUID getObjectId() {
+ return objectId;
+ }
+
+ @Override
+ public ObjectType getObjectType() {
+ return objectType;
+ }
+
+ @Override
+ public TagDefinition getTagDefinition() {
+ return tagDefinition;
+ }
+
+ @JsonIgnore
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.USER_TAG_CREATION;
+ }
+
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultUserTagCreationEvent");
+ sb.append("{objectId=").append(objectId);
+ sb.append(", tagId=").append(tagId);
+ sb.append(", objectType=").append(objectType);
+ sb.append(", tagDefinition=").append(tagDefinition);
+ sb.append(", userToken=").append(userToken);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultUserTagCreationEvent that = (DefaultUserTagCreationEvent) o;
+
+ if (objectId != null ? !objectId.equals(that.objectId) : that.objectId != null) {
+ return false;
+ }
+ if (objectType != that.objectType) {
+ return false;
+ }
+ if (tagDefinition != null ? !tagDefinition.equals(that.tagDefinition) : that.tagDefinition != null) {
+ return false;
+ }
+ if (tagId != null ? !tagId.equals(that.tagId) : that.tagId != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = tagId != null ? tagId.hashCode() : 0;
+ result = 31 * result + (objectId != null ? objectId.hashCode() : 0);
+ result = 31 * result + (objectType != null ? objectType.hashCode() : 0);
+ result = 31 * result + (tagDefinition != null ? tagDefinition.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionCreationEvent.java
new file mode 100644
index 0000000..5d86e4b
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionCreationEvent.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.UserTagDefinitionCreationEvent;
+
+public class DefaultUserTagDefinitionCreationEvent implements UserTagDefinitionCreationEvent {
+ private final UUID tagDefinitionId;
+ private final TagDefinition tagDefinition;
+ private final UUID userToken;
+
+ @JsonCreator
+ public DefaultUserTagDefinitionCreationEvent(@JsonProperty("tagDefinitionId") final UUID tagDefinitionId,
+ @JsonProperty("tagDefinition") final TagDefinition tagDefinition,
+ @JsonProperty("userToken") final UUID userToken) {
+ this.tagDefinitionId = tagDefinitionId;
+ this.tagDefinition = tagDefinition;
+ this.userToken = userToken;
+ }
+
+ @Override
+ public UUID getTagDefinitionId() {
+ return tagDefinitionId;
+ }
+
+ @Override
+ public TagDefinition getTagDefinition() {
+ return tagDefinition;
+ }
+
+ @JsonIgnore
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.USER_TAGDEFINITION_CREATION;
+ }
+
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultUserTagDefinitionCreationEvent");
+ sb.append("{tagDefinition=").append(tagDefinition);
+ sb.append(", tagDefinitionId=").append(tagDefinitionId);
+ sb.append(", userToken=").append(userToken);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultUserTagDefinitionCreationEvent that = (DefaultUserTagDefinitionCreationEvent) o;
+
+ if (tagDefinition != null ? !tagDefinition.equals(that.tagDefinition) : that.tagDefinition != null) {
+ return false;
+ }
+ if (tagDefinitionId != null ? !tagDefinitionId.equals(that.tagDefinitionId) : that.tagDefinitionId != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = tagDefinitionId != null ? tagDefinitionId.hashCode() : 0;
+ result = 31 * result + (tagDefinition != null ? tagDefinition.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionDeletionEvent.java
new file mode 100644
index 0000000..a324d49
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionDeletionEvent.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.UserTagDefinitionDeletionEvent;
+
+public class DefaultUserTagDefinitionDeletionEvent implements UserTagDefinitionDeletionEvent {
+ private final UUID tagDefinitionId;
+ private final TagDefinition tagDefinition;
+ private final UUID userToken;
+
+ @JsonCreator
+ public DefaultUserTagDefinitionDeletionEvent(@JsonProperty("tagDefinitionId") final UUID tagDefinitionId,
+ @JsonProperty("tagDefinition") final TagDefinition tagDefinition,
+ @JsonProperty("userToken") final UUID userToken) {
+ this.tagDefinitionId = tagDefinitionId;
+ this.tagDefinition = tagDefinition;
+ this.userToken = userToken;
+ }
+
+ @Override
+ public UUID getTagDefinitionId() {
+ return tagDefinitionId;
+ }
+
+ @Override
+ public TagDefinition getTagDefinition() {
+ return tagDefinition;
+ }
+
+ @JsonIgnore
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.USER_TAGDEFINITION_DELETION;
+ }
+
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultUserTagDefinitionDeletionEvent");
+ sb.append("{tagDefinition=").append(tagDefinition);
+ sb.append(", tagDefinitionId=").append(tagDefinitionId);
+ sb.append(", userToken=").append(userToken);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultUserTagDefinitionDeletionEvent that = (DefaultUserTagDefinitionDeletionEvent) o;
+
+ if (tagDefinition != null ? !tagDefinition.equals(that.tagDefinition) : that.tagDefinition != null) {
+ return false;
+ }
+ if (tagDefinitionId != null ? !tagDefinitionId.equals(that.tagDefinitionId) : that.tagDefinitionId != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = tagDefinitionId != null ? tagDefinitionId.hashCode() : 0;
+ result = 31 * result + (tagDefinition != null ? tagDefinition.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java
new file mode 100644
index 0000000..a19f97b
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.UserTagDeletionEvent;
+
+public class DefaultUserTagDeletionEvent implements UserTagDeletionEvent {
+ private final UUID tagId;
+ private final UUID objectId;
+ private final ObjectType objectType;
+ private final TagDefinition tagDefinition;
+ private final UUID userToken;
+
+ @JsonCreator
+ public DefaultUserTagDeletionEvent(@JsonProperty("tagId") final UUID tagId,
+ @JsonProperty("objectId") final UUID objectId,
+ @JsonProperty("objectType") final ObjectType objectType,
+ @JsonProperty("tagDefinition") final TagDefinition tagDefinition,
+ @JsonProperty("userToken") final UUID userToken) {
+ this.tagId = tagId;
+ this.objectId = objectId;
+ this.objectType = objectType;
+ this.tagDefinition = tagDefinition;
+ this.userToken = userToken;
+ }
+
+ @Override
+ public UUID getTagId() {
+ return tagId;
+ }
+
+ @Override
+ public UUID getObjectId() {
+ return objectId;
+ }
+
+ @Override
+ public ObjectType getObjectType() {
+ return objectType;
+ }
+
+ @Override
+ public TagDefinition getTagDefinition() {
+ return tagDefinition;
+ }
+
+ @JsonIgnore
+ @Override
+ public BusEventType getBusEventType() {
+ return BusEventType.USER_TAG_DELETION;
+ }
+
+ @Override
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultUserTagDeletionEvent");
+ sb.append("{objectId=").append(objectId);
+ sb.append(", tagId=").append(tagId);
+ sb.append(", objectType=").append(objectType);
+ sb.append(", tagDefinition=").append(tagDefinition);
+ sb.append(", userToken=").append(userToken);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultUserTagDeletionEvent that = (DefaultUserTagDeletionEvent) o;
+
+ if (objectId != null ? !objectId.equals(that.objectId) : that.objectId != null) {
+ return false;
+ }
+ if (objectType != that.objectType) {
+ return false;
+ }
+ if (tagDefinition != null ? !tagDefinition.equals(that.tagDefinition) : that.tagDefinition != null) {
+ return false;
+ }
+ if (tagId != null ? !tagId.equals(that.tagId) : that.tagId != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = tagId != null ? tagId.hashCode() : 0;
+ result = 31 * result + (objectId != null ? objectId.hashCode() : 0);
+ result = 31 * result + (objectType != null ? objectType.hashCode() : 0);
+ result = 31 * result + (tagDefinition != null ? tagDefinition.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java b/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java
new file mode 100644
index 0000000..9160731
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.ControlTagCreationEvent;
+import com.ning.billing.util.tag.api.ControlTagDefinitionCreationEvent;
+import com.ning.billing.util.tag.api.ControlTagDefinitionDeletionEvent;
+import com.ning.billing.util.tag.api.ControlTagDeletionEvent;
+import com.ning.billing.util.tag.api.UserTagCreationEvent;
+import com.ning.billing.util.tag.api.UserTagDefinitionCreationEvent;
+import com.ning.billing.util.tag.api.UserTagDefinitionDeletionEvent;
+import com.ning.billing.util.tag.api.UserTagDeletionEvent;
+
+public class TagEventBuilder {
+ public UserTagDefinitionCreationEvent newUserTagDefinitionCreationEvent(final UUID tagDefinitionId, final TagDefinition tagDefinition, final UUID userToken) {
+ return new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken);
+ }
+
+ public UserTagDefinitionDeletionEvent newUserTagDefinitionDeletionEvent(final UUID tagDefinitionId, final TagDefinition tagDefinition, final UUID userToken) {
+ return new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken);
+ }
+
+ public ControlTagDefinitionCreationEvent newControlTagDefinitionCreationEvent(final UUID tagDefinitionId, final TagDefinition tagDefinition, final UUID userToken) {
+ return new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken);
+ }
+
+ public ControlTagDefinitionDeletionEvent newControlTagDefinitionDeletionEvent(final UUID tagDefinitionId, final TagDefinition tagDefinition, final UUID userToken) {
+ return new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken);
+ }
+
+ public UserTagCreationEvent newUserTagCreationEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final UUID userToken) {
+ return new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ }
+
+ public UserTagDeletionEvent newUserTagDeletionEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final UUID userToken) {
+ return new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ }
+
+ public ControlTagCreationEvent newControlTagCreationEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final UUID userToken) {
+ return new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ }
+
+ public ControlTagDeletionEvent newControlTagDeletionEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final UUID userToken) {
+ return new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
index a803660..67410ee 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
@@ -16,7 +16,6 @@
package com.ning.billing.util.tag.dao;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -25,12 +24,17 @@ import java.util.UUID;
import org.skife.jdbi.v2.IDBI;
import org.skife.jdbi.v2.Transaction;
import org.skife.jdbi.v2.TransactionStatus;
+import org.skife.jdbi.v2.exceptions.TransactionFailedException;
import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
-import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.api.TagApiException;
+import com.ning.billing.util.api.TagDefinitionApiException;
+import com.ning.billing.util.bus.Bus;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.dao.AuditedCollectionDaoBase;
import com.ning.billing.util.dao.EntityAudit;
@@ -39,109 +43,132 @@ import com.ning.billing.util.dao.Mapper;
import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
-import com.ning.billing.util.tag.ControlTagType;
-import com.ning.billing.util.tag.DefaultControlTag;
-import com.ning.billing.util.tag.DescriptiveTag;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.TagEvent;
+import com.ning.billing.util.tag.api.user.TagEventBuilder;
public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements TagDao {
+ private static final Logger log = LoggerFactory.getLogger(AuditedTagDao.class);
+
private final TagSqlDao tagSqlDao;
+ private final TagEventBuilder tagEventBuilder;
+ private final Bus bus;
@Inject
- public AuditedTagDao(final IDBI dbi) {
+ public AuditedTagDao(final IDBI dbi, final TagEventBuilder tagEventBuilder, final Bus bus) {
+ this.tagEventBuilder = tagEventBuilder;
+ this.bus = bus;
this.tagSqlDao = dbi.onDemand(TagSqlDao.class);
}
@Override
- protected Tag getEquivalenceObjectFor(Tag obj) {
+ protected Tag getEquivalenceObjectFor(final Tag obj) {
return obj;
}
@Override
- public void insertTag(final UUID objectId, final ObjectType objectType,
- final TagDefinition tagDefinition, final CallContext context) {
+ public void insertTag(final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final CallContext context) {
tagSqlDao.inTransaction(new Transaction<Void, TagSqlDao>() {
@Override
public Void inTransaction(final TagSqlDao tagSqlDao, final TransactionStatus status) throws Exception {
- String tagId = UUID.randomUUID().toString();
- String tagName = tagDefinition.getName();
- tagSqlDao.addTagFromTransaction(tagId, tagName, objectId.toString(), objectType, context);
+ final String tagId = UUID.randomUUID().toString();
+ final String tagName = tagDefinition.getName();
- Tag tag = tagSqlDao.findTag(tagName, objectId.toString(), objectType);
- List<Tag> tagList = new ArrayList<Tag>();
- tagList.add(tag);
+ // Create the tag
+ tagSqlDao.addTagFromTransaction(tagId, tagName, objectId.toString(), objectType, context);
- List<Mapper<UUID, Long>> recordIds = tagSqlDao.getRecordIds(objectId.toString(), objectType);
- Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
+ final Tag tag = tagSqlDao.findTag(tagName, objectId.toString(), objectType);
+ final List<Tag> tagList = Arrays.asList(tag);
- List<EntityHistory<Tag>> entityHistories = new ArrayList<EntityHistory<Tag>>();
- entityHistories.addAll(convertToHistory(tagList, recordIdMap, ChangeType.INSERT));
+ // Gather the tag ids for this object id
+ final List<Mapper<UUID, Long>> recordIds = tagSqlDao.getRecordIds(objectId.toString(), objectType);
+ final Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
- Long maxHistoryRecordId = tagSqlDao.getMaxHistoryRecordId();
+ // Update the history table
+ final List<EntityHistory<Tag>> entityHistories = convertToHistory(tagList, recordIdMap, ChangeType.INSERT);
+ final Long maxHistoryRecordId = tagSqlDao.getMaxHistoryRecordId();
tagSqlDao.addHistoryFromTransaction(objectId.toString(), objectType, entityHistories, context);
- // have to fetch history record ids to update audit log
- List<Mapper<Long, Long>> historyRecordIds = tagSqlDao.getHistoryRecordIds(maxHistoryRecordId);
- Map<Long, Long> historyRecordIdMap = convertToAuditMap(historyRecordIds);
- List<EntityAudit> entityAudits = convertToAudits(entityHistories, historyRecordIdMap);
+ // Have to fetch the history record ids to update the audit log
+ final List<Mapper<Long, Long>> historyRecordIds = tagSqlDao.getHistoryRecordIds(maxHistoryRecordId);
+ final Map<Long, Long> historyRecordIdMap = convertToAuditMap(historyRecordIds);
+ final List<EntityAudit> entityAudits = convertToAudits(entityHistories, historyRecordIdMap);
tagSqlDao.insertAuditFromTransaction(entityAudits, context);
+ // Post an event to the Bus
+ final TagEvent tagEvent;
+ if (tagDefinition.isControlTag()) {
+ tagEvent = tagEventBuilder.newControlTagCreationEvent(tag.getId(), objectId, objectType, tagDefinition, context.getUserToken());
+ } else {
+ tagEvent = tagEventBuilder.newUserTagCreationEvent(tag.getId(), objectId, objectType, tagDefinition, context.getUserToken());
+ }
+ try {
+ bus.postFromTransaction(tagEvent, AuditedTagDao.this.tagSqlDao);
+ } catch (Bus.EventBusException e) {
+ log.warn("Failed to post tag creation event for tag " + tag.getId().toString(), e);
+ }
+
return null;
}
});
}
@Override
- public void insertTags(UUID objectId, ObjectType objectType, List<TagDefinition> tagDefinitions, CallContext context) {
- List<Tag> tags = new ArrayList<Tag>();
- for (TagDefinition tagDefinition : tagDefinitions) {
- if (tagDefinition.isControlTag()) {
- ControlTagType controlTagType = ControlTagType.valueOf(tagDefinition.getName());
- tags.add(new DefaultControlTag(controlTagType));
+ public void deleteTag(final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final CallContext context) throws TagApiException {
+ try {
+ tagSqlDao.inTransaction(new Transaction<Void, TagSqlDao>() {
+ @Override
+ public Void inTransaction(final TagSqlDao tagSqlDao, final TransactionStatus status) throws Exception {
+ // Make sure the tag exists
+ final String tagName = tagDefinition.getName();
+ final Tag tag = tagSqlDao.findTag(tagName, objectId.toString(), objectType);
+ if (tag == null) {
+ throw new TagApiException(ErrorCode.TAG_DOES_NOT_EXIST, tagName);
+ }
+
+ final List<Tag> tagList = Arrays.asList(tag);
+
+ // Before the deletion, gather the tag ids for this object id
+ final List<Mapper<UUID, Long>> recordIds = tagSqlDao.getRecordIds(objectId.toString(), objectType);
+ final Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
+
+ // Delete the tag
+ tagSqlDao.deleteFromTransaction(objectId.toString(), objectType, tagList, context);
+
+ // Update the history table
+ final List<EntityHistory<Tag>> entityHistories = convertToHistory(tagList, recordIdMap, ChangeType.DELETE);
+ final Long maxHistoryRecordId = tagSqlDao.getMaxHistoryRecordId();
+ tagSqlDao.addHistoryFromTransaction(objectId.toString(), objectType, entityHistories, context);
+
+ // Have to fetch the history record ids to update the audit log
+ final List<Mapper<Long, Long>> historyRecordIds = tagSqlDao.getHistoryRecordIds(maxHistoryRecordId);
+ final Map<Long, Long> historyRecordIdMap = convertToAuditMap(historyRecordIds);
+ final List<EntityAudit> entityAudits = convertToAudits(entityHistories, historyRecordIdMap);
+ tagSqlDao.insertAuditFromTransaction(entityAudits, context);
+
+ // Post an event to the Bus
+ final TagEvent tagEvent;
+ if (tagDefinition.isControlTag()) {
+ tagEvent = tagEventBuilder.newControlTagDeletionEvent(tag.getId(), objectId, objectType, tagDefinition, context.getUserToken());
+ } else {
+ tagEvent = tagEventBuilder.newUserTagDeletionEvent(tag.getId(), objectId, objectType, tagDefinition, context.getUserToken());
+ }
+ try {
+ bus.postFromTransaction(tagEvent, tagSqlDao);
+ } catch (Bus.EventBusException e) {
+ log.warn("Failed to post tag deletion event for tag " + tag.getId().toString(), e);
+ }
+ return null;
+ }
+ });
+ } catch (TransactionFailedException exception) {
+ if (exception.getCause() instanceof TagDefinitionApiException) {
+ throw (TagApiException) exception.getCause();
} else {
- tags.add(new DescriptiveTag(tagDefinition));
+ throw exception;
}
}
-
- saveEntities(objectId, objectType, tags, context);
- }
-
- @Override
- public void deleteTag(final UUID objectId, final ObjectType objectType,
- final TagDefinition tagDefinition, final CallContext context) {
- tagSqlDao.inTransaction(new Transaction<Void, TagSqlDao>() {
- @Override
- public Void inTransaction(final TagSqlDao tagSqlDao, final TransactionStatus status) throws Exception {
- String tagName = tagDefinition.getName();
- Tag tag = tagSqlDao.findTag(tagName, objectId.toString(), objectType);
-
- if (tag == null) {
- throw new InvoiceApiException(ErrorCode.TAG_DOES_NOT_EXIST, tagName);
- }
-
- List<Tag> tagList = Arrays.asList(tag);
-
- List<Mapper<UUID, Long>> recordIds = tagSqlDao.getRecordIds(objectId.toString(), objectType);
- Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
-
- tagSqlDao.deleteFromTransaction(objectId.toString(), objectType, tagList, context);
-
- List<EntityHistory<Tag>> entityHistories = new ArrayList<EntityHistory<Tag>>();
- entityHistories.addAll(convertToHistory(tagList, recordIdMap, ChangeType.DELETE));
-
- Long maxHistoryRecordId = tagSqlDao.getMaxHistoryRecordId();
- tagSqlDao.addHistoryFromTransaction(objectId.toString(), objectType, entityHistories, context);
-
- // have to fetch history record ids to update audit log
- List<Mapper<Long, Long>> historyRecordIds = tagSqlDao.getHistoryRecordIds(maxHistoryRecordId);
- Map<Long, Long> historyRecordIdMap = convertToAuditMap(historyRecordIds);
- List<EntityAudit> entityAudits = convertToAudits(entityHistories, historyRecordIdMap);
- tagSqlDao.insertAuditFromTransaction(entityAudits, context);
-
- return null;
- }
- });
}
@Override
@@ -150,7 +177,7 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
}
@Override
- protected UpdatableEntityCollectionSqlDao<Tag> transmogrifyDao(Transmogrifier transactionalDao) {
+ protected UpdatableEntityCollectionSqlDao<Tag> transmogrifyDao(final Transmogrifier transactionalDao) {
return transactionalDao.become(TagSqlDao.class);
}
@@ -160,7 +187,7 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
}
@Override
- protected String getKey(Tag entity) {
+ protected String getKey(final Tag entity) {
return entity.getTagDefinitionName();
}
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
index 39970da..f7f25b7 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
@@ -19,31 +19,46 @@ package com.ning.billing.util.tag.dao;
import java.util.ArrayList;
import java.util.List;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.tag.ControlTagType;
import org.skife.jdbi.v2.IDBI;
+import org.skife.jdbi.v2.Transaction;
+import org.skife.jdbi.v2.TransactionStatus;
+import org.skife.jdbi.v2.exceptions.TransactionFailedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
import com.ning.billing.util.api.TagDefinitionApiException;
+import com.ning.billing.util.bus.Bus;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.tag.ControlTagType;
import com.ning.billing.util.tag.DefaultTagDefinition;
import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.TagDefinitionEvent;
+import com.ning.billing.util.tag.api.user.TagEventBuilder;
public class DefaultTagDefinitionDao implements TagDefinitionDao {
- private final TagDefinitionSqlDao dao;
+ private static final Logger log = LoggerFactory.getLogger(DefaultTagDefinitionDao.class);
+
+ private final TagDefinitionSqlDao tagDefinitionSqlDao;
+ private final TagEventBuilder tagEventBuilder;
+ private final Bus bus;
@Inject
- public DefaultTagDefinitionDao(IDBI dbi) {
- this.dao = dbi.onDemand(TagDefinitionSqlDao.class);
+ public DefaultTagDefinitionDao(final IDBI dbi, final TagEventBuilder tagEventBuilder, final Bus bus) {
+ this.tagEventBuilder = tagEventBuilder;
+ this.bus = bus;
+ this.tagDefinitionSqlDao = dbi.onDemand(TagDefinitionSqlDao.class);
}
@Override
public List<TagDefinition> getTagDefinitions() {
- // get user definitions from the database
- List<TagDefinition> definitionList = new ArrayList<TagDefinition>();
- definitionList.addAll(dao.get());
+ // Get user definitions from the database
+ final List<TagDefinition> definitionList = new ArrayList<TagDefinition>();
+ definitionList.addAll(tagDefinitionSqlDao.get());
- // add control tag definitions
- for (ControlTagType controlTag : ControlTagType.values()) {
+ // Add control tag definitions
+ for (final ControlTagType controlTag : ControlTagType.values()) {
definitionList.add(new DefaultTagDefinition(controlTag.toString(), controlTag.getDescription(), true));
}
@@ -52,35 +67,65 @@ public class DefaultTagDefinitionDao implements TagDefinitionDao {
@Override
public TagDefinition getByName(final String definitionName) {
- // add control tag definitions
- for (ControlTagType controlTag : ControlTagType.values()) {
- if(definitionName.equals(controlTag.name())) {
+ // Add control tag definitions
+ for (final ControlTagType controlTag : ControlTagType.values()) {
+ if (definitionName.equals(controlTag.name())) {
return new DefaultTagDefinition(controlTag.toString(), controlTag.getDescription(), true);
}
}
- return dao.getByName(definitionName);
+
+ return tagDefinitionSqlDao.getByName(definitionName);
}
@Override
public TagDefinition create(final String definitionName, final String description,
final CallContext context) throws TagDefinitionApiException {
+ // Make sure a control tag with this name don't already exist
if (isControlTagName(definitionName)) {
throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_CONFLICTS_WITH_CONTROL_TAG, definitionName);
}
- TagDefinition existingDefinition = dao.getByName(definitionName);
-
- if (existingDefinition != null) {
- throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_ALREADY_EXISTS, definitionName);
+ try {
+ return tagDefinitionSqlDao.inTransaction(new Transaction<TagDefinition, TagDefinitionSqlDao>() {
+ @Override
+ public TagDefinition inTransaction(final TagDefinitionSqlDao tagDefinitionSqlDao, final TransactionStatus status) throws Exception {
+ // Make sure the tag definition doesn't exist already
+ final TagDefinition existingDefinition = tagDefinitionSqlDao.getByName(definitionName);
+ if (existingDefinition != null) {
+ throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_ALREADY_EXISTS, definitionName);
+ }
+
+ // Create it
+ final TagDefinition tagDefinition = new DefaultTagDefinition(definitionName, description, false);
+ tagDefinitionSqlDao.create(tagDefinition, context);
+
+ // Post an event to the bus
+ final TagDefinitionEvent tagDefinitionEvent;
+ if (tagDefinition.isControlTag()) {
+ tagDefinitionEvent = tagEventBuilder.newControlTagDefinitionCreationEvent(tagDefinition.getId(), tagDefinition, context.getUserToken());
+ } else {
+ tagDefinitionEvent = tagEventBuilder.newUserTagDefinitionCreationEvent(tagDefinition.getId(), tagDefinition, context.getUserToken());
+ }
+ try {
+ bus.postFromTransaction(tagDefinitionEvent, tagDefinitionSqlDao);
+ } catch (Bus.EventBusException e) {
+ log.warn("Failed to post tag definition creation event for tag " + tagDefinition.getId(), e);
+ }
+
+ return tagDefinition;
+ }
+ });
+ } catch (TransactionFailedException exception) {
+ if (exception.getCause() instanceof TagDefinitionApiException) {
+ throw (TagDefinitionApiException) exception.getCause();
+ } else {
+ throw exception;
+ }
}
-
- TagDefinition definition = new DefaultTagDefinition(definitionName, description, false);
- dao.create(definition, context);
- return definition;
}
private boolean isControlTagName(final String definitionName) {
- for (ControlTagType controlTagName : ControlTagType.values()) {
+ for (final ControlTagType controlTagName : ControlTagType.values()) {
if (controlTagName.toString().equals(definitionName)) {
return true;
}
@@ -90,27 +135,47 @@ public class DefaultTagDefinitionDao implements TagDefinitionDao {
}
@Override
- public void deleteAllTagsForDefinition(final String definitionName, final CallContext context) throws TagDefinitionApiException {
- TagDefinition existingDefinition = dao.getByName(definitionName);
- if (existingDefinition == null) {
- throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_DOES_NOT_EXIST, definitionName);
- }
-
- dao.deleteAllTagsForDefinition(definitionName, context);
- }
-
- @Override
public void deleteTagDefinition(final String definitionName, final CallContext context) throws TagDefinitionApiException {
- if (dao.tagDefinitionUsageCount(definitionName) > 0) {
- throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_IN_USE, definitionName);
- }
-
- TagDefinition existingDefinition = dao.getByName(definitionName);
-
- if (existingDefinition == null) {
- throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_DOES_NOT_EXIST, definitionName);
+ try {
+ tagDefinitionSqlDao.inTransaction(new Transaction<Void, TagDefinitionSqlDao>() {
+ @Override
+ public Void inTransaction(final TagDefinitionSqlDao tagDefinitionSqlDao, final TransactionStatus status) throws Exception {
+ // Make sure the tag definition exists
+ final TagDefinition tagDefinition = tagDefinitionSqlDao.getByName(definitionName);
+ if (tagDefinition == null) {
+ throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_DOES_NOT_EXIST, definitionName);
+ }
+
+ // Make sure it is not used currently
+ if (tagDefinitionSqlDao.tagDefinitionUsageCount(definitionName) > 0) {
+ throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_IN_USE, definitionName);
+ }
+
+ // Delete it
+ tagDefinitionSqlDao.deleteTagDefinition(definitionName, context);
+
+ // Post an event to the Bus
+ final TagDefinitionEvent tagDefinitionEvent;
+ if (tagDefinition.isControlTag()) {
+ tagDefinitionEvent = tagEventBuilder.newControlTagDefinitionDeletionEvent(tagDefinition.getId(), tagDefinition, context.getUserToken());
+ } else {
+ tagDefinitionEvent = tagEventBuilder.newUserTagDefinitionDeletionEvent(tagDefinition.getId(), tagDefinition, context.getUserToken());
+ }
+ try {
+ bus.postFromTransaction(tagDefinitionEvent, tagDefinitionSqlDao);
+ } catch (Bus.EventBusException e) {
+ log.warn("Failed to post tag definition deletion event for tag " + tagDefinition.getId(), e);
+ }
+
+ return null;
+ }
+ });
+ } catch (TransactionFailedException exception) {
+ if (exception.getCause() instanceof TagDefinitionApiException) {
+ throw (TagDefinitionApiException) exception.getCause();
+ } else {
+ throw exception;
+ }
}
-
- dao.deleteTagDefinition(definitionName, context);
}
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagBinder.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagBinder.java
index d2d4a6f..d1a8a7c 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagBinder.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagBinder.java
@@ -26,6 +26,7 @@ import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.sqlobject.Binder;
import org.skife.jdbi.v2.sqlobject.BinderFactory;
import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
+
import com.ning.billing.util.tag.Tag;
@BindingAnnotation(TagBinder.TagBinderFactory.class)
@@ -33,9 +34,9 @@ import com.ning.billing.util.tag.Tag;
@Target({ElementType.PARAMETER})
public @interface TagBinder {
public static class TagBinderFactory implements BinderFactory {
- public Binder build(Annotation annotation) {
+ public Binder build(final Annotation annotation) {
return new Binder<TagBinder, Tag>() {
- public void bind(SQLStatement q, TagBinder bind, Tag tag) {
+ public void bind(final SQLStatement q, final TagBinder bind, final Tag tag) {
q.bind("id", tag.getId().toString());
q.bind("tagDefinitionName", tag.getTagDefinitionName());
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
index 4e29fc2..3ffccf2 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
@@ -16,86 +16,18 @@
package com.ning.billing.util.tag.dao;
-import com.ning.billing.invoice.api.InvoiceApiException;
+import java.util.List;
+import java.util.UUID;
+
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.dao.AuditedCollectionDao;
import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
-import java.util.List;
-import java.util.UUID;
-
public interface TagDao extends AuditedCollectionDao<Tag> {
- void insertTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context);
-
- void insertTags(UUID objectId, ObjectType objectType, List<TagDefinition> tagDefinitions, CallContext context);
-
- void deleteTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context);
-
-//@Override
-// public List<Tag> getTagList() {
-// return tagStore.getEntityList();
-// }
-//
-// @Override
-// public boolean hasTag(final TagDefinition tagDefinition) {
-// return tagStore.containsTagForDefinition(tagDefinition);
-// }
-//
-// @Override
-// public boolean hasTag(ControlTagType controlTagType) {
-// return tagStore.containsTagForControlTagType(controlTagType);
-// }
-//
-// @Override
-// public void addTag(final TagDefinition definition) {
-// Tag tag = new DescriptiveTag(definition);
-// tagStore.add(tag) ;
-// }
-//
-// @Override
-// public void addTags(final List<Tag> tags) {
-// this.tagStore.add(tags);
-// }
-//
-// @Override
-// public void addTagsFromDefinitions(final List<TagDefinition> tagDefinitions) {
-// if (tagStore != null) {
-// List<Tag> tags = new ArrayList<Tag>();
-// if (tagDefinitions != null) {
-// for (TagDefinition tagDefinition : tagDefinitions) {
-// try {
-// ControlTagType controlTagType = ControlTagType.valueOf(tagDefinition.getName());
-// tags.add(new DefaultControlTag(controlTagType));
-// } catch (IllegalArgumentException ex) {
-// tags.add(new DescriptiveTag(tagDefinition));
-// }
-// }
-// }
-//
-// this.tagStore.add(tags);
-// }
-// }
-//
-// @Override
-// public void clearTags() {
-// this.tagStore.clear();
-// }
-//
-// @Override
-// public void removeTag(final TagDefinition tagDefinition) {
-// tagStore.remove(tagDefinition);
-// }
-//
-// @Override
-// public boolean generateInvoice() {
-// return tagStore.generateInvoice();
-// }
-//
-// @Override
-// public boolean processPayment() {
-// return tagStore.processPayment();
-// }
+ void insertTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context) throws TagApiException;
+ void deleteTag(UUID objectId, ObjectType objectType, TagDefinition tagDefinition, CallContext context) throws TagApiException;
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionDao.java
index 112ff75..ae645ea 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionDao.java
@@ -18,8 +18,8 @@ package com.ning.billing.util.tag.dao;
import java.util.List;
-import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.api.TagDefinitionApiException;
+import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.tag.TagDefinition;
public interface TagDefinitionDao {
@@ -29,7 +29,5 @@ public interface TagDefinitionDao {
public TagDefinition create(String definitionName, String description, CallContext context) throws TagDefinitionApiException;
- public void deleteAllTagsForDefinition(String definitionName, CallContext context) throws TagDefinitionApiException;
-
public void deleteTagDefinition(String definitionName, CallContext context) throws TagDefinitionApiException;
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.java
index f273c56..6dee4b8 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.java
@@ -25,11 +25,6 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallContextBinder;
-import com.ning.billing.util.entity.dao.EntitySqlDao;
-import com.ning.billing.util.tag.DefaultTagDefinition;
-import com.ning.billing.util.tag.TagDefinition;
import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.sqlobject.Bind;
@@ -39,12 +34,20 @@ import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
+import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
+import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.entity.dao.EntitySqlDao;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
@ExternalizedSqlViaStringTemplate3
@RegisterMapper(TagDefinitionSqlDao.TagDefinitionMapper.class)
-public interface TagDefinitionSqlDao extends EntitySqlDao<TagDefinition> {
+public interface TagDefinitionSqlDao extends EntitySqlDao<TagDefinition>, Transactional<TagDefinitionSqlDao>, Transmogrifier {
@Override
@SqlUpdate
public void create(@TagDefinitionBinder final TagDefinition entity, @CallContextBinder final CallContext context);
@@ -64,9 +67,9 @@ public interface TagDefinitionSqlDao extends EntitySqlDao<TagDefinition> {
public class TagDefinitionMapper implements ResultSetMapper<TagDefinition> {
@Override
public TagDefinition map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
- UUID id = UUID.fromString(result.getString("id"));
- String name = result.getString("name");
- String description = result.getString("description");
+ final UUID id = UUID.fromString(result.getString("id"));
+ final String name = result.getString("name");
+ final String description = result.getString("description");
return new DefaultTagDefinition(id, name, description, false);
}
}
@@ -87,4 +90,4 @@ public interface TagDefinitionSqlDao extends EntitySqlDao<TagDefinition> {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagHistoryBinder.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagHistoryBinder.java
index 67bb3ca..05d9414 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagHistoryBinder.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagHistoryBinder.java
@@ -16,30 +16,30 @@
package com.ning.billing.util.tag.dao;
-import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.MappedEntity;
-import com.ning.billing.util.tag.Tag;
-import org.skife.jdbi.v2.SQLStatement;
-import org.skife.jdbi.v2.sqlobject.Binder;
-import org.skife.jdbi.v2.sqlobject.BinderFactory;
-import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
-
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.skife.jdbi.v2.SQLStatement;
+import org.skife.jdbi.v2.sqlobject.Binder;
+import org.skife.jdbi.v2.sqlobject.BinderFactory;
+import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
+
+import com.ning.billing.util.dao.EntityHistory;
+import com.ning.billing.util.tag.Tag;
+
@BindingAnnotation(TagHistoryBinder.TagHistoryBinderFactory.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface TagHistoryBinder {
public static class TagHistoryBinderFactory implements BinderFactory {
@Override
- public Binder build(Annotation annotation) {
+ public Binder build(final Annotation annotation) {
return new Binder<TagHistoryBinder, EntityHistory<Tag>>() {
@Override
- public void bind(SQLStatement q, TagHistoryBinder bind, EntityHistory<Tag> tagHistory) {
+ public void bind(final SQLStatement q, final TagHistoryBinder bind, final EntityHistory<Tag> tagHistory) {
q.bind("recordId", tagHistory.getValue());
q.bind("changeType", tagHistory.getChangeType().toString());
q.bind("id", tagHistory.getId().toString());
@@ -48,4 +48,4 @@ public @interface TagHistoryBinder {
};
}
}
-}
\ No newline at end of file
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagMapper.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagMapper.java
index bf08dcd..da0083d 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagMapper.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagMapper.java
@@ -20,11 +20,10 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
-import com.ning.billing.util.dao.MapperBase;
-import org.joda.time.DateTime;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
+import com.ning.billing.util.dao.MapperBase;
import com.ning.billing.util.tag.ControlTagType;
import com.ning.billing.util.tag.DefaultControlTag;
import com.ning.billing.util.tag.DescriptiveTag;
@@ -33,16 +32,16 @@ import com.ning.billing.util.tag.Tag;
public class TagMapper extends MapperBase implements ResultSetMapper<Tag> {
@Override
public Tag map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
- String name = result.getString("tag_definition_name");
+ final String name = result.getString("tag_definition_name");
ControlTagType thisTagType = null;
- for (ControlTagType controlTagType : ControlTagType.values()) {
+ for (final ControlTagType controlTagType : ControlTagType.values()) {
if (name.equals(controlTagType.toString())) {
thisTagType = controlTagType;
}
}
- UUID id = UUID.fromString(result.getString("id"));
+ final UUID id = UUID.fromString(result.getString("id"));
if (thisTagType == null) {
return new DescriptiveTag(id, name);
} else {
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
index bde62e7..5f4b8bb 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
@@ -40,32 +40,32 @@ import com.ning.billing.util.tag.Tag;
@RegisterMapper(TagMapper.class)
public interface TagSqlDao extends UpdatableEntityCollectionSqlDao<Tag>, Transactional<TagSqlDao>, Transmogrifier {
@Override
- @SqlBatch(transactional=false)
+ @SqlBatch(transactional = false)
public void insertFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
@TagBinder final Collection<Tag> tags,
@CallContextBinder final CallContext context);
@Override
- @SqlBatch(transactional=false)
+ @SqlBatch(transactional = false)
public void updateFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
@TagBinder final Collection<Tag> tags,
@CallContextBinder final CallContext context);
@Override
- @SqlBatch(transactional=false)
+ @SqlBatch(transactional = false)
public void deleteFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
@TagBinder final Collection<Tag> tags,
@CallContextBinder final CallContext context);
@Override
- @SqlBatch(transactional=false)
+ @SqlBatch(transactional = false)
public void addHistoryFromTransaction(@Bind("objectId") final String objectId,
- @ObjectTypeBinder final ObjectType objectType,
- @TagHistoryBinder final List<EntityHistory<Tag>> histories,
- @CallContextBinder final CallContext context);
+ @ObjectTypeBinder final ObjectType objectType,
+ @TagHistoryBinder final List<EntityHistory<Tag>> histories,
+ @CallContextBinder final CallContext context);
@SqlUpdate
public void addTagFromTransaction(@Bind("id") final String tagId,
@@ -84,4 +84,4 @@ public interface TagSqlDao extends UpdatableEntityCollectionSqlDao<Tag>, Transac
public Tag findTag(@Bind("tagDefinitionName") final String tagName,
@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType);
-}
\ No newline at end of file
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java b/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
index 330b204..20efa9c 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
@@ -48,21 +48,25 @@ public class DefaultControlTag extends DescriptiveTag implements ControlTag {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((controlTagType == null) ? 0
- : controlTagType.hashCode());
+ : controlTagType.hashCode());
return result;
}
@Override
- public boolean equals(Object obj) {
- if (this == obj)
+ public boolean equals(final Object obj) {
+ if (this == obj) {
return true;
- if (!super.equals(obj))
+ }
+ if (!super.equals(obj)) {
return false;
- if (getClass() != obj.getClass())
+ }
+ if (getClass() != obj.getClass()) {
return false;
- DefaultControlTag other = (DefaultControlTag) obj;
- if (controlTagType != other.controlTagType)
+ }
+ final DefaultControlTag other = (DefaultControlTag) obj;
+ if (controlTagType != other.controlTagType) {
return false;
+ }
return true;
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java b/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
index bd951d5..f0e80ad 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
@@ -17,24 +17,31 @@
package com.ning.billing.util.tag;
import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.ning.billing.util.entity.EntityBase;
public class DefaultTagDefinition extends EntityBase implements TagDefinition {
private final String name;
private final String description;
- private final Boolean isControlTag;
+ private final Boolean controlTag;
- public DefaultTagDefinition(String name, String description, Boolean isControlTag) {
+ public DefaultTagDefinition(final String name, final String description, final Boolean isControlTag) {
this(UUID.randomUUID(), name, description, isControlTag);
}
- public DefaultTagDefinition(UUID id, String name, String description, Boolean isControlTag) {
+ @JsonCreator
+ public DefaultTagDefinition(@JsonProperty("id") final UUID id,
+ @JsonProperty("name") final String name,
+ @JsonProperty("description") final String description,
+ @JsonProperty("controlTag") final Boolean controlTag) {
super(id);
this.name = name;
this.description = description;
- this.isControlTag = isControlTag;
+ this.controlTag = controlTag;
}
-
+
@Override
public String getName() {
return name;
@@ -47,6 +54,49 @@ public class DefaultTagDefinition extends EntityBase implements TagDefinition {
@Override
public Boolean isControlTag() {
- return isControlTag;
+ return controlTag;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultTagDefinition");
+ sb.append("{description='").append(description).append('\'');
+ sb.append(", name='").append(name).append('\'');
+ sb.append(", controlTag=").append(controlTag);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final DefaultTagDefinition that = (DefaultTagDefinition) o;
+
+ if (description != null ? !description.equals(that.description) : that.description != null) {
+ return false;
+ }
+ if (controlTag != null ? !controlTag.equals(that.controlTag) : that.controlTag != null) {
+ return false;
+ }
+ if (name != null ? !name.equals(that.name) : that.name != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = name != null ? name.hashCode() : 0;
+ result = 31 * result + (description != null ? description.hashCode() : 0);
+ result = 31 * result + (controlTag != null ? controlTag.hashCode() : 0);
+ return result;
}
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/DefaultTagStore.java b/util/src/main/java/com/ning/billing/util/tag/DefaultTagStore.java
index a35b424..8bbe9e8 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DefaultTagStore.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DefaultTagStore.java
@@ -37,9 +37,9 @@ public class DefaultTagStore extends EntityCollectionBase<Tag> implements TagSto
* @return true if no tags contraindicate payment processing
*/
public boolean processPayment() {
- for (Tag tag : entities.values()) {
+ for (final Tag tag : entities.values()) {
if (tag instanceof ControlTag) {
- ControlTag controlTag = (ControlTag) tag;
+ final ControlTag controlTag = (ControlTag) tag;
if (controlTag.getControlTagType() == ControlTagType.AUTO_PAY_OFF) {
return false;
}
@@ -49,15 +49,16 @@ public class DefaultTagStore extends EntityCollectionBase<Tag> implements TagSto
return true;
}
- /***
+ /**
* Collates the contents of the TagStore to determine if invoices should be generated
+ *
* @return true if no tags contraindicate invoice generation
*/
@Override
public boolean generateInvoice() {
- for (Tag tag : entities.values()) {
+ for (final Tag tag : entities.values()) {
if (tag instanceof ControlTag) {
- ControlTag controlTag = (ControlTag) tag;
+ final ControlTag controlTag = (ControlTag) tag;
if (controlTag.getControlTagType() == ControlTagType.AUTO_INVOICING_OFF) {
return false;
}
@@ -69,7 +70,7 @@ public class DefaultTagStore extends EntityCollectionBase<Tag> implements TagSto
@Override
public boolean containsTagForDefinition(final TagDefinition tagDefinition) {
- for (Tag tag : entities.values()) {
+ for (final Tag tag : entities.values()) {
if (tag.getTagDefinitionName().equals(tagDefinition.getName())) {
return true;
}
@@ -80,7 +81,7 @@ public class DefaultTagStore extends EntityCollectionBase<Tag> implements TagSto
@Override
public boolean containsTagForControlTagType(final ControlTagType controlTagType) {
- for (Tag tag : entities.values()) {
+ for (final Tag tag : entities.values()) {
if (tag.getTagDefinitionName().equals(controlTagType.toString())) {
return true;
}
@@ -90,8 +91,8 @@ public class DefaultTagStore extends EntityCollectionBase<Tag> implements TagSto
}
@Override
- public Tag remove(TagDefinition tagDefinition) {
- Tag tag = entities.get(tagDefinition.getName());
+ public Tag remove(final TagDefinition tagDefinition) {
+ final Tag tag = entities.get(tagDefinition.getName());
return (tag == null) ? null : entities.remove(tag);
}
-}
\ No newline at end of file
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/DescriptiveTag.java b/util/src/main/java/com/ning/billing/util/tag/DescriptiveTag.java
index 3f875be..7c87e7b 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DescriptiveTag.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DescriptiveTag.java
@@ -24,19 +24,19 @@ public class DescriptiveTag extends EntityBase implements Tag {
private final String tagDefinitionName;
// use to hydrate objects from the persistence layer
- public DescriptiveTag(UUID id, String tagDefinitionName) {
+ public DescriptiveTag(final UUID id, final String tagDefinitionName) {
super(id);
this.tagDefinitionName = tagDefinitionName;
}
// use to create new objects
- public DescriptiveTag(TagDefinition tagDefinition) {
+ public DescriptiveTag(final TagDefinition tagDefinition) {
super();
this.tagDefinitionName = tagDefinition.getName();
}
// use to create new objects
- public DescriptiveTag(String tagDefinitionName) {
+ public DescriptiveTag(final String tagDefinitionName) {
super();
this.tagDefinitionName = tagDefinitionName;
}
@@ -56,26 +56,29 @@ public class DescriptiveTag extends EntityBase implements Tag {
final int prime = 31;
int result = 1;
result = prime * result + ((tagDefinitionName == null) ? 0
- : tagDefinitionName.hashCode());
+ : tagDefinitionName.hashCode());
return result;
}
@Override
- public boolean equals(Object obj) {
- if (this == obj)
+ public boolean equals(final Object obj) {
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (getClass() != obj.getClass())
+ }
+ if (getClass() != obj.getClass()) {
return false;
- DescriptiveTag other = (DescriptiveTag) obj;
+ }
+ final DescriptiveTag other = (DescriptiveTag) obj;
if (tagDefinitionName == null) {
- if (other.tagDefinitionName != null)
+ if (other.tagDefinitionName != null) {
return false;
- }
- else if (!tagDefinitionName.equals(other.tagDefinitionName))
+ }
+ } else if (!tagDefinitionName.equals(other.tagDefinitionName)) {
return false;
+ }
return true;
}
-
}
diff --git a/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java b/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
index c68c759..2aef0a9 100644
--- a/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
+++ b/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
@@ -53,6 +53,7 @@ public class MysqlTestingHelper
// Discover dynamically list of all tables in that database;
private List<String> allTables;
private File dbDir;
+ private File dataDir;
private MysqldResource mysqldResource;
private int port;
@@ -85,10 +86,15 @@ public class MysqlTestingHelper
return;
}
- dbDir = File.createTempFile("mysql", "");
- dbDir.delete();
- dbDir.mkdir();
- mysqldResource = new MysqldResource(dbDir);
+ dbDir = File.createTempFile("mysqldb", "");
+ Assert.assertTrue(dbDir.delete());
+ Assert.assertTrue(dbDir.mkdir());
+
+ dataDir = File.createTempFile("mysqldata", "");
+ Assert.assertTrue(dataDir.delete());
+ Assert.assertTrue(dataDir.mkdir());
+
+ mysqldResource = new MysqldResource(dbDir, dataDir);
final Map<String, String> dbOpts = new HashMap<String, String>();
dbOpts.put(MysqldResourceI.PORT, Integer.toString(port));
@@ -103,6 +109,7 @@ public class MysqlTestingHelper
}
else {
log.info("MySQL running on port " + mysqldResource.getPort());
+ log.info(String.format("To connect to it: mysql -u%s -p%s -P%s -S%s/mysql.sock %s", USERNAME, PASSWORD, port, dataDir, DB_NAME));
}
}
@@ -161,6 +168,7 @@ public class MysqlTestingHelper
try {
if (mysqldResource != null) {
mysqldResource.shutdown();
+ FileUtils.deleteQuietly(dataDir);
FileUtils.deleteQuietly(dbDir);
log.info("MySQLd stopped");
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
new file mode 100644
index 0000000..5ebd270
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.jackson.ObjectMapper;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TestDefaultControlTagCreationEvent {
+ @Test(groups = "fast")
+ public void testPojo() throws Exception {
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultControlTagCreationEvent event = new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ Assert.assertEquals(event.getBusEventType(), BusEvent.BusEventType.CONTROL_TAG_CREATION);
+
+ Assert.assertEquals(event.getTagId(), tagId);
+ Assert.assertEquals(event.getObjectId(), objectId);
+ Assert.assertEquals(event.getObjectType(), objectType);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertEquals(event, new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(event));
+ Assert.assertTrue(event.equals(new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken)));
+ }
+
+ @Test(groups = "fast")
+ public void testSerialization() throws Exception {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultControlTagCreationEvent event = new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken);
+
+ final String json = objectMapper.writeValueAsString(event);
+ final DefaultControlTagCreationEvent fromJson = objectMapper.readValue(json, DefaultControlTagCreationEvent.class);
+ Assert.assertEquals(fromJson, event);
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java
new file mode 100644
index 0000000..05d4c05
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.jackson.ObjectMapper;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TestDefaultControlTagDefinitionCreationEvent {
+ @Test(groups = "fast")
+ public void testPojo() throws Exception {
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultControlTagDefinitionCreationEvent event = new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken);
+ Assert.assertEquals(event.getBusEventType(), BusEvent.BusEventType.CONTROL_TAGDEFINITION_CREATION);
+
+ Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertEquals(event, new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(event));
+ Assert.assertTrue(event.equals(new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken)));
+ }
+
+ @Test(groups = "fast")
+ public void testSerialization() throws Exception {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultControlTagDefinitionCreationEvent event = new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken);
+
+ final String json = objectMapper.writeValueAsString(event);
+ final DefaultControlTagDefinitionCreationEvent fromJson = objectMapper.readValue(json, DefaultControlTagDefinitionCreationEvent.class);
+ Assert.assertEquals(fromJson, event);
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java
new file mode 100644
index 0000000..08059d1
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.jackson.ObjectMapper;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TestDefaultControlTagDefinitionDeletionEvent {
+ @Test(groups = "fast")
+ public void testPojo() throws Exception {
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultControlTagDefinitionDeletionEvent event = new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken);
+ Assert.assertEquals(event.getBusEventType(), BusEvent.BusEventType.CONTROL_TAGDEFINITION_DELETION);
+
+ Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertEquals(event, new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(event));
+ Assert.assertTrue(event.equals(new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken)));
+ }
+
+ @Test(groups = "fast")
+ public void testSerialization() throws Exception {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultControlTagDefinitionDeletionEvent event = new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken);
+
+ final String json = objectMapper.writeValueAsString(event);
+ final DefaultControlTagDefinitionDeletionEvent fromJson = objectMapper.readValue(json, DefaultControlTagDefinitionDeletionEvent.class);
+ Assert.assertEquals(fromJson, event);
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
new file mode 100644
index 0000000..692149a
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.jackson.ObjectMapper;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TestDefaultControlTagDeletionEvent {
+ @Test(groups = "fast")
+ public void testPojo() throws Exception {
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultControlTagDeletionEvent event = new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ Assert.assertEquals(event.getBusEventType(), BusEvent.BusEventType.CONTROL_TAG_DELETION);
+
+ Assert.assertEquals(event.getTagId(), tagId);
+ Assert.assertEquals(event.getObjectId(), objectId);
+ Assert.assertEquals(event.getObjectType(), objectType);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertEquals(event, new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(event));
+ Assert.assertTrue(event.equals(new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken)));
+ }
+
+ @Test(groups = "fast")
+ public void testSerialization() throws Exception {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultControlTagDeletionEvent event = new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken);
+
+ final String json = objectMapper.writeValueAsString(event);
+ final DefaultControlTagDeletionEvent fromJson = objectMapper.readValue(json, DefaultControlTagDeletionEvent.class);
+ Assert.assertEquals(fromJson, event);
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
new file mode 100644
index 0000000..4d8162a
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.jackson.ObjectMapper;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TestDefaultUserTagCreationEvent {
+ @Test(groups = "fast")
+ public void testPojo() throws Exception {
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultUserTagCreationEvent event = new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ Assert.assertEquals(event.getBusEventType(), BusEvent.BusEventType.USER_TAG_CREATION);
+
+ Assert.assertEquals(event.getTagId(), tagId);
+ Assert.assertEquals(event.getObjectId(), objectId);
+ Assert.assertEquals(event.getObjectType(), objectType);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertEquals(event, new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(event));
+ Assert.assertTrue(event.equals(new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken)));
+ }
+
+ @Test(groups = "fast")
+ public void testSerialization() throws Exception {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultUserTagCreationEvent event = new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken);
+
+ final String json = objectMapper.writeValueAsString(event);
+ final DefaultUserTagCreationEvent fromJson = objectMapper.readValue(json, DefaultUserTagCreationEvent.class);
+ Assert.assertEquals(fromJson, event);
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java
new file mode 100644
index 0000000..89507d3
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.jackson.ObjectMapper;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TestDefaultUserTagDefinitionCreationEvent {
+ @Test(groups = "fast")
+ public void testPojo() throws Exception {
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultUserTagDefinitionCreationEvent event = new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken);
+ Assert.assertEquals(event.getBusEventType(), BusEvent.BusEventType.USER_TAGDEFINITION_CREATION);
+
+ Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertEquals(event, new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(event));
+ Assert.assertTrue(event.equals(new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken)));
+ }
+
+ @Test(groups = "fast")
+ public void testSerialization() throws Exception {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultUserTagDefinitionCreationEvent event = new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken);
+
+ final String json = objectMapper.writeValueAsString(event);
+ final DefaultUserTagDefinitionCreationEvent fromJson = objectMapper.readValue(json, DefaultUserTagDefinitionCreationEvent.class);
+ Assert.assertEquals(fromJson, event);
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java
new file mode 100644
index 0000000..bdcfaff
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.jackson.ObjectMapper;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TestDefaultUserTagDefinitionDeletionEvent {
+ @Test(groups = "fast")
+ public void testPojo() throws Exception {
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultUserTagDefinitionDeletionEvent event = new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken);
+ Assert.assertEquals(event.getBusEventType(), BusEvent.BusEventType.USER_TAGDEFINITION_DELETION);
+
+ Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertEquals(event, new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(event));
+ Assert.assertTrue(event.equals(new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken)));
+ }
+
+ @Test(groups = "fast")
+ public void testSerialization() throws Exception {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultUserTagDefinitionDeletionEvent event = new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken);
+
+ final String json = objectMapper.writeValueAsString(event);
+ final DefaultUserTagDefinitionDeletionEvent fromJson = objectMapper.readValue(json, DefaultUserTagDefinitionDeletionEvent.class);
+ Assert.assertEquals(fromJson, event);
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
new file mode 100644
index 0000000..ff022ef
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.jackson.ObjectMapper;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TestDefaultUserTagDeletionEvent {
+ @Test(groups = "fast")
+ public void testPojo() throws Exception {
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultUserTagDeletionEvent event = new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ Assert.assertEquals(event.getBusEventType(), BusEvent.BusEventType.USER_TAG_DELETION);
+
+ Assert.assertEquals(event.getTagId(), tagId);
+ Assert.assertEquals(event.getObjectId(), objectId);
+ Assert.assertEquals(event.getObjectType(), objectType);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertEquals(event, new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(event));
+ Assert.assertTrue(event.equals(new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken)));
+ }
+
+ @Test(groups = "fast")
+ public void testSerialization() throws Exception {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final DefaultUserTagDeletionEvent event = new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken);
+
+ final String json = objectMapper.writeValueAsString(event);
+ final DefaultUserTagDeletionEvent fromJson = objectMapper.readValue(json, DefaultUserTagDeletionEvent.class);
+ Assert.assertEquals(fromJson, event);
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
new file mode 100644
index 0000000..724ad14
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.api.user;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.api.ControlTagCreationEvent;
+import com.ning.billing.util.tag.api.ControlTagDefinitionCreationEvent;
+import com.ning.billing.util.tag.api.ControlTagDefinitionDeletionEvent;
+import com.ning.billing.util.tag.api.ControlTagDeletionEvent;
+import com.ning.billing.util.tag.api.TagDefinitionEvent;
+import com.ning.billing.util.tag.api.TagEvent;
+import com.ning.billing.util.tag.api.UserTagCreationEvent;
+import com.ning.billing.util.tag.api.UserTagDefinitionCreationEvent;
+import com.ning.billing.util.tag.api.UserTagDefinitionDeletionEvent;
+import com.ning.billing.util.tag.api.UserTagDeletionEvent;
+
+public class TestTagEventBuilder {
+ @Test(groups = "fast")
+ public void testNewUserTagDefinitionCreationEvent() throws Exception {
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+ final TagDefinitionEvent event = tagEventBuilder.newUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken);
+ Assert.assertTrue(event instanceof UserTagDefinitionCreationEvent);
+
+ Assert.assertEquals(event, new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken)));
+
+ verifyTagDefinitionEvent(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, tagDefinition, userToken, event);
+ }
+
+ @Test(groups = "fast")
+ public void testNewUserTagDefinitionDeletionEvent() throws Exception {
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+ final TagDefinitionEvent event = tagEventBuilder.newUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken);
+ Assert.assertTrue(event instanceof UserTagDefinitionDeletionEvent);
+
+ Assert.assertEquals(event, new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken)));
+
+ verifyTagDefinitionEvent(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, tagDefinition, userToken, event);
+ }
+
+ @Test(groups = "fast")
+ public void testNewControlTagDefinitionCreationEvent() throws Exception {
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+ final TagDefinitionEvent event = tagEventBuilder.newControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken);
+ Assert.assertTrue(event instanceof ControlTagDefinitionCreationEvent);
+
+ Assert.assertEquals(event, new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken)));
+
+ verifyTagDefinitionEvent(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, tagDefinition, userToken, event);
+ }
+
+ @Test(groups = "fast")
+ public void testNewControlTagDefinitionDeletionEvent() throws Exception {
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+ final TagDefinitionEvent event = tagEventBuilder.newControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken);
+ Assert.assertTrue(event instanceof ControlTagDefinitionDeletionEvent);
+
+ Assert.assertEquals(event, new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken)));
+
+ verifyTagDefinitionEvent(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, tagDefinition, userToken, event);
+ }
+
+ @Test(groups = "fast")
+ public void testNewUserTagCreationEvent() throws Exception {
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+ final TagEvent event = tagEventBuilder.newUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ Assert.assertTrue(event instanceof UserTagCreationEvent);
+
+ Assert.assertEquals(event, new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken)));
+
+ verifyTagEvent(tagId, objectId, objectType, tagDefinitionId, tagDefinitionName, tagDefinitionDescription, tagDefinition, userToken, event);
+ }
+
+ @Test(groups = "fast")
+ public void testNewUserTagDeletionEvent() throws Exception {
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+ final TagEvent event = tagEventBuilder.newUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ Assert.assertTrue(event instanceof UserTagDeletionEvent);
+
+ Assert.assertEquals(event, new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken)));
+
+ verifyTagEvent(tagId, objectId, objectType, tagDefinitionId, tagDefinitionName, tagDefinitionDescription, tagDefinition, userToken, event);
+ }
+
+ @Test(groups = "fast")
+ public void testNewControlTagCreationEvent() throws Exception {
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+ final TagEvent event = tagEventBuilder.newControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ Assert.assertTrue(event instanceof ControlTagCreationEvent);
+
+ Assert.assertEquals(event, new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken)));
+
+ verifyTagEvent(tagId, objectId, objectType, tagDefinitionId, tagDefinitionName, tagDefinitionDescription, tagDefinition, userToken, event);
+ }
+
+ @Test(groups = "fast")
+ public void testNewControlTagDeletionEvent() throws Exception {
+ final UUID tagId = UUID.randomUUID();
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.ACCOUNT_EMAIL;
+ final UUID tagDefinitionId = UUID.randomUUID();
+ final String tagDefinitionName = UUID.randomUUID().toString();
+ final String tagDefinitionDescription = UUID.randomUUID().toString();
+ final boolean controlTag = true;
+ final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
+ final UUID userToken = UUID.randomUUID();
+
+ final TagEventBuilder tagEventBuilder = new TagEventBuilder();
+ final TagEvent event = tagEventBuilder.newControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken);
+ Assert.assertTrue(event instanceof ControlTagDeletionEvent);
+
+ Assert.assertEquals(event, new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken));
+ Assert.assertTrue(event.equals(new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken)));
+
+ verifyTagEvent(tagId, objectId, objectType, tagDefinitionId, tagDefinitionName, tagDefinitionDescription, tagDefinition, userToken, event);
+ }
+
+ private void verifyTagDefinitionEvent(final UUID tagDefinitionId, final String tagDefinitionName, final String tagDefinitionDescription, final TagDefinition tagDefinition, final UUID userToken, final TagDefinitionEvent event) {
+ Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertTrue(event.equals(event));
+ }
+
+ private void verifyTagEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final UUID tagDefinitionId, final String tagDefinitionName, final String tagDefinitionDescription, final TagDefinition tagDefinition, final UUID userToken, final TagEvent event) {
+ Assert.assertEquals(event.getTagId(), tagId);
+ Assert.assertEquals(event.getObjectId(), objectId);
+ Assert.assertEquals(event.getObjectType(), objectType);
+ Assert.assertEquals(event.getTagDefinition(), tagDefinition);
+ Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId);
+ Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName);
+ Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription);
+ Assert.assertEquals(event.getUserToken(), userToken);
+
+ Assert.assertEquals(event, event);
+ Assert.assertTrue(event.equals(event));
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
index 9253c07..a09a952 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
@@ -17,13 +17,6 @@
package com.ning.billing.util.tag.dao;
import javax.annotation.Nullable;
-
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.dao.ObjectType;
-import com.ning.billing.util.tag.Tag;
-import com.ning.billing.util.tag.TagDefinition;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -31,34 +24,41 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
+import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
+
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.Tag;
+import com.ning.billing.util.tag.TagDefinition;
+
public class MockTagDao implements TagDao {
- private Map<UUID, List<Tag>> tagStore = new HashMap<UUID, List<Tag>>();
+ private final Map<UUID, List<Tag>> tagStore = new HashMap<UUID, List<Tag>>();
@Override
public void saveEntitiesFromTransaction(final Transmogrifier dao, final UUID objectId, final ObjectType objectType,
- final List<Tag> tags, final CallContext context) {
+ final List<Tag> tags, final CallContext context) {
tagStore.put(objectId, tags);
}
@Override
- public void saveEntities(UUID objectId, ObjectType objectType, List<Tag> tags, CallContext context) {
- tagStore.put(objectId, tags) ;
+ public void saveEntities(final UUID objectId, final ObjectType objectType, final List<Tag> tags, final CallContext context) {
+ tagStore.put(objectId, tags);
}
@Override
- public Map<String, Tag> loadEntities(UUID objectId, ObjectType objectType) {
+ public Map<String, Tag> loadEntities(final UUID objectId, final ObjectType objectType) {
return getMap(tagStore.get(objectId));
}
@Override
- public Map<String, Tag> loadEntitiesFromTransaction(Transmogrifier dao, UUID objectId, ObjectType objectType) {
+ public Map<String, Tag> loadEntitiesFromTransaction(final Transmogrifier dao, final UUID objectId, final ObjectType objectType) {
return getMap(tagStore.get(objectId));
}
private Map<String, Tag> getMap(@Nullable final List<Tag> tags) {
- Map<String, Tag> map = new HashMap<String, Tag>();
+ final Map<String, Tag> map = new HashMap<String, Tag>();
if (tags != null) {
- for (Tag tag : tags) {
+ for (final Tag tag : tags) {
map.put(tag.getTagDefinitionName(), tag);
}
}
@@ -68,8 +68,8 @@ public class MockTagDao implements TagDao {
@Override
public void insertTag(final UUID objectId, final ObjectType objectType,
final TagDefinition tagDefinition, final CallContext context) {
- Tag tag = new Tag() {
- private UUID id = UUID.randomUUID();
+ final Tag tag = new Tag() {
+ private final UUID id = UUID.randomUUID();
@Override
public String getTagDefinitionName() {
@@ -90,21 +90,13 @@ public class MockTagDao implements TagDao {
}
@Override
- public void insertTags(final UUID objectId, final ObjectType objectType,
- final List<TagDefinition> tagDefinitions, final CallContext context) {
- for (TagDefinition tagDefinition : tagDefinitions) {
- insertTag(objectId, objectType, tagDefinition, context);
- }
- }
-
- @Override
public void deleteTag(final UUID objectId, final ObjectType objectType,
final TagDefinition tagDefinition, final CallContext context) {
- List<Tag> tags = tagStore.get(objectId);
+ final List<Tag> tags = tagStore.get(objectId);
if (tags != null) {
- Iterator<Tag> tagIterator = tags.iterator();
+ final Iterator<Tag> tagIterator = tags.iterator();
while (tagIterator.hasNext()) {
- Tag tag = tagIterator.next();
+ final Tag tag = tagIterator.next();
if (tag.getTagDefinitionName().equals(tagDefinition.getName())) {
tagIterator.remove();
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDefinitionDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDefinitionDao.java
index 5b5956b..d7a3e63 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDefinitionDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDefinitionDao.java
@@ -21,8 +21,8 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.api.TagDefinitionApiException;
+import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.tag.DefaultTagDefinition;
import com.ning.billing.util.tag.TagDefinition;
@@ -42,18 +42,13 @@ public class MockTagDefinitionDao implements TagDefinitionDao {
@Override
public TagDefinition create(final String definitionName, final String description,
final CallContext context) throws TagDefinitionApiException {
- TagDefinition tag = new DefaultTagDefinition(definitionName, description, false);
+ final TagDefinition tag = new DefaultTagDefinition(definitionName, description, false);
tags.put(definitionName, tag);
return tag;
}
@Override
- public void deleteAllTagsForDefinition(final String definitionName, final CallContext context) throws TagDefinitionApiException {
- tags.remove(definitionName);
- }
-
- @Override
public void deleteTagDefinition(final String definitionName, final CallContext context) throws TagDefinitionApiException {
tags.remove(definitionName);
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
new file mode 100644
index 0000000..e986950
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.dao;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.commons.io.IOUtils;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import com.google.common.eventbus.Subscribe;
+import com.google.inject.Inject;
+import com.ning.billing.dbi.MysqlTestingHelper;
+import com.ning.billing.util.bus.Bus;
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.DefaultCallContextFactory;
+import com.ning.billing.util.callcontext.UserType;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.MockTagStoreModuleSql;
+import com.ning.billing.util.tag.Tag;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.TestTagStore;
+import com.ning.billing.util.tag.api.TagEvent;
+
+@Guice(modules = MockTagStoreModuleSql.class)
+public class TestAuditedTagDao {
+ @Inject
+ private MysqlTestingHelper helper;
+
+ @Inject
+ private TagDefinitionDao tagDefinitionDao;
+
+ @Inject
+ private AuditedTagDao tagDao;
+
+ @Inject
+ private Clock clock;
+
+ @Inject
+ private Bus bus;
+
+ private CallContext context;
+ private EventsListener eventsListener;
+
+ @BeforeClass(groups = "slow")
+ public void setup() throws IOException {
+ final String utilDdl = IOUtils.toString(TestTagStore.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
+
+ helper.startMysql();
+ helper.initDb(utilDdl);
+
+ context = new DefaultCallContextFactory(clock).createCallContext("Tag DAO test", CallOrigin.TEST, UserType.TEST, UUID.randomUUID());
+ bus.start();
+ }
+
+ @BeforeMethod(groups = "slow")
+ public void cleanup() throws Bus.EventBusException {
+ eventsListener = new EventsListener();
+ bus.register(eventsListener);
+ }
+
+ @AfterClass(groups = "slow")
+ public void stopMysql() {
+ bus.stop();
+ helper.stopMysql();
+ }
+
+ @Test(groups = "slow")
+ public void testCatchEventsOnCreateAndDelete() throws Exception {
+ final String definitionName = UUID.randomUUID().toString().substring(0, 5);
+ final String description = UUID.randomUUID().toString().substring(0, 5);
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.RECURRING_INVOICE_ITEM;
+
+ // Verify the initial state
+ Assert.assertEquals(eventsListener.getEvents().size(), 0);
+ Assert.assertEquals(eventsListener.getTagEvents().size(), 0);
+
+ // Create a tag definition
+ final TagDefinition createdTagDefinition = tagDefinitionDao.create(definitionName, description, context);
+ Assert.assertEquals(createdTagDefinition.getName(), definitionName);
+ Assert.assertEquals(createdTagDefinition.getDescription(), description);
+
+ // Make sure we can create a tag
+ tagDao.insertTag(objectId, objectType, createdTagDefinition, context);
+
+ // Make sure we can retrieve it via the DAO
+ final Map<String, Tag> foundTags = tagDao.loadEntities(objectId, objectType);
+ Assert.assertEquals(foundTags.keySet().size(), 1);
+ Assert.assertEquals(foundTags.get(definitionName).getTagDefinitionName(), definitionName);
+
+ // Verify we caught an event on the bus - we got 2 total (one for the tag definition, one for the tag)
+ Assert.assertEquals(eventsListener.getEvents().size(), 2);
+ Assert.assertEquals(eventsListener.getTagEvents().size(), 1);
+ final TagEvent tagFirstEventReceived = eventsListener.getTagEvents().get(0);
+ Assert.assertEquals(eventsListener.getEvents().get(1), tagFirstEventReceived);
+ Assert.assertEquals(tagFirstEventReceived.getObjectId(), objectId);
+ Assert.assertEquals(tagFirstEventReceived.getObjectType(), objectType);
+ Assert.assertEquals(tagFirstEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
+ Assert.assertEquals(tagFirstEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
+ Assert.assertEquals(tagFirstEventReceived.getBusEventType(), BusEvent.BusEventType.USER_TAG_CREATION);
+ Assert.assertEquals(tagFirstEventReceived.getUserToken(), context.getUserToken());
+
+ // Delete the tag
+ tagDao.deleteTag(objectId, objectType, createdTagDefinition, context);
+
+ // Make sure the tag is deleted
+ Assert.assertEquals(tagDao.loadEntities(objectId, objectType).keySet().size(), 0);
+
+ // Verify we caught an event on the bus
+ Assert.assertEquals(eventsListener.getEvents().size(), 3);
+ Assert.assertEquals(eventsListener.getTagEvents().size(), 2);
+ final TagEvent tagSecondEventReceived = eventsListener.getTagEvents().get(1);
+ Assert.assertEquals(eventsListener.getEvents().get(2), tagSecondEventReceived);
+ Assert.assertEquals(tagSecondEventReceived.getObjectId(), objectId);
+ Assert.assertEquals(tagSecondEventReceived.getObjectType(), objectType);
+ Assert.assertEquals(tagSecondEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
+ Assert.assertEquals(tagSecondEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
+ Assert.assertEquals(tagSecondEventReceived.getBusEventType(), BusEvent.BusEventType.USER_TAG_DELETION);
+ Assert.assertEquals(tagSecondEventReceived.getUserToken(), context.getUserToken());
+ }
+
+ private static final class EventsListener {
+ private final List<BusEvent> events = new ArrayList<BusEvent>();
+ private final List<TagEvent> tagEvents = new ArrayList<TagEvent>();
+
+ @Subscribe
+ public synchronized void processEvent(final BusEvent event) {
+ events.add(event);
+ }
+
+ @Subscribe
+ public synchronized void processTagDefinitionEvent(final TagEvent tagEvent) {
+ tagEvents.add(tagEvent);
+ }
+
+ public List<BusEvent> getEvents() {
+ return events;
+ }
+
+ public List<TagEvent> getTagEvents() {
+ return tagEvents;
+ }
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
new file mode 100644
index 0000000..cc74c55
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.dao;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.commons.io.IOUtils;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import com.google.common.eventbus.Subscribe;
+import com.google.inject.Inject;
+import com.ning.billing.dbi.MysqlTestingHelper;
+import com.ning.billing.util.bus.Bus;
+import com.ning.billing.util.bus.BusEvent;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.DefaultCallContextFactory;
+import com.ning.billing.util.callcontext.UserType;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.tag.MockTagStoreModuleSql;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.TestTagStore;
+import com.ning.billing.util.tag.api.TagDefinitionEvent;
+
+@Guice(modules = MockTagStoreModuleSql.class)
+public class TestDefaultTagDefinitionDao {
+ @Inject
+ private MysqlTestingHelper helper;
+
+ @Inject
+ private TagDefinitionDao tagDefinitionDao;
+
+ @Inject
+ private Clock clock;
+
+ @Inject
+ private Bus bus;
+
+ private CallContext context;
+ private EventsListener eventsListener;
+
+ @BeforeClass(groups = "slow")
+ public void setup() throws IOException {
+ final String utilDdl = IOUtils.toString(TestTagStore.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
+
+ helper.startMysql();
+ helper.initDb(utilDdl);
+
+ context = new DefaultCallContextFactory(clock).createCallContext("TagDefinition DAO test", CallOrigin.TEST, UserType.TEST, UUID.randomUUID());
+ bus.start();
+ }
+
+ @BeforeMethod(groups = "slow")
+ public void cleanup() throws Bus.EventBusException {
+ eventsListener = new EventsListener();
+ bus.register(eventsListener);
+ }
+
+ @AfterClass(groups = "slow")
+ public void stopMysql() {
+ bus.stop();
+ helper.stopMysql();
+ }
+
+ @Test(groups = "slow")
+ public void testCatchEventsOnCreateAndDelete() throws Exception {
+ final String definitionName = UUID.randomUUID().toString().substring(0, 5);
+ final String description = UUID.randomUUID().toString().substring(0, 5);
+
+ // Verify the initial state
+ Assert.assertEquals(eventsListener.getEvents().size(), 0);
+ Assert.assertEquals(eventsListener.getTagDefinitionEvents().size(), 0);
+
+ // Make sure we can create a tag definition
+ final TagDefinition createdTagDefinition = tagDefinitionDao.create(definitionName, description, context);
+ Assert.assertEquals(createdTagDefinition.getName(), definitionName);
+ Assert.assertEquals(createdTagDefinition.getDescription(), description);
+
+ // Make sure we can retrieve it via the DAO
+ final TagDefinition foundTagDefinition = tagDefinitionDao.getByName(definitionName);
+ Assert.assertEquals(foundTagDefinition, createdTagDefinition);
+
+ // Verify we caught an event on the bus
+ Assert.assertEquals(eventsListener.getEvents().size(), 1);
+ Assert.assertEquals(eventsListener.getTagDefinitionEvents().size(), 1);
+ final TagDefinitionEvent tagDefinitionFirstEventReceived = eventsListener.getTagDefinitionEvents().get(0);
+ Assert.assertEquals(eventsListener.getEvents().get(0), tagDefinitionFirstEventReceived);
+ Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinitionId(), createdTagDefinition.getId());
+ Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinition(), createdTagDefinition);
+ Assert.assertEquals(tagDefinitionFirstEventReceived.getBusEventType(), BusEvent.BusEventType.USER_TAGDEFINITION_CREATION);
+ Assert.assertEquals(tagDefinitionFirstEventReceived.getUserToken(), context.getUserToken());
+
+ // Delete the tag definition
+ tagDefinitionDao.deleteTagDefinition(definitionName, context);
+
+ // Make sure the tag definition is deleted
+ Assert.assertNull(tagDefinitionDao.getByName(definitionName));
+
+ // Verify we caught an event on the bus
+ Assert.assertEquals(eventsListener.getEvents().size(), 2);
+ Assert.assertEquals(eventsListener.getTagDefinitionEvents().size(), 2);
+ final TagDefinitionEvent tagDefinitionSecondEventReceived = eventsListener.getTagDefinitionEvents().get(1);
+ Assert.assertEquals(eventsListener.getEvents().get(1), tagDefinitionSecondEventReceived);
+ Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinitionId(), createdTagDefinition.getId());
+ Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinition(), createdTagDefinition);
+ Assert.assertEquals(tagDefinitionSecondEventReceived.getBusEventType(), BusEvent.BusEventType.USER_TAGDEFINITION_DELETION);
+ Assert.assertEquals(tagDefinitionSecondEventReceived.getUserToken(), context.getUserToken());
+ }
+
+ private static final class EventsListener {
+ private final List<BusEvent> events = new ArrayList<BusEvent>();
+ private final List<TagDefinitionEvent> tagDefinitionEvents = new ArrayList<TagDefinitionEvent>();
+
+ @Subscribe
+ public synchronized void processEvent(final BusEvent event) {
+ events.add(event);
+ }
+
+ @Subscribe
+ public synchronized void processTagDefinitionEvent(final TagDefinitionEvent tagDefinitionEvent) {
+ tagDefinitionEvents.add(tagDefinitionEvent);
+ }
+
+ public List<BusEvent> getEvents() {
+ return events;
+ }
+
+ public List<TagDefinitionEvent> getTagDefinitionEvents() {
+ return tagDefinitionEvents;
+ }
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/util/tag/MockTagStoreModuleSql.java b/util/src/test/java/com/ning/billing/util/tag/MockTagStoreModuleSql.java
index 6dbc537..d7a704b 100644
--- a/util/src/test/java/com/ning/billing/util/tag/MockTagStoreModuleSql.java
+++ b/util/src/test/java/com/ning/billing/util/tag/MockTagStoreModuleSql.java
@@ -19,11 +19,13 @@ package com.ning.billing.util.tag;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.IDBI;
+import org.skife.jdbi.v2.tweak.HandleCallback;
import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.mock.glue.MockClockModule;
+import com.ning.billing.util.bus.Bus;
+import com.ning.billing.util.bus.InMemoryBus;
import com.ning.billing.util.glue.TagStoreModule;
-import org.skife.jdbi.v2.tweak.HandleCallback;
public class MockTagStoreModuleSql extends TagStoreModule {
private MysqlTestingHelper helper;
@@ -34,13 +36,14 @@ public class MockTagStoreModuleSql extends TagStoreModule {
bind(IDBI.class).toInstance(helper.getDBI());
bind(MysqlTestingHelper.class).toInstance(helper);
install(new MockClockModule());
+ bind(Bus.class).toInstance(new InMemoryBus());
super.configure();
}
public void execute(final String ddl) {
helper.getDBI().withHandle(new HandleCallback<Void>() {
@Override
- public Void withHandle(Handle handle) throws Exception {
+ public Void withHandle(final Handle handle) throws Exception {
handle.execute(ddl);
return null;
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
index b452203..69187ae 100644
--- a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
+++ b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
@@ -22,14 +22,6 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import com.ning.billing.invoice.api.InvoiceApiException;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallOrigin;
-import com.ning.billing.util.callcontext.UserType;
-import com.ning.billing.util.callcontext.DefaultCallContextFactory;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
-import com.ning.billing.util.tag.dao.TagDao;
import org.apache.commons.io.IOUtils;
import org.joda.time.DateTime;
import org.joda.time.Seconds;
@@ -38,15 +30,23 @@ import org.skife.jdbi.v2.IDBI;
import org.skife.jdbi.v2.tweak.HandleCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.testng.annotations.Guice;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import com.google.inject.Inject;
import com.ning.billing.dbi.MysqlTestingHelper;
-
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.api.TagDefinitionApiException;
+import com.ning.billing.util.bus.Bus;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.DefaultCallContextFactory;
+import com.ning.billing.util.callcontext.UserType;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
import static org.testng.Assert.assertEquals;
@@ -55,7 +55,7 @@ import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-@Test(groups={"slow"})
+@Test(groups = {"slow"})
@Guice(modules = MockTagStoreModuleSql.class)
public class TestTagStore {
@Inject
@@ -66,19 +66,22 @@ public class TestTagStore {
@Inject
private TagDao tagDao;
-
+
@Inject
private TagDefinitionDao tagDefinitionDao;
@Inject
private Clock clock;
+ @Inject
+ private Bus bus;
+
private TagDefinition testTag;
private final Logger log = LoggerFactory.getLogger(TestTagStore.class);
private CallContext context;
- @BeforeClass(groups="slow")
+ @BeforeClass(groups = "slow")
protected void setup() throws IOException {
// Health check test to make sure MySQL is setup properly
try {
@@ -88,20 +91,20 @@ public class TestTagStore {
helper.initDb(utilDdl);
context = new DefaultCallContextFactory(clock).createCallContext("Tag store test", CallOrigin.TEST, UserType.TEST);
-
+ bus.start();
+
cleanupTags();
tagDefinitionDao.create("tag1", "First tag", context);
testTag = tagDefinitionDao.create("testTag", "Second tag", context);
- }
- catch (Throwable t) {
+ } catch (Throwable t) {
log.error("Failed to start tag store tests", t);
fail(t.toString());
}
}
- @AfterClass(groups="slow")
- public void stopMysql()
- {
+ @AfterClass(groups = "slow")
+ public void stopMysql() {
+ bus.stop();
if (helper != null) {
helper.stopMysql();
}
@@ -111,7 +114,7 @@ public class TestTagStore {
try {
helper.getDBI().withHandle(new HandleCallback<Void>() {
@Override
- public Void withHandle(Handle handle) throws Exception {
+ public Void withHandle(final Handle handle) throws Exception {
handle.createScript("delete from tag_definitions").execute();
handle.createScript("delete from tag_definition_history").execute();
handle.createScript("delete from tags").execute();
@@ -122,52 +125,53 @@ public class TestTagStore {
} catch (Throwable ignore) {
}
}
- @Test(groups="slow")
+
+ @Test(groups = "slow")
public void testTagCreationAndRetrieval() {
- UUID accountId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
- Tag tag = new DescriptiveTag(testTag);
+ final TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
+ final Tag tag = new DescriptiveTag(testTag);
tagStore.add(tag);
tagDao.saveEntities(accountId, ObjectType.ACCOUNT, tagStore.getEntityList(), context);
- Map<String, Tag> savedTags = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
+ final Map<String, Tag> savedTags = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
assertEquals(savedTags.size(), 1);
- Tag savedTag = savedTags.get(tag.getTagDefinitionName());
+ final Tag savedTag = savedTags.get(tag.getTagDefinitionName());
assertEquals(savedTag.getTagDefinitionName(), tag.getTagDefinitionName());
assertEquals(savedTag.getId(), tag.getId());
}
- @Test(groups="slow")
+ @Test(groups = "slow")
public void testControlTagCreation() {
- UUID accountId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
+ final UUID accountId = UUID.randomUUID();
+ final TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
- ControlTag tag = new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF);
+ final ControlTag tag = new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF);
tagStore.add(tag);
assertEquals(tagStore.generateInvoice(), false);
- List<Tag> tagList = tagStore.getEntityList();
+ final List<Tag> tagList = tagStore.getEntityList();
tagDao.saveEntities(accountId, ObjectType.ACCOUNT, tagList, context);
tagStore.clear();
assertEquals(tagStore.getEntityList().size(), 0);
- Map<String, Tag> tagMap = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
+ final Map<String, Tag> tagMap = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
assertEquals(tagMap.size(), 1);
assertEquals(tagMap.containsKey(ControlTagType.AUTO_INVOICING_OFF.toString()), true);
}
- @Test(groups="slow")
+ @Test(groups = "slow")
public void testDescriptiveTagCreation() {
- UUID accountId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
+ final UUID accountId = UUID.randomUUID();
+ final TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
- String definitionName = "SomeTestTag";
+ final String definitionName = "SomeTestTag";
TagDefinition tagDefinition = null;
try {
tagDefinition = tagDefinitionDao.create(definitionName, "Test tag for some test purpose", context);
@@ -175,7 +179,7 @@ public class TestTagStore {
fail("Tag definition creation failed.", e);
}
- DescriptiveTag tag = new DescriptiveTag(tagDefinition);
+ final DescriptiveTag tag = new DescriptiveTag(tagDefinition);
tagStore.add(tag);
assertEquals(tagStore.generateInvoice(), true);
@@ -184,18 +188,18 @@ public class TestTagStore {
tagStore.clear();
assertEquals(tagStore.getEntityList().size(), 0);
- Map<String, Tag> tagMap = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
+ final Map<String, Tag> tagMap = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
assertEquals(tagMap.size(), 1);
assertEquals(tagMap.containsKey(ControlTagType.AUTO_INVOICING_OFF.toString()), false);
}
- @Test(groups="slow")
+ @Test(groups = "slow")
public void testMixedTagCreation() {
- UUID accountId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
+ final UUID accountId = UUID.randomUUID();
+ final TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
- String definitionName = "MixedTagTest";
+ final String definitionName = "MixedTagTest";
TagDefinition tagDefinition = null;
try {
tagDefinition = tagDefinitionDao.create(definitionName, "Test tag for some test purpose", context);
@@ -203,11 +207,11 @@ public class TestTagStore {
fail("Tag definition creation failed.", e);
}
- DescriptiveTag descriptiveTag = new DescriptiveTag(tagDefinition);
+ final DescriptiveTag descriptiveTag = new DescriptiveTag(tagDefinition);
tagStore.add(descriptiveTag);
assertEquals(tagStore.generateInvoice(), true);
- ControlTag controlTag = new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF);
+ final ControlTag controlTag = new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF);
tagStore.add(controlTag);
assertEquals(tagStore.generateInvoice(), false);
@@ -216,39 +220,39 @@ public class TestTagStore {
tagStore.clear();
assertEquals(tagStore.getEntityList().size(), 0);
- Map<String, Tag> tagMap = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
+ final Map<String, Tag> tagMap = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
assertEquals(tagMap.size(), 2);
assertEquals(tagMap.containsKey(ControlTagType.AUTO_INVOICING_OFF.toString()), true);
}
- @Test(groups="slow")
+ @Test(groups = "slow")
public void testControlTags() {
- UUID accountId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
+ final UUID accountId = UUID.randomUUID();
+ final TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
assertEquals(tagStore.generateInvoice(), true);
assertEquals(tagStore.processPayment(), true);
- ControlTag invoiceTag = new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF);
+ final ControlTag invoiceTag = new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF);
tagStore.add(invoiceTag);
assertEquals(tagStore.generateInvoice(), false);
assertEquals(tagStore.processPayment(), true);
- ControlTag paymentTag = new DefaultControlTag(ControlTagType.AUTO_PAY_OFF);
+ final ControlTag paymentTag = new DefaultControlTag(ControlTagType.AUTO_PAY_OFF);
tagStore.add(paymentTag);
assertEquals(tagStore.generateInvoice(), false);
assertEquals(tagStore.processPayment(), false);
}
- @Test(groups="slow", expectedExceptions = TagDefinitionApiException.class)
+ @Test(groups = "slow", expectedExceptions = TagDefinitionApiException.class)
public void testTagDefinitionCreationWithControlTagName() throws TagDefinitionApiException {
- String definitionName = ControlTagType.AUTO_PAY_OFF.toString();
+ final String definitionName = ControlTagType.AUTO_PAY_OFF.toString();
tagDefinitionDao.create(definitionName, "This should break", context);
}
- @Test(groups="slow")
+ @Test(groups = "slow")
public void testTagDefinitionDeletionForUnusedDefinition() throws TagDefinitionApiException {
- String definitionName = "TestTag1234";
+ final String definitionName = "TestTag1234";
tagDefinitionDao.create(definitionName, "Some test tag", context);
TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName);
@@ -259,79 +263,52 @@ public class TestTagStore {
assertNull(tagDefinition);
}
- @Test(groups="slow", expectedExceptions = TagDefinitionApiException.class)
+ @Test(groups = "slow", expectedExceptions = TagDefinitionApiException.class)
public void testTagDefinitionDeletionForDefinitionInUse() throws TagDefinitionApiException {
- String definitionName = "TestTag12345";
+ final String definitionName = "TestTag12345";
tagDefinitionDao.create(definitionName, "Some test tag", context);
- TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName);
+ final TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName);
assertNotNull(tagDefinition);
- UUID objectId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(objectId, ObjectType.ACCOUNT);
- Tag tag = new DescriptiveTag(tagDefinition);
+ final UUID objectId = UUID.randomUUID();
+ final TagStore tagStore = new DefaultTagStore(objectId, ObjectType.ACCOUNT);
+ final Tag tag = new DescriptiveTag(tagDefinition);
tagStore.add(tag);
tagDao.saveEntities(objectId, ObjectType.ACCOUNT, tagStore.getEntityList(), context);
- Map<String, Tag> tagMap = tagDao.loadEntities(objectId, ObjectType.ACCOUNT);
+ final Map<String, Tag> tagMap = tagDao.loadEntities(objectId, ObjectType.ACCOUNT);
assertEquals(tagMap.size(), 1);
tagDefinitionDao.deleteTagDefinition(definitionName, context);
}
- @Test(groups="slow")
- public void testDeleteAllTagsForDefinitionInUse() {
- String definitionName = "TestTag1234567";
+ @Test(groups = "slow")
+ public void testDeleteTagBeforeDeleteTagDefinition() throws TagApiException {
+ final String definitionName = "TestTag1234567";
try {
tagDefinitionDao.create(definitionName, "Some test tag", context);
} catch (TagDefinitionApiException e) {
fail("Could not create tag definition", e);
}
- TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName);
+ final TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName);
assertNotNull(tagDefinition);
- UUID objectId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(objectId, ObjectType.ACCOUNT);
- Tag tag = new DescriptiveTag(tagDefinition);
+ final UUID objectId = UUID.randomUUID();
+ final TagStore tagStore = new DefaultTagStore(objectId, ObjectType.ACCOUNT);
+ final Tag tag = new DescriptiveTag(tagDefinition);
tagStore.add(tag);
tagDao.saveEntities(objectId, ObjectType.ACCOUNT, tagStore.getEntityList(), context);
- Map<String, Tag> tagMap = tagDao.loadEntities(objectId, ObjectType.ACCOUNT);
+ final Map<String, Tag> tagMap = tagDao.loadEntities(objectId, ObjectType.ACCOUNT);
assertEquals(tagMap.size(), 1);
- try {
- tagDefinitionDao.deleteAllTagsForDefinition(definitionName, context);
- } catch (TagDefinitionApiException e) {
- fail("Could not delete tagStore for tag definition", e);
- }
-
- try {
- tagDefinitionDao.deleteTagDefinition(definitionName, context);
- } catch (TagDefinitionApiException e) {
- fail("Could not delete tag definition", e);
- }
- }
-
- @Test(groups="slow")
- public void testDeleteAllTagsForDefinitionNotInUse() {
- String definitionName = "TestTag4321";
- try {
- tagDefinitionDao.create(definitionName, "Some test tag", context);
- } catch (TagDefinitionApiException e) {
- fail("Could not create tag definition", e);
- }
-
- TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName);
- assertNotNull(tagDefinition);
-
- try {
- tagDefinitionDao.deleteAllTagsForDefinition(definitionName, context);
- } catch (TagDefinitionApiException e) {
- fail("Could not delete tagStore for tag definition", e);
- }
+ tagDao.deleteTag(objectId, ObjectType.ACCOUNT, tagDefinition, context);
+ final Map<String, Tag> tagMapAfterDeletion = tagDao.loadEntities(objectId, ObjectType.ACCOUNT);
+ assertEquals(tagMapAfterDeletion.size(), 0);
try {
tagDefinitionDao.deleteTagDefinition(definitionName, context);
@@ -340,72 +317,50 @@ public class TestTagStore {
}
}
- @Test(groups="slow", expectedExceptions = TagDefinitionApiException.class)
- public void testDeleteAllTagsForDefinitionWithWrongName() throws TagDefinitionApiException {
- String definitionName = "TestTag654321";
- String wrongDefinitionName = "TestTag564321";
- try {
- tagDefinitionDao.create(definitionName, "Some test tag", context);
- } catch (TagDefinitionApiException e) {
- fail("Could not create tag definition", e);
- }
-
- TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName);
- assertNotNull(tagDefinition);
-
- tagDefinitionDao.deleteAllTagsForDefinition(wrongDefinitionName, context);
-
- try {
- tagDefinitionDao.deleteTagDefinition(definitionName, context);
- } catch (TagDefinitionApiException e) {
- fail("Could not delete tag definition", e);
- }
- }
-
- @Test(groups="slow")
+ @Test(groups = "slow")
public void testGetTagDefinitions() {
- List<TagDefinition> definitionList = tagDefinitionDao.getTagDefinitions();
+ final List<TagDefinition> definitionList = tagDefinitionDao.getTagDefinitions();
assertTrue(definitionList.size() >= ControlTagType.values().length);
}
@Test
public void testTagInsertAudit() {
- UUID accountId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
- Tag tag = new DescriptiveTag(testTag);
+ final TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
+ final Tag tag = new DescriptiveTag(testTag);
tagStore.add(tag);
tagDao.saveEntities(accountId, ObjectType.ACCOUNT, tagStore.getEntityList(), context);
- Map<String, Tag> savedTags = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
+ final Map<String, Tag> savedTags = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
assertEquals(savedTags.size(), 1);
- Tag savedTag = savedTags.get(tag.getTagDefinitionName());
+ final Tag savedTag = savedTags.get(tag.getTagDefinitionName());
assertEquals(savedTag.getTagDefinitionName(), tag.getTagDefinitionName());
assertEquals(savedTag.getId(), tag.getId());
- Handle handle = dbi.open();
- String query = String.format("select * from audit_log a inner join tag_history th on a.record_id = th.history_record_id where a.table_name = 'tag_history' and th.id='%s' and a.change_type='INSERT'",
- tag.getId().toString());
- List<Map<String, Object>> result = handle.select(query);
+ final Handle handle = dbi.open();
+ final String query = String.format("select * from audit_log a inner join tag_history th on a.record_id = th.history_record_id where a.table_name = 'tag_history' and th.id='%s' and a.change_type='INSERT'",
+ tag.getId().toString());
+ final List<Map<String, Object>> result = handle.select(query);
handle.close();
assertNotNull(result);
assertEquals(result.size(), 1);
assertEquals(result.get(0).get("change_type"), "INSERT");
assertNotNull(result.get(0).get("change_date"));
- DateTime changeDate = new DateTime(result.get(0).get("change_date"));
+ final DateTime changeDate = new DateTime(result.get(0).get("change_date"));
assertTrue(Seconds.secondsBetween(changeDate, context.getCreatedDate()).getSeconds() < 2);
assertEquals(result.get(0).get("changed_by"), context.getUserName());
}
@Test
public void testTagDeleteAudit() {
- UUID accountId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
- TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
- Tag tag = new DescriptiveTag(testTag);
+ final TagStore tagStore = new DefaultTagStore(accountId, ObjectType.ACCOUNT);
+ final Tag tag = new DescriptiveTag(testTag);
tagStore.add(tag);
tagDao.saveEntities(accountId, ObjectType.ACCOUNT, tagStore.getEntityList(), context);
@@ -413,38 +368,38 @@ public class TestTagStore {
tagStore.remove(tag);
tagDao.saveEntities(accountId, ObjectType.ACCOUNT, tagStore.getEntityList(), context);
- Map<String, Tag> savedTags = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
+ final Map<String, Tag> savedTags = tagDao.loadEntities(accountId, ObjectType.ACCOUNT);
assertEquals(savedTags.size(), 0);
- Handle handle = dbi.open();
- String query = String.format("select * from audit_log a inner join tag_history th on a.record_id = th.history_record_id where a.table_name = 'tag_history' and th.id='%s' and a.change_type='DELETE'",
- tag.getId().toString());
- List<Map<String, Object>> result = handle.select(query);
+ final Handle handle = dbi.open();
+ final String query = String.format("select * from audit_log a inner join tag_history th on a.record_id = th.history_record_id where a.table_name = 'tag_history' and th.id='%s' and a.change_type='DELETE'",
+ tag.getId().toString());
+ final List<Map<String, Object>> result = handle.select(query);
handle.close();
assertNotNull(result);
assertEquals(result.size(), 1);
assertNotNull(result.get(0).get("change_date"));
- DateTime changeDate = new DateTime(result.get(0).get("change_date"));
+ final DateTime changeDate = new DateTime(result.get(0).get("change_date"));
assertTrue(Seconds.secondsBetween(changeDate, context.getUpdatedDate()).getSeconds() < 2);
assertEquals(result.get(0).get("changed_by"), context.getUserName());
}
@Test
- public void testAddTag() {
- UUID objectId = UUID.randomUUID();
- ObjectType objectType = ObjectType.INVOICE;
- TagDefinition tagDefinition = new DefaultTagDefinition("test tag", "test", false);
+ public void testAddTag() throws TagApiException {
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.INVOICE;
+ final TagDefinition tagDefinition = new DefaultTagDefinition("test tag", "test", false);
tagDao.insertTag(objectId, objectType, tagDefinition, context);
- Map<String, Tag> savedTags = tagDao.loadEntities(objectId, objectType);
+ final Map<String, Tag> savedTags = tagDao.loadEntities(objectId, objectType);
assertEquals(savedTags.size(), 1);
}
@Test
- public void testRemoveTag() throws InvoiceApiException {
- UUID objectId = UUID.randomUUID();
- ObjectType objectType = ObjectType.INVOICE;
- TagDefinition tagDefinition = new DefaultTagDefinition("test tag", "test", false);
+ public void testRemoveTag() throws TagApiException {
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.INVOICE;
+ final TagDefinition tagDefinition = new DefaultTagDefinition("test tag", "test", false);
tagDao.insertTag(objectId, objectType, tagDefinition, context);
Map<String, Tag> savedTags = tagDao.loadEntities(objectId, objectType);
assertEquals(savedTags.size(), 1);
@@ -456,10 +411,10 @@ public class TestTagStore {
@Test
public void testSetTags() {
- UUID objectId = UUID.randomUUID();
- ObjectType objectType = ObjectType.INVOICE;
+ final UUID objectId = UUID.randomUUID();
+ final ObjectType objectType = ObjectType.INVOICE;
- List<Tag> tags = new ArrayList<Tag>();
+ final List<Tag> tags = new ArrayList<Tag>();
tags.add(new DescriptiveTag("test 1"));
tags.add(new DescriptiveTag("test 2"));
tags.add(new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF));