killbill-uncached

Merge branch 'audit-rework-nocleanup' of github.com:killbill/killbill

11/16/2012 8:28:02 PM

Details

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());
+            }
+        }));
     }
 }