killbill-aplcache
Changes
invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java 2(+1 -1)
invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java 3(+2 -1)
Details
diff --git a/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java b/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
index b540d4a..9f497c6 100644
--- a/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
+++ b/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
@@ -32,7 +32,7 @@ public class DefaultAccount extends EntityBase implements Account {
// some fields
public static final String DEFAULT_STRING_VALUE = "";
public static final Integer DEFAULT_INTEGER_VALUE = 0;
- public static final Integer DEFAULT_BCD_VALUE = DEFAULT_INTEGER_VALUE;
+ public static final BillCycleDay DEFAULT_BCD_VALUE = new DefaultBillCycleDay(DEFAULT_INTEGER_VALUE);
public static final Currency DEFAULT_CURRENCY_VALUE = Currency.USD;
public static final DateTimeZone DEFAULT_TIMEZONE_VALUE = DateTimeZone.UTC;
private static final Boolean DEFAULT_MIGRATED_VALUE = true;
@@ -43,7 +43,7 @@ public class DefaultAccount extends EntityBase implements Account {
private final String name;
private final Integer firstNameLength;
private final Currency currency;
- private final Integer billCycleDay;
+ private final BillCycleDay billCycleDay;
private final UUID paymentMethodId;
private final DateTimeZone timeZone;
private final String locale;
@@ -82,7 +82,7 @@ public class DefaultAccount extends EntityBase implements Account {
*/
public DefaultAccount(final UUID id, final String externalKey, final String email,
final String name, final Integer firstNameLength,
- final Currency currency, final Integer billCycleDay, final UUID paymentMethodId,
+ final Currency currency, final BillCycleDay billCycleDay, final UUID paymentMethodId,
final DateTimeZone timeZone, final String locale,
final String address1, final String address2, final String companyName,
final String city, final String stateOrProvince, final String country,
@@ -136,7 +136,7 @@ public class DefaultAccount extends EntityBase implements Account {
}
@Override
- public Integer getBillCycleDay() {
+ public BillCycleDay getBillCycleDay() {
return Objects.firstNonNull(billCycleDay, DEFAULT_BCD_VALUE);
}
diff --git a/account/src/main/java/com/ning/billing/account/api/DefaultBillCycleDay.java b/account/src/main/java/com/ning/billing/account/api/DefaultBillCycleDay.java
new file mode 100644
index 0000000..e5587be
--- /dev/null
+++ b/account/src/main/java/com/ning/billing/account/api/DefaultBillCycleDay.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.account.api;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class DefaultBillCycleDay implements BillCycleDay {
+
+ private final int dayOfMonthLocal;
+ private final int dayOfMonthUTC;
+
+ public DefaultBillCycleDay(final int dayOfMonthUTC) {
+ this(dayOfMonthUTC, dayOfMonthUTC);
+ }
+
+ public DefaultBillCycleDay(final BillCycleDay billCycleDay) {
+ this(billCycleDay.getDayOfMonthLocal(), billCycleDay.getDayOfMonthUTC());
+ }
+
+ @JsonCreator
+ public DefaultBillCycleDay(@JsonProperty("dayOfMonthLocal") final int dayOfMonthLocal,
+ @JsonProperty("dayOfMonthUTC") final int dayOfMonthUTC) {
+ this.dayOfMonthLocal = dayOfMonthLocal;
+ this.dayOfMonthUTC = dayOfMonthUTC;
+ }
+
+ @Override
+ public int getDayOfMonthUTC() {
+ return dayOfMonthUTC;
+ }
+
+ @Override
+ public int getDayOfMonthLocal() {
+ return dayOfMonthLocal;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DefaultBillCycleDay");
+ sb.append("{dayOfMonthLocal=").append(dayOfMonthLocal);
+ sb.append(", dayOfMonthUTC=").append(dayOfMonthUTC);
+ 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 DefaultBillCycleDay that = (DefaultBillCycleDay) o;
+
+ if (dayOfMonthLocal != that.dayOfMonthLocal) return false;
+ if (dayOfMonthUTC != that.dayOfMonthUTC) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = dayOfMonthLocal;
+ result = 31 * result + dayOfMonthUTC;
+ return result;
+ }
+}
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
index e8ceefb..bde268a 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
@@ -20,32 +20,29 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountChangeEvent;
import com.ning.billing.account.api.ChangedField;
import com.ning.billing.account.api.DefaultChangedField;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
public class DefaultAccountChangeEvent implements AccountChangeEvent {
private final UUID userToken;
private final List<ChangedField> changedFields;
private final UUID accountId;
-
@JsonCreator
public DefaultAccountChangeEvent(@JsonProperty("userToken") final UUID userToken,
@JsonProperty("changeFields") final List<ChangedField> changedFields,
@JsonProperty("accountId") final UUID accountId) {
- super();
this.userToken = userToken;
this.accountId = accountId;
this.changedFields = changedFields;
- //new ArrayList<ChangedField>();
- //this.changedFields.addAll(changedFields);
}
public DefaultAccountChangeEvent(final UUID id, final UUID userToken, final Account oldData, final Account newData) {
@@ -87,11 +84,11 @@ public class DefaultAccountChangeEvent implements AccountChangeEvent {
final int prime = 31;
int result = 1;
result = prime * result
- + ((accountId == null) ? 0 : accountId.hashCode());
+ + ((accountId == null) ? 0 : accountId.hashCode());
result = prime * result
- + ((changedFields == null) ? 0 : changedFields.hashCode());
+ + ((changedFields == null) ? 0 : changedFields.hashCode());
result = prime * result
- + ((userToken == null) ? 0 : userToken.hashCode());
+ + ((userToken == null) ? 0 : userToken.hashCode());
return result;
}
@@ -150,7 +147,7 @@ public class DefaultAccountChangeEvent implements AccountChangeEvent {
addIfValueChanged(tmpChangedFields,
"billCycleDay",
- Integer.toString(oldData.getBillCycleDay()), Integer.toString(newData.getBillCycleDay()));
+ oldData.getBillCycleDay().toString(), newData.getBillCycleDay().toString());
addIfValueChanged(tmpChangedFields, "paymentMethodId",
(oldData.getPaymentMethodId() != null) ? oldData.getPaymentMethodId().toString() : null,
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
index 025ff14..4c7f93b 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
@@ -26,6 +26,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountCreationEvent;
import com.ning.billing.account.api.AccountData;
+import com.ning.billing.account.api.BillCycleDay;
+import com.ning.billing.account.api.DefaultBillCycleDay;
import com.ning.billing.catalog.api.Currency;
public class DefaultAccountCreationEvent implements AccountCreationEvent {
@@ -124,7 +126,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
private final String name;
private final Integer firstNameLength;
private final String email;
- private final Integer billCycleDay;
+ private final DefaultBillCycleDay billCycleDay;
private final String currency;
private final UUID paymentMethodId;
private final String timeZone;
@@ -145,7 +147,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
d.getName(),
d.getFirstNameLength(),
d.getEmail(),
- d.getBillCycleDay(),
+ new DefaultBillCycleDay(d.getBillCycleDay()),
d.getCurrency() != null ? d.getCurrency().name() : null,
d.getPaymentMethodId(),
d.getTimeZone() != null ? d.getTimeZone().getID() : null,
@@ -167,7 +169,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
@JsonProperty("name") final String name,
@JsonProperty("firstNameLength") final Integer firstNameLength,
@JsonProperty("email") final String email,
- @JsonProperty("billCycleDay") final Integer billCycleDay,
+ @JsonProperty("billCycleDay") final DefaultBillCycleDay billCycleDay,
@JsonProperty("currency") final String currency,
@JsonProperty("paymentMethodId") final UUID paymentMethodId,
@JsonProperty("timeZone") final String timeZone,
@@ -225,7 +227,7 @@ public class DefaultAccountCreationEvent implements AccountCreationEvent {
}
@Override
- public Integer getBillCycleDay() {
+ public BillCycleDay getBillCycleDay() {
return billCycleDay;
}
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountBinder.java b/account/src/main/java/com/ning/billing/account/dao/AccountBinder.java
index a170b64..3a413f0 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountBinder.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountBinder.java
@@ -48,7 +48,8 @@ public @interface AccountBinder {
q.bind("firstNameLength", account.getFirstNameLength());
final Currency currency = account.getCurrency();
q.bind("currency", (currency == null) ? null : currency.toString());
- q.bind("billingCycleDay", account.getBillCycleDay());
+ q.bind("billingCycleDayLocal", account.getBillCycleDay().getDayOfMonthLocal());
+ q.bind("billingCycleDayUTC", account.getBillCycleDay().getDayOfMonthUTC());
q.bind("paymentMethodId", account.getPaymentMethodId() != null ? account.getPaymentMethodId().toString() : null);
final DateTimeZone timeZone = account.getTimeZone();
q.bind("timeZone", (timeZone == null) ? null : timeZone.toString());
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountHistoryBinder.java b/account/src/main/java/com/ning/billing/account/dao/AccountHistoryBinder.java
index 475bf26..7e99fa6 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountHistoryBinder.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountHistoryBinder.java
@@ -53,7 +53,8 @@ public @interface AccountHistoryBinder {
q.bind("firstNameLength", account.getFirstNameLength());
final Currency currency = account.getCurrency();
q.bind("currency", (currency == null) ? null : currency.toString());
- q.bind("billingCycleDay", account.getBillCycleDay());
+ q.bind("billingCycleDayLocal", account.getBillCycleDay().getDayOfMonthLocal());
+ q.bind("billingCycleDayUTC", account.getBillCycleDay().getDayOfMonthUTC());
q.bind("paymentMethodId", account.getPaymentMethodId() != null ? account.getPaymentMethodId().toString() : null);
final DateTimeZone timeZone = account.getTimeZone();
q.bind("timeZone", (timeZone == null) ? null : timeZone.toString());
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountMapper.java b/account/src/main/java/com/ning/billing/account/dao/AccountMapper.java
index f443993..90a6b25 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountMapper.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountMapper.java
@@ -26,6 +26,7 @@ import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.DefaultAccount;
+import com.ning.billing.account.api.DefaultBillCycleDay;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.util.dao.MapperBase;
@@ -37,7 +38,8 @@ public class AccountMapper extends MapperBase implements ResultSetMapper<Account
final String email = result.getString("email");
final String name = result.getString("name");
final int firstNameLength = result.getInt("first_name_length");
- final int billingCycleDay = result.getInt("billing_cycle_day");
+ final int billingCycleDayLocal = result.getInt("billing_cycle_day_local");
+ final int billingCycleDayUTC = result.getInt("billing_cycle_day_utc");
final String currencyString = result.getString("currency");
final Currency currency = (currencyString == null) ? null : Currency.valueOf(currencyString);
@@ -62,7 +64,7 @@ public class AccountMapper extends MapperBase implements ResultSetMapper<Account
final Boolean isNotifiedForInvoices = result.getBoolean("is_notified_for_invoices");
return new DefaultAccount(id, externalKey, email, name, firstNameLength, currency,
- billingCycleDay, paymentMethodId, timeZone, locale,
+ new DefaultBillCycleDay(billingCycleDayLocal, billingCycleDayUTC), paymentMethodId, timeZone, locale,
address1, address2, companyName, city, stateOrProvince, country, postalCode, phone,
isMigrated, isNotifiedForInvoices);
}
diff --git a/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg b/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
index dd7b8da..c6f3c83 100644
--- a/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
+++ b/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
@@ -7,7 +7,8 @@ accountFields(prefix) ::= <<
<prefix>name,
<prefix>first_name_length,
<prefix>currency,
- <prefix>billing_cycle_day,
+ <prefix>billing_cycle_day_local,
+ <prefix>billing_cycle_day_utc,
<prefix>payment_method_id,
<prefix>time_zone,
<prefix>locale,
@@ -31,8 +32,8 @@ create() ::= <<
INSERT INTO accounts
(<accountFields()>)
VALUES
- (:id, :externalKey, :email, :name, :firstNameLength, :currency, :billingCycleDay,
- :paymentMethodId, :timeZone, :locale,
+ (:id, :externalKey, :email, :name, :firstNameLength, :currency, :billingCycleDayLocal,
+ :billingCycleDayUTC, :paymentMethodId, :timeZone, :locale,
:address1, :address2, :companyName, :city, :stateOrProvince, :country, :postalCode, :phone,
:migrated, :isNotifiedForInvoices, :userName, :createdDate, :userName, :updatedDate);
>>
@@ -40,8 +41,8 @@ create() ::= <<
update() ::= <<
UPDATE accounts
SET email = :email, name = :name, first_name_length = :firstNameLength,
- currency = :currency, billing_cycle_day = :billingCycleDay, payment_method_id = :paymentMethodId,
- time_zone = :timeZone, locale = :locale,
+ currency = :currency, billing_cycle_day_local = :billingCycleDayLocal, billing_cycle_day_utc = :billingCycleDayUTC,
+ payment_method_id = :paymentMethodId, time_zone = :timeZone, locale = :locale,
address1 = :address1, address2 = :address2, company_name = :companyName, city = :city, state_or_province = :stateOrProvince,
country = :country, postal_code = :postalCode, phone = :phone,
is_notified_for_invoices = :isNotifiedForInvoices, updated_date = :updatedDate, updated_by = :userName
@@ -56,7 +57,8 @@ historyFields() ::= <<
name,
first_name_length,
currency,
- billing_cycle_day,
+ billing_cycle_day_local,
+ billing_cycle_day_utc,
payment_method_id,
time_zone,
locale,
@@ -91,7 +93,7 @@ insertHistoryFromTransaction() ::= <<
INSERT INTO account_history(<historyFields()>)
VALUES
(:recordId, :id, :externalKey, :email, :name, :firstNameLength, :currency,
- :billingCycleDay, :paymentMethodId, :timeZone, :locale,
+ :billingCycleDayLocal, :billingCycleDayUTC, :paymentMethodId, :timeZone, :locale,
:address1, :address2, :companyName, :city, :stateOrProvince,
:country, :postalCode, :phone, :migrated, :isNotifiedForInvoices, :changeType, :userName, :createdDate);
>>
diff --git a/account/src/main/resources/com/ning/billing/account/ddl.sql b/account/src/main/resources/com/ning/billing/account/ddl.sql
index c10aaf9..fe9ec44 100644
--- a/account/src/main/resources/com/ning/billing/account/ddl.sql
+++ b/account/src/main/resources/com/ning/billing/account/ddl.sql
@@ -7,7 +7,8 @@ CREATE TABLE accounts (
name varchar(100) NOT NULL,
first_name_length int NOT NULL,
currency char(3) DEFAULT NULL,
- billing_cycle_day int DEFAULT NULL,
+ billing_cycle_day_local int DEFAULT NULL,
+ billing_cycle_day_utc int DEFAULT NULL,
payment_method_id char(36) DEFAULT NULL,
time_zone varchar(50) DEFAULT NULL,
locale varchar(5) DEFAULT NULL,
@@ -41,7 +42,8 @@ CREATE TABLE account_history (
name varchar(100) NOT NULL,
first_name_length int NOT NULL,
currency char(3) DEFAULT NULL,
- billing_cycle_day int DEFAULT NULL,
+ billing_cycle_day_local int DEFAULT NULL,
+ billing_cycle_day_utc int DEFAULT NULL,
payment_method_id char(36) DEFAULT NULL,
time_zone varchar(50) DEFAULT NULL,
locale varchar(5) DEFAULT NULL,
diff --git a/account/src/test/java/com/ning/billing/account/api/user/TestDefaultAccountUserApi.java b/account/src/test/java/com/ning/billing/account/api/user/TestDefaultAccountUserApi.java
index 6de32f6..d6c804a 100644
--- a/account/src/test/java/com/ning/billing/account/api/user/TestDefaultAccountUserApi.java
+++ b/account/src/test/java/com/ning/billing/account/api/user/TestDefaultAccountUserApi.java
@@ -27,8 +27,10 @@ import org.testng.annotations.Test;
import com.ning.billing.account.AccountTestSuite;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountData;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.account.api.DefaultAccount;
import com.ning.billing.account.api.DefaultAccountEmail;
+import com.ning.billing.account.api.DefaultBillCycleDay;
import com.ning.billing.account.dao.AccountDao;
import com.ning.billing.account.dao.AccountEmailDao;
import com.ning.billing.account.dao.MockAccountDao;
@@ -61,7 +63,7 @@ public class TestDefaultAccountUserApi extends AccountTestSuite {
final String name = UUID.randomUUID().toString();
final Integer firstNameLength = Integer.MAX_VALUE;
final Currency currency = Currency.BRL;
- final Integer billCycleDay = Integer.MIN_VALUE;
+ final BillCycleDay billCycleDay = new DefaultBillCycleDay(Integer.MIN_VALUE, Integer.MAX_VALUE);
final UUID paymentMethodId = UUID.randomUUID();
final DateTimeZone timeZone = DateTimeZone.UTC;
final String locale = UUID.randomUUID().toString();
diff --git a/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java b/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
index a15d101..34bc971 100644
--- a/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
+++ b/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
@@ -26,6 +26,7 @@ import org.testng.annotations.Test;
import com.ning.billing.account.AccountTestSuite;
import com.ning.billing.account.api.AccountChangeEvent;
import com.ning.billing.account.api.ChangedField;
+import com.ning.billing.account.api.DefaultBillCycleDay;
import com.ning.billing.account.api.DefaultChangedField;
import com.ning.billing.account.api.user.DefaultAccountCreationEvent.DefaultAccountData;
import com.ning.billing.util.jackson.ObjectMapper;
@@ -49,13 +50,12 @@ public class TestEventJson extends AccountTestSuite {
@Test(groups = "fast")
public void testAccountCreationEvent() throws Exception {
- final DefaultAccountData data = new DefaultAccountData("dsfdsf", "bobo", 3, "bobo@yahoo.com", 12, "USD", UUID.randomUUID(),
+ final DefaultAccountData data = new DefaultAccountData("dsfdsf", "bobo", 3, "bobo@yahoo.com", new DefaultBillCycleDay(12), "USD", UUID.randomUUID(),
"UTC", "US", "21 avenue", "", "Gling", "San Franciso", "CA", "94110", "USA", "4126789887", false, false);
final DefaultAccountCreationEvent e = new DefaultAccountCreationEvent(data, UUID.randomUUID(), UUID.randomUUID());
-
final String json = mapper.writeValueAsString(e);
- final Class<?> claz = Class.forName(DefaultAccountCreationEvent.class.getName());
- final Object obj = mapper.readValue(json, claz);
+
+ final Object obj = mapper.readValue(json, DefaultAccountCreationEvent.class);
Assert.assertTrue(obj.equals(e));
}
}
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 5d457e2..06d4bb9 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
@@ -32,7 +32,10 @@ import com.ning.billing.account.api.AccountData;
import com.ning.billing.account.api.AccountEmail;
import com.ning.billing.account.api.DefaultAccount;
import com.ning.billing.account.api.DefaultAccountEmail;
+import com.ning.billing.account.api.DefaultBillCycleDay;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.mock.MockAccountBuilder;
+import com.ning.billing.mock.api.MockBillCycleDay;
import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.customfield.CustomField;
import com.ning.billing.util.customfield.StringCustomField;
@@ -69,7 +72,7 @@ public class TestAccountDao extends AccountDaoTestBase {
final int firstNameLength = firstName.length();
return new DefaultAccount(UUID.randomUUID(), thisKey, thisEmail, name, firstNameLength, Currency.USD,
- billCycleDay, UUID.randomUUID(), timeZone, locale,
+ new DefaultBillCycleDay(billCycleDay, billCycleDay), UUID.randomUUID(), timeZone, locale,
null, null, null, null, null, null, null, // add null address fields
phone, false, false);
}
@@ -186,102 +189,11 @@ public class TestAccountDao extends AccountDaoTestBase {
final Account account = createTestAccount(1);
accountDao.create(account, context);
- final AccountData accountData = new AccountData() {
- @Override
- public String getExternalKey() {
- return account.getExternalKey();
- }
-
- @Override
- public String getName() {
- return "Jane Doe";
- }
-
- @Override
- public Integer getFirstNameLength() {
- return 4;
- }
-
- @Override
- public String getEmail() {
- return account.getEmail();
- }
-
- @Override
- public String getPhone() {
- return account.getPhone();
- }
-
- @Override
- public Boolean isMigrated() {
- return false;
- }
-
- @Override
- public Boolean isNotifiedForInvoices() {
- return false;
- }
-
- @Override
- public Integer getBillCycleDay() {
- return account.getBillCycleDay();
- }
-
- @Override
- public Currency getCurrency() {
- return account.getCurrency();
- }
-
- @Override
- public UUID getPaymentMethodId() {
- return account.getPaymentMethodId();
- }
-
- @Override
- public DateTimeZone getTimeZone() {
- return DateTimeZone.forID("Australia/Darwin");
- }
-
- @Override
- public String getLocale() {
- return "FR-CA";
- }
-
- @Override
- public String getAddress1() {
- return null;
- }
-
- @Override
- public String getAddress2() {
- return null;
- }
-
- @Override
- public String getCompanyName() {
- return null;
- }
-
- @Override
- public String getCity() {
- return null;
- }
-
- @Override
- public String getStateOrProvince() {
- return null;
- }
-
- @Override
- public String getPostalCode() {
- return null;
- }
-
- @Override
- public String getCountry() {
- return null;
- }
- };
+ final AccountData accountData = new MockAccountBuilder(account).migrated(false)
+ .isNotifiedForInvoices(false)
+ .timeZone(DateTimeZone.forID("Australia/Darwin"))
+ .locale("FR-CA")
+ .build();
final Account updatedAccount = new DefaultAccount(account.getId(), accountData);
accountDao.update(updatedAccount, context);
@@ -309,7 +221,7 @@ public class TestAccountDao extends AccountDaoTestBase {
public void testAddingContactInformation() throws Exception {
final UUID accountId = UUID.randomUUID();
final DefaultAccount account = new DefaultAccount(accountId, "extKey123456", "myemail123456@glam.com",
- "John Smith", 4, Currency.USD, 15, null,
+ "John Smith", 4, Currency.USD, new DefaultBillCycleDay(15), null,
DateTimeZone.forID("America/Cambridge_Bay"), "EN-CA",
null, null, null, null, null, null, null, null, false, false);
accountDao.create(account, context);
@@ -324,7 +236,7 @@ public class TestAccountDao extends AccountDaoTestBase {
final String phone = "18001112222";
final DefaultAccount updatedAccount = new DefaultAccount(accountId, "extKey123456", "myemail123456@glam.com",
- "John Smith", 4, Currency.USD, 15, null,
+ "John Smith", 4, Currency.USD, new DefaultBillCycleDay(15), null,
DateTimeZone.forID("America/Cambridge_Bay"), "EN-CA",
address1, address2, companyName, city, stateOrProvince, country,
postalCode, phone, false, false);
@@ -351,14 +263,14 @@ public class TestAccountDao extends AccountDaoTestBase {
final String originalExternalKey = "extKey1337";
final DefaultAccount account = new DefaultAccount(accountId, originalExternalKey, "myemail1337@glam.com",
- "John Smith", 4, Currency.USD, 15, null,
+ "John Smith", 4, Currency.USD, new DefaultBillCycleDay(15), null,
null, null, null, null, null, null, null, null, null, null,
false, false);
accountDao.create(account, context);
final String buggyKey = "extKey1338";
final DefaultAccount updatedAccountData = new DefaultAccount(accountId, buggyKey, "myemail1337@glam.com",
- "John Smith", 4, Currency.USD, 15, null,
+ "John Smith", 4, Currency.USD, new DefaultBillCycleDay(15), null,
null, null, null, null, null, null, null, null, null, null,
false, false);
accountDao.update(updatedAccountData, context);
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountData.java b/api/src/main/java/com/ning/billing/account/api/AccountData.java
index 055338b..6816c4f 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountData.java
@@ -31,7 +31,7 @@ public interface AccountData {
public String getEmail();
- public Integer getBillCycleDay();
+ public BillCycleDay getBillCycleDay();
public Currency getCurrency();
diff --git a/api/src/main/java/com/ning/billing/account/api/BillCycleDay.java b/api/src/main/java/com/ning/billing/account/api/BillCycleDay.java
new file mode 100644
index 0000000..1fc203d
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/account/api/BillCycleDay.java
@@ -0,0 +1,24 @@
+/*
+ * 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.account.api;
+
+public interface BillCycleDay {
+
+ int getDayOfMonthUTC();
+
+ int getDayOfMonthLocal();
+}
diff --git a/api/src/main/java/com/ning/billing/account/api/DefaultMutableAccountData.java b/api/src/main/java/com/ning/billing/account/api/DefaultMutableAccountData.java
index 566822a..694297b 100644
--- a/api/src/main/java/com/ning/billing/account/api/DefaultMutableAccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/DefaultMutableAccountData.java
@@ -24,12 +24,13 @@ import com.ning.billing.catalog.api.Currency;
import com.ning.billing.util.tag.TagStore;
public class DefaultMutableAccountData implements MutableAccountData {
+
private String externalKey;
private String email;
private String name;
private int firstNameLength;
private Currency currency;
- private int billCycleDay;
+ private BillCycleDay billCycleDay;
private UUID paymentMethodId;
private DateTimeZone timeZone;
private String locale;
@@ -45,7 +46,7 @@ public class DefaultMutableAccountData implements MutableAccountData {
private boolean isNotifiedForInvoices;
public DefaultMutableAccountData(final String externalKey, final String email, final String name,
- final int firstNameLength, final Currency currency, final int billCycleDay,
+ final int firstNameLength, final Currency currency, final BillCycleDay billCycleDay,
final UUID paymentMethodId, final TagStore tags, final DateTimeZone timeZone,
final String locale, final String address1, final String address2,
final String companyName, final String city, final String stateOrProvince,
@@ -96,289 +97,181 @@ public class DefaultMutableAccountData implements MutableAccountData {
this.isNotifiedForInvoices = accountData.isNotifiedForInvoices();
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getExternalKey()
- */
@Override
public String getExternalKey() {
return externalKey;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getEmail()
- */
@Override
public String getEmail() {
return email;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getName()
- */
@Override
public String getName() {
return name;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getFirstNameLength()
- */
@Override
public Integer getFirstNameLength() {
return firstNameLength;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getCurrency()
- */
@Override
public Currency getCurrency() {
return currency;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getBillCycleDay()
- */
@Override
- public Integer getBillCycleDay() {
+ public BillCycleDay getBillCycleDay() {
return billCycleDay;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getPaymentProviderName()
- */
@Override
public UUID getPaymentMethodId() {
return paymentMethodId;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getTimeZone()
- */
@Override
public DateTimeZone getTimeZone() {
return timeZone;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getLocale()
- */
@Override
public String getLocale() {
return locale;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getAddress1()
- */
@Override
public String getAddress1() {
return address1;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getAddress2()
- */
@Override
public String getAddress2() {
return address2;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getCompanyName()
- */
@Override
public String getCompanyName() {
return companyName;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getCity()
- */
@Override
public String getCity() {
return city;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getStateOrProvince()
- */
@Override
public String getStateOrProvince() {
return stateOrProvince;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getCountry()
- */
@Override
public String getCountry() {
return country;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getPostalCode()
- */
@Override
public String getPostalCode() {
return postalCode;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getPhone()
- */
@Override
public String getPhone() {
return phone;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#isMigrated()
- */
@Override
public Boolean isMigrated() {
return isMigrated;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#getSendInvoiceEmails()
- */
@Override
public Boolean isNotifiedForInvoices() {
return isNotifiedForInvoices;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setExternalKey(java.lang.String)
- */
@Override
public void setExternalKey(final String externalKey) {
this.externalKey = externalKey;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setEmail(java.lang.String)
- */
@Override
public void setEmail(final String email) {
this.email = email;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setName(java.lang.String)
- */
@Override
public void setName(final String name) {
this.name = name;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setFirstNameLength(int)
- */
@Override
public void setFirstNameLength(final int firstNameLength) {
this.firstNameLength = firstNameLength;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setCurrency(com.ning.billing.catalog.api.Currency)
- */
@Override
public void setCurrency(final Currency currency) {
this.currency = currency;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setBillCycleDay(int)
- */
@Override
- public void setBillCycleDay(final int billCycleDay) {
+ public void setBillCycleDay(final BillCycleDay billCycleDay) {
this.billCycleDay = billCycleDay;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setPaymentProviderName(java.lang.String)
- */
@Override
public void setPaymentMethodId(final UUID paymentMethodId) {
this.paymentMethodId = paymentMethodId;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setTimeZone(org.joda.time.DateTimeZone)
- */
@Override
public void setTimeZone(final DateTimeZone timeZone) {
this.timeZone = timeZone;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setLocale(java.lang.String)
- */
@Override
public void setLocale(final String locale) {
this.locale = locale;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setAddress1(java.lang.String)
- */
@Override
public void setAddress1(final String address1) {
this.address1 = address1;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setAddress2(java.lang.String)
- */
@Override
public void setAddress2(final String address2) {
this.address2 = address2;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setCompanyName(java.lang.String)
- */
@Override
public void setCompanyName(final String companyName) {
this.companyName = companyName;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setCity(java.lang.String)
- */
@Override
public void setCity(final String city) {
this.city = city;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setStateOrProvince(java.lang.String)
- */
@Override
public void setStateOrProvince(final String stateOrProvince) {
this.stateOrProvince = stateOrProvince;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setCountry(java.lang.String)
- */
@Override
public void setCountry(final String country) {
this.country = country;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setPostalCode(java.lang.String)
- */
@Override
public void setPostalCode(final String postalCode) {
this.postalCode = postalCode;
}
- /* (non-Javadoc)
- * @see com.ning.billing.account.api.MutableAccountData#setPhone(java.lang.String)
- */
@Override
public void setPhone(final String phone) {
this.phone = phone;
@@ -393,6 +286,4 @@ public class DefaultMutableAccountData implements MutableAccountData {
public void setIsNotifiedForInvoices(final boolean isNotifiedForInvoices) {
this.isNotifiedForInvoices = isNotifiedForInvoices;
}
-
-
}
diff --git a/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java b/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
index fea8c8b..b1716ec 100644
--- a/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
@@ -33,7 +33,7 @@ public interface MutableAccountData extends AccountData {
public void setCurrency(Currency currency);
- public void setBillCycleDay(int billCycleDay);
+ public void setBillCycleDay(BillCycleDay billCycleDay);
public void setPaymentMethodId(UUID paymentMethodId);
@@ -61,4 +61,4 @@ public interface MutableAccountData extends AccountData {
public void setIsNotifiedForInvoices(boolean isNotifiedForInvoices);
-}
\ No newline at end of file
+}
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 9b872f6..48607a0 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
@@ -42,6 +42,7 @@ import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.account.api.AccountService;
import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.analytics.AnalyticsListener;
import com.ning.billing.analytics.api.user.DefaultAnalyticsUserApi;
import com.ning.billing.api.TestApiListener;
@@ -63,6 +64,8 @@ import com.ning.billing.invoice.api.InvoiceUserApi;
import com.ning.billing.invoice.generator.InvoiceDateUtils;
import com.ning.billing.invoice.model.InvoicingConfiguration;
import com.ning.billing.junction.plumbing.api.BlockingSubscription;
+import com.ning.billing.mock.MockAccountBuilder;
+import com.ning.billing.mock.api.MockBillCycleDay;
import com.ning.billing.overdue.wrapper.OverdueWrapperFactory;
import com.ning.billing.payment.api.PaymentApi;
import com.ning.billing.payment.api.PaymentMethodPlugin;
@@ -282,102 +285,17 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
}
protected AccountData getAccountData(final int billingDay) {
- final String someRandomKey = UUID.randomUUID().toString();
- return new AccountData() {
- @Override
- public String getName() {
- return "firstName lastName";
- }
-
- @Override
- public Integer getFirstNameLength() {
- return "firstName".length();
- }
-
- @Override
- public String getEmail() {
- return someRandomKey + "@laposte.fr";
- }
-
- @Override
- public String getPhone() {
- return "4152876341";
- }
-
- @Override
- public Boolean isMigrated() {
- return false;
- }
-
- @Override
- public Boolean isNotifiedForInvoices() {
- return false;
- }
-
- @Override
- public String getExternalKey() {
- return someRandomKey;
- }
-
- @Override
- public Integer getBillCycleDay() {
- return billingDay;
- }
-
- @Override
- public Currency getCurrency() {
- return Currency.USD;
- }
-
- @Override
- public UUID getPaymentMethodId() {
- return null;
- }
-
- @Override
- public DateTimeZone getTimeZone() {
- return DateTimeZone.UTC;
- }
-
- @Override
- public String getLocale() {
- return null;
- }
-
- @Override
- public String getAddress1() {
- return null;
- }
-
- @Override
- public String getAddress2() {
- return null;
- }
-
- @Override
- public String getCompanyName() {
- return null;
- }
-
- @Override
- public String getCity() {
- return null;
- }
-
- @Override
- public String getStateOrProvince() {
- return null;
- }
-
- @Override
- public String getPostalCode() {
- return null;
- }
-
- @Override
- public String getCountry() {
- return null;
- }
- };
+ return new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8))
+ .firstNameLength(6)
+ .email(UUID.randomUUID().toString().substring(1, 8))
+ .phone(UUID.randomUUID().toString().substring(1, 8))
+ .migrated(false)
+ .isNotifiedForInvoices(false)
+ .externalKey(UUID.randomUUID().toString().substring(1, 8))
+ .billingCycleDay(new MockBillCycleDay(billingDay))
+ .currency(Currency.USD)
+ .paymentMethodId(UUID.randomUUID())
+ .timeZone(DateTimeZone.UTC)
+ .build();
}
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
index 55115be..69ece03 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
@@ -25,6 +25,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Period;
+import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
@@ -36,6 +37,7 @@ import org.testng.annotations.BeforeMethod;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.ning.billing.account.api.AccountData;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.api.TestApiListener;
import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.api.TestListenerStatus;
@@ -67,6 +69,7 @@ import com.ning.billing.entitlement.events.EntitlementEvent;
import com.ning.billing.entitlement.events.phase.PhaseEvent;
import com.ning.billing.entitlement.events.user.ApiEvent;
import com.ning.billing.entitlement.events.user.ApiEventType;
+import com.ning.billing.mock.MockAccountBuilder;
import com.ning.billing.util.bus.BusService;
import com.ning.billing.util.bus.DefaultBusService;
import com.ning.billing.util.callcontext.CallContext;
@@ -169,7 +172,21 @@ public abstract class TestApiBase extends EntitlementTestSuiteWithEmbeddedDB imp
private void init() throws Exception {
((DefaultCatalogService) catalogService).loadCatalog();
- accountData = getAccountData();
+ final BillCycleDay billCycleDay = Mockito.mock(BillCycleDay.class);
+ Mockito.when(billCycleDay.getDayOfMonthUTC()).thenReturn(1);
+ accountData = new MockAccountBuilder().name(UUID.randomUUID().toString())
+ .firstNameLength(6)
+ .email(UUID.randomUUID().toString())
+ .phone(UUID.randomUUID().toString())
+ .migrated(false)
+ .isNotifiedForInvoices(false)
+ .externalKey(UUID.randomUUID().toString())
+ .billingCycleDay(billCycleDay)
+ .currency(Currency.USD)
+ .paymentMethodId(UUID.randomUUID())
+ .timeZone(DateTimeZone.forID("Europe/Paris"))
+ .build();
+
assertNotNull(accountData);
catalog = catalogService.getFullCatalog();
assertNotNull(catalog);
@@ -362,106 +379,6 @@ public abstract class TestApiBase extends EntitlementTestSuiteWithEmbeddedDB imp
return result;
}
- protected AccountData getAccountData() {
- final AccountData accountData = new AccountData() {
- @Override
- public String getName() {
- return "firstName lastName";
- }
-
- @Override
- public Integer getFirstNameLength() {
- return "firstName".length();
- }
-
- @Override
- public String getEmail() {
- return "accountName@yahoo.com";
- }
-
- @Override
- public String getPhone() {
- return "4152876341";
- }
-
- @Override
- public Boolean isMigrated() {
- return false;
- }
-
- @Override
- public Boolean isNotifiedForInvoices() {
- return false;
- }
-
- @Override
- public String getExternalKey() {
- return "k123456";
- }
-
- @Override
- public Integer getBillCycleDay() {
- return 1;
- }
-
- @Override
- public Currency getCurrency() {
- return Currency.USD;
- }
-
- @Override
- public UUID getPaymentMethodId() {
- return UUID.randomUUID();
- }
-
- @Override
- public DateTimeZone getTimeZone() {
- return DateTimeZone.forID("Europe/Paris");
- }
-
- @Override
- public String getLocale() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String getAddress1() {
- return null;
- }
-
- @Override
- public String getAddress2() {
- return null;
- }
-
- @Override
- public String getCompanyName() {
- return null;
- }
-
- @Override
- public String getCity() {
- return null;
- }
-
- @Override
- public String getStateOrProvince() {
- return null;
- }
-
- @Override
- public String getPostalCode() {
- return null;
- }
-
- @Override
- public String getCountry() {
- return null;
- }
- };
- return accountData;
- }
-
protected PlanPhaseSpecifier getProductSpecifier(final String productName, final String priceList,
final BillingPeriod term,
@Nullable final PhaseType phaseType) {
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 7294117..f007eac 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
@@ -70,7 +70,7 @@ public class DefaultInvoiceMigrationApi implements InvoiceMigrationApi {
final InvoiceItem migrationInvoiceItem = new MigrationInvoiceItem(migrationInvoice.getId(), accountId, targetDate, balance, currency);
migrationInvoice.addInvoiceItem(migrationInvoiceItem);
- dao.create(migrationInvoice, account.getBillCycleDay(), context);
+ dao.create(migrationInvoice, account.getBillCycleDay().getDayOfMonthUTC(), context);
return migrationInvoice.getId();
}
}
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 6ffb3d1..7b6489d 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
@@ -32,6 +32,7 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
@@ -151,7 +152,7 @@ public class DefaultInvoiceDao implements InvoiceDao {
}
@Override
- public void create(final Invoice invoice, final int billCycleDay, final CallContext context) {
+ public void create(final Invoice invoice, final int billCycleDayUTC, final CallContext context) {
invoiceSqlDao.inTransaction(new Transaction<Void, InvoiceSqlDao>() {
@Override
public Void inTransaction(final InvoiceSqlDao transactional, final TransactionStatus status) throws Exception {
@@ -172,7 +173,7 @@ public class DefaultInvoiceDao implements InvoiceDao {
audits.addAll(createAudits(TableName.INVOICE_ITEMS, recordIdList));
final List<InvoiceItem> recurringInvoiceItems = invoice.getInvoiceItems(RecurringInvoiceItem.class);
- notifyOfFutureBillingEvents(transactional, invoice.getAccountId(), billCycleDay, recurringInvoiceItems);
+ notifyOfFutureBillingEvents(transactional, invoice.getAccountId(), billCycleDayUTC, recurringInvoiceItems);
final List<InvoicePayment> invoicePayments = invoice.getPayments();
final InvoicePaymentSqlDao invoicePaymentSqlDao = transactional.become(InvoicePaymentSqlDao.class);
@@ -530,7 +531,7 @@ public class DefaultInvoiceDao implements InvoiceDao {
invoice.addPayments(invoicePayments);
}
- private void notifyOfFutureBillingEvents(final InvoiceSqlDao dao, final UUID accountId, final int billCycleDay, final List<InvoiceItem> invoiceItems) {
+ private void notifyOfFutureBillingEvents(final InvoiceSqlDao dao, final UUID accountId, final int billCycleDayUTC, final List<InvoiceItem> invoiceItems) {
UUID subscriptionForNextNotification = null;
boolean shouldBeNotified = false;
for (final InvoiceItem item : invoiceItems) {
@@ -551,7 +552,7 @@ public class DefaultInvoiceDao implements InvoiceDao {
if (shouldBeNotified) {
// We could be notified at any time during the day at the billCycleDay - use the current time to
// spread the load.
- final DateTime nextNotificationDateTime = InvoiceDateUtils.calculateBillingCycleDateAfter(clock.getUTCNow(), billCycleDay);
+ final DateTime nextNotificationDateTime = InvoiceDateUtils.calculateBillingCycleDateAfter(clock.getUTCNow(), billCycleDayUTC);
// NextBillingDatePoster will ignore duplicates
nextBillingDatePoster.insertNextBillingNotification(dao, accountId, subscriptionForNextNotification, nextNotificationDateTime);
}
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 f872cf2..9e0d827 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
@@ -22,6 +22,7 @@ import java.util.UUID;
import org.joda.time.LocalDate;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
@@ -32,7 +33,7 @@ import com.ning.billing.util.callcontext.CallContext;
public interface InvoiceDao {
- void create(final Invoice invoice, final int billCycleDay, final CallContext context);
+ void create(final Invoice invoice, final int billCycleDayUTC, final CallContext context);
Invoice getById(final UUID id);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/generator/InvoiceDateUtils.java b/invoice/src/main/java/com/ning/billing/invoice/generator/InvoiceDateUtils.java
index 3fab3b2..a2f255f 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/generator/InvoiceDateUtils.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/generator/InvoiceDateUtils.java
@@ -136,42 +136,29 @@ public class InvoiceDateUtils {
}
public static LocalDate calculateBillingCycleDateOnOrAfter(final LocalDate date, final DateTimeZone accountTimeZone,
- final int billingCycleDay) {
- // We go back to DateTime here. Since the BCD was computed in UTC, use UTC here as well
- final DateTime tmp = new DateTime(date.toDateTimeAtStartOfDay(), DateTimeZone.UTC);
- final DateTime proposedDateTime = calculateBillingCycleDateOnOrAfter(tmp, billingCycleDay);
-
- final LocalDate proposedLocalDate = new LocalDate(proposedDateTime, accountTimeZone);
- if (proposedLocalDate.isBefore(date)) {
- return proposedLocalDate.plusMonths(1);
- } else {
- return proposedLocalDate;
- }
+ final int billingCycleDayLocal) {
+ final DateTime tmp = new DateTime(date.toDateTimeAtStartOfDay(), accountTimeZone);
+ final DateTime proposedDateTime = calculateBillingCycleDateOnOrAfter(tmp, billingCycleDayLocal);
+
+ return new LocalDate(proposedDateTime, accountTimeZone);
}
public static LocalDate calculateBillingCycleDateAfter(final LocalDate date, final DateTimeZone accountTimeZone,
- final int billingCycleDay) {
- // We go back to DateTime here. Since the BCD was computed in UTC, use UTC here as well
- final DateTime tmp = new DateTime(date.toDateTimeAtStartOfDay(), DateTimeZone.UTC);
- final DateTime proposedDateTime = calculateBillingCycleDateAfter(tmp, billingCycleDay);
-
- final LocalDate proposedLocalDate = new LocalDate(proposedDateTime, accountTimeZone);
- if (proposedLocalDate.isBefore(date)) {
- return proposedLocalDate.plusMonths(1);
- } else {
- return proposedLocalDate;
- }
+ final int billingCycleDayLocal) {
+ final DateTime tmp = new DateTime(date.toDateTimeAtStartOfDay(), accountTimeZone);
+ final DateTime proposedDateTime = calculateBillingCycleDateAfter(tmp, billingCycleDayLocal);
+
+ return new LocalDate(proposedDateTime, accountTimeZone);
}
- // Note: date has to be in UTC
- public static DateTime calculateBillingCycleDateOnOrAfter(final DateTime date, final int billingCycleDay) {
+ public static DateTime calculateBillingCycleDateOnOrAfter(final DateTime date, final int billingCycleDayLocal) {
final int lastDayOfMonth = date.dayOfMonth().getMaximumValue();
final MutableDateTime tmp = date.toMutableDateTime();
- if (billingCycleDay > lastDayOfMonth) {
+ if (billingCycleDayLocal > lastDayOfMonth) {
tmp.setDayOfMonth(lastDayOfMonth);
} else {
- tmp.setDayOfMonth(billingCycleDay);
+ tmp.setDayOfMonth(billingCycleDayLocal);
}
DateTime proposedDate = tmp.toDateTime();
@@ -181,9 +168,8 @@ public class InvoiceDateUtils {
return proposedDate;
}
- // Note: date has to be in UTC
- public static DateTime calculateBillingCycleDateAfter(final DateTime date, final int billingCycleDay) {
- DateTime proposedDate = calculateBillingCycleDateOnOrAfter(date, billingCycleDay);
+ public static DateTime calculateBillingCycleDateAfter(final DateTime date, final int billingCycleDayLocal) {
+ DateTime proposedDate = calculateBillingCycleDateOnOrAfter(date, billingCycleDayLocal);
if (date.compareTo(proposedDate) == 0) {
proposedDate = proposedDate.plusMonths(1);
}
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 89a6850..694330d 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
@@ -33,6 +33,7 @@ import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.entitlement.api.billing.BillingEvent;
import com.ning.billing.entitlement.api.billing.EntitlementBillingApiException;
@@ -177,7 +178,7 @@ public class InvoiceDispatcher {
}
outputDebugData(billingEvents, invoices);
if (!dryRun) {
- invoiceDao.create(invoice, account.getBillCycleDay(), context);
+ invoiceDao.create(invoice, account.getBillCycleDay().getDayOfMonthUTC(), context);
final List<InvoiceItem> fixedPriceInvoiceItems = invoice.getInvoiceItems(FixedPriceInvoiceItem.class);
final List<InvoiceItem> recurringInvoiceItems = invoice.getInvoiceItems(RecurringInvoiceItem.class);
@@ -202,7 +203,7 @@ public class InvoiceDispatcher {
}
}
- private void setChargedThroughDates(final int billCycleDay,
+ private void setChargedThroughDates(final BillCycleDay billCycleDay,
final Collection<InvoiceItem> fixedPriceItems,
final Collection<InvoiceItem> recurringItems,
final CallContext context) {
@@ -228,7 +229,7 @@ public class InvoiceDispatcher {
}
}
- private void addInvoiceItemsToChargeThroughDates(final int billCycleDay,
+ private void addInvoiceItemsToChargeThroughDates(final BillCycleDay billCycleDay,
final Map<UUID, DateTime> chargeThroughDates,
final Collection<InvoiceItem> items) {
for (final InvoiceItem item : items) {
@@ -243,9 +244,8 @@ public class InvoiceDispatcher {
if (chargeThroughDates.containsKey(subscriptionId)) {
if (chargeThroughDates.get(subscriptionId).isBefore(endDate)) {
- // The CTD should always align with the BCD - note that the BCD is computed from UTC, hence we
- // can't use endDate as a CTD here
- chargeThroughDates.put(subscriptionId, InvoiceDateUtils.calculateBillingCycleDateOnOrAfter(endDate, billCycleDay));
+ // The CTD should always align with the BCD
+ chargeThroughDates.put(subscriptionId, InvoiceDateUtils.calculateBillingCycleDateOnOrAfter(endDate, billCycleDay.getDayOfMonthLocal()));
}
} else {
chargeThroughDates.put(subscriptionId, endDate);
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 3b455e0..c8c3e71 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
@@ -58,6 +58,7 @@ import com.ning.billing.invoice.notification.NullInvoiceNotifier;
import com.ning.billing.invoice.tests.InvoicingTestBase;
import com.ning.billing.junction.api.BillingApi;
import com.ning.billing.junction.api.BillingEventSet;
+import com.ning.billing.mock.api.MockBillCycleDay;
import com.ning.billing.util.bus.BusService;
import com.ning.billing.util.bus.DefaultBusService;
import com.ning.billing.util.callcontext.CallContext;
@@ -130,7 +131,7 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getId()).thenReturn(accountId);
Mockito.when(account.isNotifiedForInvoices()).thenReturn(true);
- Mockito.when(account.getBillCycleDay()).thenReturn(31);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(31));
migrationInvoiceId = createAndCheckMigrationInvoice();
regularInvoiceId = generateRegularInvoice();
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 aa95c33..09c196b 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
@@ -27,6 +27,8 @@ import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import com.google.inject.Inject;
+
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
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 97e1335..1721788 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
@@ -30,7 +30,6 @@ import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
-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.AccountUserApi;
@@ -54,6 +53,7 @@ import com.ning.billing.invoice.notification.NullInvoiceNotifier;
import com.ning.billing.invoice.tests.InvoicingTestBase;
import com.ning.billing.junction.api.BillingApi;
import com.ning.billing.junction.api.BillingEventSet;
+import com.ning.billing.mock.api.MockBillCycleDay;
import com.ning.billing.util.bus.BusService;
import com.ning.billing.util.bus.DefaultBusService;
import com.ning.billing.util.callcontext.CallContext;
@@ -63,8 +63,11 @@ import com.ning.billing.util.callcontext.UserType;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.globallocker.GlobalLocker;
+import com.google.inject.Inject;
+
@Guice(modules = {MockModule.class})
public class TestInvoiceDispatcher extends InvoicingTestBase {
+
private final Logger log = LoggerFactory.getLogger(TestInvoiceDispatcher.class);
@Inject
@@ -93,7 +96,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
private CallContext context;
- @BeforeSuite(groups = {"slow"})
+ @BeforeSuite(groups = "slow")
public void setup() throws Exception {
notifier.initialize();
notifier.start();
@@ -103,7 +106,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
busService.getBus().start();
}
- @AfterClass(groups = {"slow"})
+ @AfterClass(groups = "slow")
public void tearDown() {
try {
((DefaultBusService) busService).stopBus();
@@ -113,7 +116,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
}
}
- @Test(groups = {"slow"}, enabled = true)
+ @Test(groups = "slow")
public void testDryRunInvoice() throws InvoiceApiException, AccountApiException {
final UUID accountId = UUID.randomUUID();
final UUID subscriptionId = UUID.randomUUID();
@@ -125,7 +128,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getId()).thenReturn(accountId);
Mockito.when(account.isNotifiedForInvoices()).thenReturn(true);
- Mockito.when(account.getBillCycleDay()).thenReturn(30);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(30));
final Subscription subscription = Mockito.mock(Subscription.class);
Mockito.when(subscription.getId()).thenReturn(subscriptionId);
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
index 4af8944..736fba2 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
@@ -20,12 +20,14 @@ import java.util.UUID;
import org.joda.time.DateTimeZone;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountData;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.catalog.api.Currency;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
public class AccountJson extends AccountJsonSimple {
// STEPH Missing city, locale, postalCode from https://home.ninginc.com:8443/display/REVINFRA/Killbill+1.0+APIs
@@ -35,7 +37,7 @@ public class AccountJson extends AccountJsonSimple {
private final String email;
- private final Integer billCycleDay;
+ private final BillCycleDayJson billCycleDayJson;
private final String currency;
@@ -55,13 +57,12 @@ public class AccountJson extends AccountJsonSimple {
private final String phone;
-
public AccountJson(final Account account) {
super(account.getId().toString(), account.getExternalKey());
this.name = account.getName();
this.length = account.getFirstNameLength();
this.email = account.getEmail();
- this.billCycleDay = account.getBillCycleDay();
+ this.billCycleDayJson = new BillCycleDayJson(account.getBillCycleDay());
this.currency = account.getCurrency() != null ? account.getCurrency().toString() : null;
this.paymentMethodId = account.getPaymentMethodId() != null ? account.getPaymentMethodId().toString() : null;
this.timeZone = account.getTimeZone().toString();
@@ -157,8 +158,22 @@ public class AccountJson extends AccountJsonSimple {
}
@Override
- public Integer getBillCycleDay() {
- return billCycleDay;
+ public BillCycleDay getBillCycleDay() {
+ if (billCycleDayJson == null) {
+ return null;
+ }
+
+ return new BillCycleDay() {
+ @Override
+ public int getDayOfMonthUTC() {
+ return billCycleDayJson.getDayOfMonthUTC();
+ }
+
+ @Override
+ public int getDayOfMonthLocal() {
+ return billCycleDayJson.getDayOfMonthLocal();
+ }
+ };
}
@Override
@@ -180,7 +195,7 @@ public class AccountJson extends AccountJsonSimple {
this.name = null;
this.length = null;
this.email = null;
- this.billCycleDay = null;
+ this.billCycleDayJson = null;
this.currency = null;
this.paymentMethodId = null;
this.timeZone = null;
@@ -198,7 +213,7 @@ public class AccountJson extends AccountJsonSimple {
@JsonProperty("firstNameLength") final Integer length,
@JsonProperty("externalKey") final String externalKey,
@JsonProperty("email") final String email,
- @JsonProperty("billingDay") final Integer billCycleDay,
+ @JsonProperty("billCycleDay") final BillCycleDayJson billCycleDay,
@JsonProperty("currency") final String currency,
@JsonProperty("paymentMethodId") final String paymentMethodId,
@JsonProperty("timezone") final String timeZone,
@@ -212,7 +227,7 @@ public class AccountJson extends AccountJsonSimple {
this.name = name;
this.length = length;
this.email = email;
- this.billCycleDay = billCycleDay;
+ this.billCycleDayJson = billCycleDay;
this.currency = currency;
this.paymentMethodId = paymentMethodId;
this.timeZone = timeZone;
@@ -236,8 +251,8 @@ public class AccountJson extends AccountJsonSimple {
return email;
}
- public Integer getBillCycleDay() {
- return billCycleDay;
+ public BillCycleDayJson getBillCycleDay() {
+ return billCycleDayJson;
}
public String getCurrency() {
@@ -281,28 +296,28 @@ public class AccountJson extends AccountJsonSimple {
final int prime = 31;
int result = 1;
result = prime * result
- + ((accountId == null) ? 0 : accountId.hashCode());
+ + ((accountId == null) ? 0 : accountId.hashCode());
result = prime * result
- + ((address1 == null) ? 0 : address1.hashCode());
+ + ((address1 == null) ? 0 : address1.hashCode());
result = prime * result
- + ((address2 == null) ? 0 : address2.hashCode());
+ + ((address2 == null) ? 0 : address2.hashCode());
result = prime * result
- + ((billCycleDay == null) ? 0 : billCycleDay.hashCode());
+ + ((billCycleDayJson == null) ? 0 : billCycleDayJson.hashCode());
result = prime * result + ((company == null) ? 0 : company.hashCode());
result = prime * result + ((country == null) ? 0 : country.hashCode());
result = prime * result
- + ((currency == null) ? 0 : currency.hashCode());
+ + ((currency == null) ? 0 : currency.hashCode());
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result
- + ((externalKey == null) ? 0 : externalKey.hashCode());
+ + ((externalKey == null) ? 0 : externalKey.hashCode());
result = prime * result + ((length == null) ? 0 : length.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result
- + ((paymentMethodId == null) ? 0 : paymentMethodId.hashCode());
+ + ((paymentMethodId == null) ? 0 : paymentMethodId.hashCode());
result = prime * result + ((phone == null) ? 0 : phone.hashCode());
result = prime * result + ((state == null) ? 0 : state.hashCode());
result = prime * result
- + ((timeZone == null) ? 0 : timeZone.hashCode());
+ + ((timeZone == null) ? 0 : timeZone.hashCode());
return result;
}
@@ -332,11 +347,11 @@ public class AccountJson extends AccountJsonSimple {
} else if (!address2.equals(other.address2)) {
return false;
}
- if (billCycleDay == null) {
- if (other.billCycleDay != null) {
+ if (billCycleDayJson == null) {
+ if (other.billCycleDayJson != null) {
return false;
}
- } else if (!billCycleDay.equals(other.billCycleDay)) {
+ } else if (!billCycleDayJson.equals(other.billCycleDayJson)) {
return false;
}
if (company == null) {
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java
index f06c4ea..d787fc8 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java
@@ -22,13 +22,16 @@ import org.joda.time.DateTimeZone;
import org.testng.Assert;
import org.testng.annotations.Test;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.jaxrs.JaxrsTestSuite;
import com.ning.billing.mock.MockAccountBuilder;
+import com.ning.billing.mock.api.MockBillCycleDay;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
public class TestAccountJson extends JaxrsTestSuite {
+
private static final ObjectMapper mapper = new ObjectMapper();
@Test(groups = "fast")
@@ -38,7 +41,7 @@ public class TestAccountJson extends JaxrsTestSuite {
final Integer length = 12;
final String externalKey = UUID.randomUUID().toString();
final String email = UUID.randomUUID().toString();
- final Integer billCycleDay = 6;
+ final BillCycleDayJson billCycleDay = new BillCycleDayJson(6, 6);
final String currency = UUID.randomUUID().toString();
final String paymentMethodId = UUID.randomUUID().toString();
final String timeZone = UUID.randomUUID().toString();
@@ -71,13 +74,13 @@ public class TestAccountJson extends JaxrsTestSuite {
final String asJson = mapper.writeValueAsString(accountJson);
Assert.assertEquals(asJson, "{\"accountId\":\"" + accountJson.getAccountId() + "\",\"name\":\"" + accountJson.getName() + "\"," +
- "\"externalKey\":\"" + accountJson.getExternalKey() + "\",\"email\":\"" + accountJson.getEmail() + "\"," +
- "\"currency\":\"" + accountJson.getCurrency() + "\",\"paymentMethodId\":\"" + accountJson.getPaymentMethodId() + "\"," +
- "\"address1\":\"" + accountJson.getAddress1() + "\",\"address2\":\"" + accountJson.getAddress2() + "\"," +
- "\"company\":\"" + accountJson.getCompany() + "\",\"state\":\"" + accountJson.getState() + "\"," +
- "\"country\":\"" + accountJson.getCountry() + "\",\"phone\":\"" + accountJson.getPhone() + "\"," +
- "\"length\":" + accountJson.getLength() + ",\"billCycleDay\":" + accountJson.getBillCycleDay() + "," +
- "\"timeZone\":\"" + accountJson.getTimeZone() + "\"}");
+ "\"externalKey\":\"" + accountJson.getExternalKey() + "\",\"email\":\"" + accountJson.getEmail() + "\"," +
+ "\"billCycleDay\":" + accountJson.getBillCycleDay() + "," +
+ "\"currency\":\"" + accountJson.getCurrency() + "\",\"paymentMethodId\":\"" + accountJson.getPaymentMethodId() + "\"," +
+ "\"address1\":\"" + accountJson.getAddress1() + "\",\"address2\":\"" + accountJson.getAddress2() + "\"," +
+ "\"company\":\"" + accountJson.getCompany() + "\",\"state\":\"" + accountJson.getState() + "\"," +
+ "\"country\":\"" + accountJson.getCountry() + "\",\"phone\":\"" + accountJson.getPhone() + "\"," +
+ "\"length\":" + accountJson.getLength() + ",\"timeZone\":\"" + accountJson.getTimeZone() + "\"}");
final AccountJson fromJson = mapper.readValue(asJson, AccountJson.class);
Assert.assertEquals(fromJson, accountJson);
@@ -88,7 +91,8 @@ public class TestAccountJson extends JaxrsTestSuite {
final MockAccountBuilder accountBuilder = new MockAccountBuilder();
accountBuilder.address1(UUID.randomUUID().toString());
accountBuilder.address2(UUID.randomUUID().toString());
- accountBuilder.billingCycleDay(4);
+ final int bcd = 4;
+ accountBuilder.billingCycleDay(new MockBillCycleDay(bcd));
accountBuilder.city(UUID.randomUUID().toString());
accountBuilder.companyName(UUID.randomUUID().toString());
accountBuilder.country(UUID.randomUUID().toString());
@@ -110,7 +114,7 @@ public class TestAccountJson extends JaxrsTestSuite {
final AccountJson accountJson = new AccountJson(account);
Assert.assertEquals(accountJson.getAddress1(), account.getAddress1());
Assert.assertEquals(accountJson.getAddress2(), account.getAddress2());
- Assert.assertEquals((int) accountJson.getBillCycleDay(), (int) account.getBillCycleDay());
+ Assert.assertEquals(accountJson.getBillCycleDay().toString(), "{\"dayOfMonthLocal\":" + bcd + ",\"dayOfMonthUTC\":" + bcd + "}");
Assert.assertEquals(accountJson.getCountry(), account.getCountry());
Assert.assertEquals(accountJson.getCompany(), account.getCompanyName());
Assert.assertEquals(accountJson.getCurrency(), account.getCurrency().toString());
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccount.java b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccount.java
index 40c713d..3f3bf50 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccount.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccount.java
@@ -21,6 +21,7 @@ import java.util.UUID;
import org.joda.time.DateTimeZone;
import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.account.api.MutableAccountData;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.junction.api.BlockingApi;
@@ -62,7 +63,7 @@ public class BlockingAccount implements Account {
}
@Override
- public Integer getBillCycleDay() {
+ public BillCycleDay getBillCycleDay() {
return account.getBillCycleDay();
}
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
index 2538869..baf703f 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
@@ -17,13 +17,14 @@
package com.ning.billing.junction.plumbing.billing;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.catalog.api.BillingAlignment;
import com.ning.billing.catalog.api.Catalog;
import com.ning.billing.catalog.api.CatalogApiException;
@@ -39,7 +40,10 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.google.inject.Inject;
+
public class BillCycleDayCalculator {
+
private static final Logger log = LoggerFactory.getLogger(BillCycleDayCalculator.class);
private final CatalogService catalogService;
@@ -52,7 +56,7 @@ public class BillCycleDayCalculator {
this.entitlementApi = entitlementApi;
}
- protected int calculateBcd(final SubscriptionBundle bundle, final Subscription subscription, final EffectiveSubscriptionEvent transition, final Account account)
+ protected BillCycleDay calculateBcd(final SubscriptionBundle bundle, final Subscription subscription, final EffectiveSubscriptionEvent transition, final Account account)
throws CatalogApiException, AccountApiException, EntitlementUserApiException {
final Catalog catalog = catalogService.getFullCatalog();
@@ -76,11 +80,11 @@ public class BillCycleDayCalculator {
phase.getPhaseType()),
transition.getRequestedTransitionTime());
- int result = -1;
+ BillCycleDay result = null;
switch (alignment) {
case ACCOUNT:
result = account.getBillCycleDay();
- if (result == 0) {
+ if (result.getDayOfMonthUTC() == 0) {
result = calculateBcdFromSubscription(subscription, plan, account);
}
break;
@@ -99,22 +103,40 @@ public class BillCycleDayCalculator {
break;
}
- if (result == -1) {
+ if (result == null) {
throw new CatalogApiException(ErrorCode.CAT_INVALID_BILLING_ALIGNMENT, alignment.toString());
}
return result;
}
- private int calculateBcdFromSubscription(final Subscription subscription, final Plan plan, final Account account) throws AccountApiException {
+ private BillCycleDay calculateBcdFromSubscription(final Subscription subscription, final Plan plan, final Account account) throws AccountApiException {
final DateTime date = plan.dateOfFirstRecurringNonZeroCharge(subscription.getStartDate());
- // There are really two kind of billCycleDay:
+ // There are really two kinds of billCycleDay:
// - a System billingCycleDay which should be computed from UTC time (in order to get the correct notification time at
// the end of each service period)
// - a User billingCycleDay which should align with the account timezone
- //
- // TODO At this point we only compute the system one; should we need two fields in the account table
- //return date.toDateTime(account.getTimeZone()).getDayOfMonth();
- return date.getDayOfMonth();
+ return new CalculatedBillCycleDay(account.getTimeZone(), date);
+ }
+
+ private static final class CalculatedBillCycleDay implements BillCycleDay {
+
+ private final DateTime bcdTimeUTC;
+ private final DateTimeZone accountTimeZone;
+
+ private CalculatedBillCycleDay(final DateTimeZone accountTimeZone, final DateTime bcdTimeUTC) {
+ this.accountTimeZone = accountTimeZone;
+ this.bcdTimeUTC = bcdTimeUTC;
+ }
+
+ @Override
+ public int getDayOfMonthUTC() {
+ return bcdTimeUTC.getDayOfMonth();
+ }
+
+ @Override
+ public int getDayOfMonthLocal() {
+ return bcdTimeUTC.toDateTime(accountTimeZone).getDayOfMonth();
+ }
}
}
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingApi.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingApi.java
index 2a2c3f3..3c1cf31 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingApi.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingApi.java
@@ -29,6 +29,7 @@ import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.account.api.MutableAccountData;
import com.ning.billing.catalog.api.CatalogApiException;
import com.ning.billing.catalog.api.CatalogService;
@@ -137,15 +138,15 @@ public class DefaultBillingApi implements BillingApi {
for (final Subscription subscription : subscriptions) {
for (final EffectiveSubscriptionEvent transition : subscription.getBillingTransitions()) {
try {
- final int bcd = bcdCalculator.calculateBcd(bundle, subscription, transition, account);
+ final BillCycleDay bcd = bcdCalculator.calculateBcd(bundle, subscription, transition, account);
- if (account.getBillCycleDay() == 0) {
+ if (account.getBillCycleDay().getDayOfMonthUTC() == 0) {
final MutableAccountData modifiedData = account.toMutableAccountData();
modifiedData.setBillCycleDay(bcd);
accountApi.updateAccount(account.getExternalKey(), modifiedData, context);
}
- final BillingEvent event = new DefaultBillingEvent(account, transition, subscription, bcd, account.getCurrency(), catalogService.getFullCatalog());
+ final BillingEvent event = new DefaultBillingEvent(account, transition, subscription, bcd.getDayOfMonthUTC(), account.getCurrency(), catalogService.getFullCatalog());
result.add(event);
} catch (CatalogApiException e) {
log.error("Failing to identify catalog components while creating BillingEvent from transition: " +
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 5364b18..d35f4fe 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
@@ -51,10 +51,10 @@ public class DefaultBillingEvent implements BillingEvent {
private final Long totalOrdering;
private final DateTimeZone timeZone;
- public DefaultBillingEvent(final Account account, final EffectiveSubscriptionEvent transition, final Subscription subscription, final int billCycleDay, final Currency currency, final Catalog catalog) throws CatalogApiException {
+ public DefaultBillingEvent(final Account account, final EffectiveSubscriptionEvent transition, final Subscription subscription, final int billCycleDayUTC, final Currency currency, final Catalog catalog) throws CatalogApiException {
this.account = account;
- this.billCycleDay = billCycleDay;
+ this.billCycleDay = billCycleDayUTC;
this.subscription = subscription;
effectiveDate = transition.getEffectiveTransitionTime();
final String planPhaseName = (transition.getTransitionType() != SubscriptionTransitionType.CANCEL) ?
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 ad6522c..8a290d9 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
@@ -70,6 +70,7 @@ import com.ning.billing.junction.api.DefaultBlockingState;
import com.ning.billing.lifecycle.KillbillService.ServiceException;
import com.ning.billing.mock.MockEffectiveSubscriptionEvent;
import com.ning.billing.mock.MockSubscription;
+import com.ning.billing.mock.api.MockBillCycleDay;
import com.ning.billing.util.api.TagUserApi;
import com.ning.billing.util.callcontext.CallContextFactory;
import com.ning.billing.util.callcontext.DefaultCallContextFactory;
@@ -217,7 +218,7 @@ public class TestBillingApi extends JunctionTestSuite {
final AccountUserApi accountApi = Mockito.mock(AccountUserApi.class);
final Account account = Mockito.mock(Account.class);
- Mockito.when(account.getBillCycleDay()).thenReturn(32);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(32));
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
Mockito.when(account.getTimeZone()).thenReturn(DateTimeZone.UTC);
@@ -247,7 +248,7 @@ public class TestBillingApi extends JunctionTestSuite {
effectiveSubscriptionTransitions.add(t);
final Account account = Mockito.mock(Account.class);
- Mockito.when(account.getBillCycleDay()).thenReturn(1);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(1));
Mockito.when(account.getTimeZone()).thenReturn(DateTimeZone.UTC);
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
@@ -283,7 +284,7 @@ public class TestBillingApi extends JunctionTestSuite {
final AccountUserApi accountApi = Mockito.mock(AccountUserApi.class);
final Account account = Mockito.mock(Account.class);
- Mockito.when(account.getBillCycleDay()).thenReturn(32);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(32));
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
Mockito.when(account.getTimeZone()).thenReturn(DateTimeZone.UTC);
@@ -317,7 +318,7 @@ public class TestBillingApi extends JunctionTestSuite {
effectiveSubscriptionTransitions.add(t);
final Account account = Mockito.mock(Account.class);
- Mockito.when(account.getBillCycleDay()).thenReturn(1);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(1));
Mockito.when(account.getTimeZone()).thenReturn(DateTimeZone.UTC);
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
@@ -357,7 +358,7 @@ public class TestBillingApi extends JunctionTestSuite {
final AccountUserApi accountApi = Mockito.mock(AccountUserApi.class);
final Account account = Mockito.mock(Account.class);
- Mockito.when(account.getBillCycleDay()).thenReturn(32);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(32));
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getTimeZone()).thenReturn(DateTimeZone.UTC);
Mockito.when(accountApi.getAccountById(Mockito.<UUID>any())).thenReturn(account);
@@ -429,7 +430,7 @@ public class TestBillingApi extends JunctionTestSuite {
final AccountUserApi accountApi = Mockito.mock(AccountUserApi.class);
final Account account = Mockito.mock(Account.class);
- Mockito.when(account.getBillCycleDay()).thenReturn(32);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(32));
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
Mockito.when(accountApi.getAccountById(Mockito.<UUID>any())).thenReturn(account);
@@ -471,7 +472,7 @@ public class TestBillingApi extends JunctionTestSuite {
final AccountUserApi accountApi = Mockito.mock(AccountUserApi.class);
final Account account = Mockito.mock(Account.class);
- Mockito.when(account.getBillCycleDay()).thenReturn(32);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(32));
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
Mockito.when(accountApi.getAccountById(Mockito.<UUID>any())).thenReturn(account);
diff --git a/payment/src/test/java/com/ning/billing/payment/TestHelper.java b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
index 2d7bbcd..af509ab 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestHelper.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
@@ -30,6 +30,7 @@ import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceCreationEvent;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePaymentApi;
+import com.ning.billing.mock.api.MockBillCycleDay;
import com.ning.billing.payment.api.PaymentApi;
import com.ning.billing.payment.api.PaymentMethodPlugin;
import com.ning.billing.payment.glue.PaymentTestModuleWithMocks;
@@ -106,7 +107,7 @@ public class TestHelper {
Mockito.when(account.getPhone()).thenReturn("123-456-7890");
Mockito.when(account.getEmail()).thenReturn(email);
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
- Mockito.when(account.getBillCycleDay()).thenReturn(1);
+ Mockito.when(account.getBillCycleDay()).thenReturn(new MockBillCycleDay(1));
Mockito.when(account.isMigrated()).thenReturn(false);
Mockito.when(account.isNotifiedForInvoices()).thenReturn(false);
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestAccount.java b/server/src/test/java/com/ning/billing/jaxrs/TestAccount.java
index b3f30ff..791da29 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestAccount.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestAccount.java
@@ -40,6 +40,7 @@ import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.jaxrs.json.AccountJson;
import com.ning.billing.jaxrs.json.AccountTimelineJson;
+import com.ning.billing.jaxrs.json.BillCycleDayJson;
import com.ning.billing.jaxrs.json.BundleJsonNoSubscriptions;
import com.ning.billing.jaxrs.json.CustomFieldJson;
import com.ning.billing.jaxrs.json.PaymentJsonSimple;
@@ -48,6 +49,7 @@ import com.ning.billing.jaxrs.json.RefundJson;
import com.ning.billing.jaxrs.json.SubscriptionJsonNoEvents;
import com.ning.billing.jaxrs.json.TagDefinitionJson;
import com.ning.billing.jaxrs.resources.JaxrsResource;
+import com.ning.billing.mock.api.MockBillCycleDay;
import com.ning.http.client.Response;
@@ -71,7 +73,8 @@ public class TestAccount extends TestJaxrsBase {
// Update Account
final AccountJson newInput = new AccountJson(objFromJson.getAccountId(),
- "zozo", 4, objFromJson.getExternalKey(), "rr@google.com", 18, "EUR", null, "UTC", "bl1", "bh2", "", "ca", "usa", "415-255-2991");
+ "zozo", 4, objFromJson.getExternalKey(), "rr@google.com", new BillCycleDayJson(18, 18),
+ "EUR", null, "UTC", "bl1", "bh2", "", "ca", "usa", "415-255-2991");
baseJson = mapper.writeValueAsString(newInput);
final String uri = JaxrsResource.ACCOUNTS_PATH + "/" + objFromJson.getAccountId();
response = doPut(uri, baseJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
index b862741..9153cd5 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
@@ -47,6 +47,7 @@ import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.joda.JodaModule;
import com.google.inject.Module;
import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.account.glue.AccountModule;
import com.ning.billing.analytics.setup.AnalyticsModule;
import com.ning.billing.api.TestApiListener;
@@ -63,6 +64,7 @@ import com.ning.billing.invoice.api.InvoiceNotifier;
import com.ning.billing.invoice.glue.DefaultInvoiceModule;
import com.ning.billing.invoice.notification.NullInvoiceNotifier;
import com.ning.billing.jaxrs.json.AccountJson;
+import com.ning.billing.jaxrs.json.BillCycleDayJson;
import com.ning.billing.jaxrs.json.BundleJsonNoSubscriptions;
import com.ning.billing.jaxrs.json.PaymentMethodJson;
import com.ning.billing.jaxrs.json.PaymentMethodJson.PaymentMethodPluginDetailJson;
@@ -512,7 +514,7 @@ public class TestJaxrsBase extends ServerTestSuiteWithEmbeddedDB {
final String accountId = UUID.randomUUID().toString();
final int length = 4;
// Let junction figure it out
- final int billCycleDay = 0;
+ final BillCycleDayJson billCycleDay = null;
final String currency = "USD";
final String timeZone = "UTC";
final String address1 = "12 rue des ecoles";
diff --git a/util/src/test/java/com/ning/billing/mock/api/MockAccountUserApi.java b/util/src/test/java/com/ning/billing/mock/api/MockAccountUserApi.java
index 0d80e4e..53d0596 100644
--- a/util/src/test/java/com/ning/billing/mock/api/MockAccountUserApi.java
+++ b/util/src/test/java/com/ning/billing/mock/api/MockAccountUserApi.java
@@ -28,6 +28,7 @@ import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.account.api.AccountEmail;
import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.account.api.MigrationAccountData;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.mock.MockAccountBuilder;
@@ -42,7 +43,7 @@ public class MockAccountUserApi implements AccountUserApi {
final String name,
final int firstNameLength,
final Currency currency,
- final int billCycleDay,
+ final BillCycleDay billCycleDay,
final UUID paymentMethodId,
final DateTimeZone timeZone,
final String locale,
diff --git a/util/src/test/java/com/ning/billing/mock/api/MockBillCycleDay.java b/util/src/test/java/com/ning/billing/mock/api/MockBillCycleDay.java
new file mode 100644
index 0000000..c5167ee
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/mock/api/MockBillCycleDay.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.mock.api;
+
+import com.ning.billing.account.api.BillCycleDay;
+
+public class MockBillCycleDay implements BillCycleDay {
+
+ private final int billCycleDay;
+
+ public MockBillCycleDay(final int billCycleDay) {
+ this.billCycleDay = billCycleDay;
+ }
+
+ @Override
+ public int getDayOfMonthUTC() {
+ return billCycleDay;
+ }
+
+ @Override
+ public int getDayOfMonthLocal() {
+ return billCycleDay;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("MockBillCycleDay");
+ sb.append("{billCycleDay=").append(billCycleDay);
+ 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 MockBillCycleDay that = (MockBillCycleDay) o;
+
+ if (billCycleDay != that.billCycleDay) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return billCycleDay;
+ }
+}
diff --git a/util/src/test/java/com/ning/billing/mock/MockAccountBuilder.java b/util/src/test/java/com/ning/billing/mock/MockAccountBuilder.java
index 0985646..01d5257 100644
--- a/util/src/test/java/com/ning/billing/mock/MockAccountBuilder.java
+++ b/util/src/test/java/com/ning/billing/mock/MockAccountBuilder.java
@@ -22,6 +22,7 @@ import org.joda.time.DateTimeZone;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountData;
+import com.ning.billing.account.api.BillCycleDay;
import com.ning.billing.account.api.MutableAccountData;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.junction.api.BlockingState;
@@ -33,7 +34,7 @@ public class MockAccountBuilder {
private String name = "";
private int firstNameLength;
private Currency currency = Currency.USD;
- private int billingCycleDay;
+ private BillCycleDay billingCycleDay;
private UUID paymentMethodId;
private DateTimeZone timeZone = DateTimeZone.UTC;
private String locale = "";
@@ -99,7 +100,7 @@ public class MockAccountBuilder {
return this;
}
- public MockAccountBuilder billingCycleDay(final int billingCycleDay) {
+ public MockAccountBuilder billingCycleDay(final BillCycleDay billingCycleDay) {
this.billingCycleDay = billingCycleDay;
return this;
}
@@ -200,7 +201,7 @@ public class MockAccountBuilder {
}
@Override
- public Integer getBillCycleDay() {
+ public BillCycleDay getBillCycleDay() {
return billingCycleDay;
}