diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
index a633e09..0403101 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
@@ -149,12 +149,14 @@ public class DefaultAccountUserApi implements AccountUserApi {
final CallContext migrationContext = callContextFactory.toMigrationCallContext(context, createdDate, updatedDate);
// Create the account
- final Account account = new DefaultAccount(UUID.randomUUID(), data);
- createAccount(account, migrationContext);
+ final Account account = createAccount(data, migrationContext);
// Add associated contact emails
- for (final String cur : data.getAdditionalContactEmails()) {
- addEmail(account.getId(), new DefaultAccountEmail(account.getId(), cur), migrationContext);
+ // In Killbill, we never return null for empty lists, but MigrationAccountData is implemented outside of Killbill
+ if (data.getAdditionalContactEmails() != null) {
+ for (final String cur : data.getAdditionalContactEmails()) {
+ addEmail(account.getId(), new DefaultAccountEmail(account.getId(), cur), migrationContext);
+ }
}
return account;
diff --git a/account/src/test/java/com/ning/billing/account/AccountTestBase.java b/account/src/test/java/com/ning/billing/account/AccountTestBase.java
index 733581e..c7cd703 100644
--- a/account/src/test/java/com/ning/billing/account/AccountTestBase.java
+++ b/account/src/test/java/com/ning/billing/account/AccountTestBase.java
@@ -94,6 +94,11 @@ public abstract class AccountTestBase extends AccountTestSuiteWithEmbeddedDB {
}
}
+ protected void checkAccountsEqual(final AccountData retrievedAccount, final AccountData account) {
+ final UUID fakeId = UUID.randomUUID();
+ checkAccountsEqual(new AccountModelDao(fakeId, retrievedAccount), new AccountModelDao(fakeId, account));
+ }
+
protected void checkAccountsEqual(final AccountModelDao retrievedAccount, final AccountModelDao account) {
if (retrievedAccount == null || account == null) {
Assert.assertNull(retrievedAccount);
@@ -138,6 +143,15 @@ public abstract class AccountTestBase extends AccountTestSuiteWithEmbeddedDB {
}
private AccountModelDao createTestAccount(final int billCycleDayUTC, final int billCycleDayLocal, final String phone) {
+ final AccountData accountData = createAccountData(billCycleDayUTC, billCycleDayLocal, phone);
+ return new AccountModelDao(UUID.randomUUID(), accountData);
+ }
+
+ protected AccountData createAccountData() {
+ return createAccountData(30, 31, UUID.randomUUID().toString().substring(0, 4));
+ }
+
+ private AccountData createAccountData(final int billCycleDayUTC, final int billCycleDayLocal, final String phone) {
final String externalKey = UUID.randomUUID().toString();
final String email = UUID.randomUUID().toString().substring(0, 4) + '@' + UUID.randomUUID().toString().substring(0, 4);
final String name = UUID.randomUUID().toString();
@@ -155,10 +169,9 @@ public abstract class AccountTestBase extends AccountTestSuiteWithEmbeddedDB {
final String country = Locale.GERMANY.getCountry();
final String postalCode = UUID.randomUUID().toString().substring(0, 4);
- final AccountData accountData = new DefaultMutableAccountData(externalKey, email, name, firstNameLength, currency,
- billCycleDay, paymentMethodId, null, timeZone,
- locale, address1, address2, companyName, city, stateOrProvince,
- country, postalCode, phone, false, true);
- return new AccountModelDao(UUID.randomUUID(), accountData);
+ return new DefaultMutableAccountData(externalKey, email, name, firstNameLength, currency,
+ billCycleDay, paymentMethodId, null, timeZone,
+ locale, address1, address2, companyName, city, stateOrProvince,
+ country, postalCode, phone, false, true);
}
}
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 07b4e15..2060cd2 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
@@ -16,22 +16,37 @@
package com.ning.billing.account.api.user;
+import java.util.List;
import java.util.UUID;
+import org.joda.time.DateTime;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.account.AccountTestBase;
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.DefaultMutableAccountData;
+import com.ning.billing.account.api.MigrationAccountData;
import com.ning.billing.account.api.MutableAccountData;
import com.ning.billing.catalog.api.Currency;
public class TestDefaultAccountUserApi extends AccountTestBase {
@Test(groups = "slow")
+ public void testMigrate() throws Exception {
+ final MigrationAccountData accountData = new TestMigrationAccountData(createAccountData());
+ final Account account = accountUserApi.migrateAccount(accountData, callContext);
+ checkAccountsEqual(account.toMutableAccountData(), accountData);
+
+ // Make sure we can retrieve the migrated account
+ final Account retrievedAccount = accountUserApi.getAccountById(account.getId(), callContext);
+ checkAccountsEqual(retrievedAccount, account);
+ }
+
+ @Test(groups = "slow")
public void testShouldBeAbleToPassNullForSomeFieldsToAvoidUpdate() throws Exception {
final Account account = accountUserApi.createAccount(new DefaultAccount(createTestAccount()), callContext);
@@ -92,4 +107,26 @@ public class TestDefaultAccountUserApi extends AccountTestBase {
accountUserApi.updateAccount(new DefaultAccount(account.getId(), otherAccount), callContext);
}
+
+ private class TestMigrationAccountData extends DefaultMutableAccountData implements MigrationAccountData {
+
+ public TestMigrationAccountData(final AccountData accountData) {
+ super(accountData);
+ }
+
+ @Override
+ public DateTime getCreatedDate() {
+ return null;
+ }
+
+ @Override
+ public DateTime getUpdatedDate() {
+ return null;
+ }
+
+ @Override
+ public List<String> getAdditionalContactEmails() {
+ return null;
+ }
+ }
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
index cfa14f4..309e20f 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
@@ -27,7 +27,10 @@ import com.ning.billing.ObjectType;
import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.tag.Tag;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
public class MockTagDao implements TagDao {
@@ -63,6 +66,15 @@ public class MockTagDao implements TagDao {
@Override
public List<TagModelDao> getTags(final UUID objectId, final ObjectType objectType, final InternalTenantContext internalTenantContext) {
- throw new UnsupportedOperationException();
+ if (tagStore.get(objectId) == null) {
+ return ImmutableList.<TagModelDao>of();
+ }
+
+ return ImmutableList.<TagModelDao>copyOf(Collections2.filter(tagStore.get(objectId), new Predicate<TagModelDao>() {
+ @Override
+ public boolean apply(final TagModelDao input) {
+ return objectType.equals(input.getObjectType());
+ }
+ }));
}
}