killbill-aplcache

account: add test to verify external key is unique per tenant This

3/13/2017 6:24:11 AM

Details

account/pom.xml 5(+5 -0)

diff --git a/account/pom.xml b/account/pom.xml
index 78a4147..d27448c 100644
--- a/account/pom.xml
+++ b/account/pom.xml
@@ -120,6 +120,11 @@
         </dependency>
         <dependency>
             <groupId>org.kill-bill.billing</groupId>
+            <artifactId>killbill-tenant</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.kill-bill.billing</groupId>
             <artifactId>killbill-util</artifactId>
         </dependency>
         <dependency>
diff --git a/account/src/test/java/org/killbill/billing/account/api/user/TestDefaultAccountUserApi.java b/account/src/test/java/org/killbill/billing/account/api/user/TestDefaultAccountUserApi.java
index 0a0d2ac..9fe5b8c 100644
--- a/account/src/test/java/org/killbill/billing/account/api/user/TestDefaultAccountUserApi.java
+++ b/account/src/test/java/org/killbill/billing/account/api/user/TestDefaultAccountUserApi.java
@@ -33,8 +33,12 @@ import org.killbill.billing.account.api.DefaultAccount;
 import org.killbill.billing.account.api.DefaultMutableAccountData;
 import org.killbill.billing.account.api.MutableAccountData;
 import org.killbill.billing.account.dao.AccountModelDao;
+import org.killbill.billing.callcontext.DefaultCallContext;
 import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.events.AccountCreationInternalEvent;
+import org.killbill.billing.tenant.dao.TenantModelDao;
+import org.killbill.billing.tenant.dao.TenantSqlDao;
+import org.killbill.billing.util.callcontext.CallContext;
 import org.killbill.billing.util.entity.Pagination;
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -432,4 +436,27 @@ public class TestDefaultAccountUserApi extends AccountTestSuiteWithEmbeddedDB {
             assertEquals(e.getCode(), ErrorCode.EXTERNAL_KEY_LIMIT_EXCEEDED.getCode());
         }
     }
+
+    @Test(groups = "slow", description = "Test Account creation with same External Key in different tenants")
+    public void testCreateAccountWithSameExternalKeyInDifferentTenants() throws Exception {
+        final AccountData accountData = createAccountData();
+
+        final Account account1 = accountUserApi.createAccount(accountData, callContext);
+        try {
+            // Same tenant
+            accountUserApi.createAccount(accountData, callContext);
+            Assert.fail();
+        } catch (final AccountApiException e) {
+            assertEquals(e.getCode(), ErrorCode.ACCOUNT_ALREADY_EXISTS.getCode());
+        }
+
+        final TenantSqlDao tenantSqlDao = dbi.onDemand(TenantSqlDao.class);
+        final TenantModelDao tenant2 = new TenantModelDao();
+        tenantSqlDao.create(tenant2, internalCallContext);
+        final CallContext callContext2 = new DefaultCallContext(tenant2.getId(), callContext.getUserName(), callContext.getCallOrigin(), callContext.getUserType(), callContext.getUserToken(), clock);
+        final Account account2 = accountUserApi.createAccount(accountData, callContext2);
+
+        Assert.assertEquals(account1.getExternalKey(), account2.getExternalKey());
+        Assert.assertNotEquals(account1.getId(), account2.getId());
+    }
 }