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 7eb38af..6984db1 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
@@ -228,8 +228,10 @@ public class DefaultAccount extends EntityBase implements Account {
}
// We can't just use .equals here as the BillCycleDay class might not have implemented it
- if (billCycleDay != null ? !(billCycleDay.getDayOfMonthUTC() == delegate.getBillCycleDay().getDayOfMonthUTC() &&
- billCycleDay.getDayOfMonthLocal() == delegate.getBillCycleDay().getDayOfMonthLocal()) : delegate.getBillCycleDay() != null) {
+ if (!(billCycleDay == null && (delegate.getBillCycleDay() == null ||
+ delegate.getBillCycleDay().getDayOfMonthUTC() == 0 && delegate.getBillCycleDay().getDayOfMonthLocal() == 0)) &&
+ !(billCycleDay != null && (billCycleDay.getDayOfMonthUTC() == delegate.getBillCycleDay().getDayOfMonthUTC() &&
+ billCycleDay.getDayOfMonthLocal() == delegate.getBillCycleDay().getDayOfMonthLocal()))) {
throw new IllegalArgumentException(String.format("Killbill doesn't support updating the account BCD yet: this=%s, delegate=%s",
billCycleDay, delegate.getBillCycleDay()));
}
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 d5244d9..941b66f 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
@@ -352,6 +352,23 @@ public class TestAccountDao extends AccountDaoTestBase {
}
@Test(groups = "slow")
+ public void testShouldBeAbleToHandleBCDOfZeroZero() throws Exception {
+ final Account account = createTestAccount(0);
+ accountDao.create(account, context);
+ final Account fetchedAccount = accountDao.getById(account.getId());
+
+ final MutableAccountData otherAccount = account.toMutableAccountData();
+ // Set BCD to null
+ otherAccount.setBillCycleDay(null);
+
+ final DefaultAccount newAccount = new DefaultAccount(account.getId(), otherAccount);
+ accountDao.update(newAccount, context);
+
+ // Same BCD (zero/zero)
+ Assert.assertEquals(accountDao.getById(account.getId()), fetchedAccount);
+ }
+
+ @Test(groups = "slow")
public void testAccountEmail() {
List<AccountEmail> emails = new ArrayList<AccountEmail>();