@Test(groups = "slow")
  public void testShouldBeAbleToHandleOtherBCDClass() throws Exception {
    final Account account = createTestAccount();
    accountDao.create(account, internalCallContext);

    final MutableAccountData otherAccount = account.toMutableAccountData();
    otherAccount.setAddress1(UUID.randomUUID().toString());
    otherAccount.setEmail(UUID.randomUUID().toString());
    // Same BCD, but not .equals method
    otherAccount.setBillCycleDay(
        new BillCycleDay() {
          @Override
          public int getDayOfMonthUTC() {
            return account.getBillCycleDay().getDayOfMonthUTC();
          }

          @Override
          public int getDayOfMonthLocal() {
            return account.getBillCycleDay().getDayOfMonthLocal();
          }
        });

    final DefaultAccount newAccount = new DefaultAccount(account.getId(), otherAccount);
    accountDao.update(newAccount, internalCallContext);

    final Account newFetchedAccount = accountDao.getById(account.getId(), internalCallContext);
    Assert.assertEquals(newFetchedAccount.getAddress1(), newAccount.getAddress1());
    Assert.assertEquals(newFetchedAccount.getEmail(), newAccount.getEmail());
    // Same BCD
    Assert.assertEquals(newFetchedAccount.getBillCycleDay(), account.getBillCycleDay());
  }
  @Test(groups = "slow")
  public void testShouldBeAbleToHandleBCDOfZeroZero() throws Exception {
    final Account account = createTestAccount(0);
    accountDao.create(account, internalCallContext);
    final Account fetchedAccount = accountDao.getById(account.getId(), internalCallContext);

    final MutableAccountData otherAccount = account.toMutableAccountData();
    // Set BCD to null
    otherAccount.setBillCycleDay(null);

    final DefaultAccount newAccount = new DefaultAccount(account.getId(), otherAccount);
    accountDao.update(newAccount, internalCallContext);

    // Same BCD (zero/zero)
    Assert.assertEquals(accountDao.getById(account.getId(), internalCallContext), fetchedAccount);
  }
  @Test(groups = "slow", expectedExceptions = IllegalArgumentException.class)
  public void testShouldntBeAbleToUpdateBillCycleDay() throws Exception {
    final Account account = createTestAccount();
    accountDao.create(account, internalCallContext);

    final MutableAccountData otherAccount = account.toMutableAccountData();
    otherAccount.setBillCycleDay(
        new BillCycleDay() {
          @Override
          public int getDayOfMonthUTC() {
            return account.getBillCycleDay().getDayOfMonthUTC() + 2;
          }

          @Override
          public int getDayOfMonthLocal() {
            return account.getBillCycleDay().getDayOfMonthLocal() + 2;
          }
        });

    accountDao.update(new DefaultAccount(account.getId(), otherAccount), internalCallContext);
  }