killbill-memoizeit
Changes
payment/pom.xml 5(+5 -0)
payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleWithEmbeddedDB.java 6(+4 -2)
pom.xml 2(+1 -1)
subscription/pom.xml 5(+5 -0)
subscription/src/test/java/org/killbill/billing/subscription/api/migration/TestMigration.java 4(+3 -1)
subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestTransfer.java 37(+19 -18)
subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java 47(+31 -16)
subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiError.java 27(+13 -14)
subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java 21(+10 -11)
subscription/src/test/java/org/killbill/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java 40(+26 -14)
subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModule.java 8(+2 -6)
subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleNoDB.java 8(+6 -2)
subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java 7(+5 -2)
subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestInitializer.java 16(+9 -7)
subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java 17(+12 -5)
Details
payment/pom.xml 5(+5 -0)
diff --git a/payment/pom.xml b/payment/pom.xml
index a96dae5..dbd915a 100644
--- a/payment/pom.xml
+++ b/payment/pom.xml
@@ -71,6 +71,11 @@
<dependency>
<groupId>org.kill-bill.billing</groupId>
<artifactId>killbill-account</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.billing</groupId>
+ <artifactId>killbill-account</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
diff --git a/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java b/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
index 2adef8b..836d2d3 100644
--- a/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
+++ b/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -25,10 +27,13 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
+import javax.inject.Inject;
+
import org.joda.time.DateTime;
import org.killbill.billing.callcontext.InternalCallContext;
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.catalog.api.Currency;
+import org.killbill.billing.dao.MockNonEntityDao;
import org.killbill.billing.payment.api.TransactionStatus;
import org.killbill.billing.payment.api.TransactionType;
import org.killbill.billing.util.entity.Pagination;
@@ -43,6 +48,13 @@ public class MockPaymentDao implements PaymentDao {
private final Map<UUID, PaymentTransactionModelDao> transactions = new HashMap<UUID, PaymentTransactionModelDao>();
private final Map<UUID, PaymentAttemptModelDao> attempts = new HashMap<UUID, PaymentAttemptModelDao>();
+ private final MockNonEntityDao mockNonEntityDao;
+
+ @Inject
+ public MockPaymentDao(final MockNonEntityDao mockNonEntityDao) {
+ this.mockNonEntityDao = mockNonEntityDao;
+ }
+
public void reset() {
synchronized (this) {
payments.clear();
@@ -65,8 +77,11 @@ public class MockPaymentDao implements PaymentDao {
@Override
public PaymentAttemptModelDao insertPaymentAttemptWithProperties(final PaymentAttemptModelDao attempt, final InternalCallContext context) {
+ attempt.setTenantRecordId(context.getTenantRecordId());
+
synchronized (this) {
attempts.put(attempt.getId(), attempt);
+ mockNonEntityDao.addTenantRecordIdMapping(attempt.getId(), context);
return attempt;
}
}
@@ -157,17 +172,26 @@ public class MockPaymentDao implements PaymentDao {
@Override
public PaymentModelDao insertPaymentWithFirstTransaction(final PaymentModelDao payment, final PaymentTransactionModelDao paymentTransaction, final InternalCallContext context) {
+ payment.setTenantRecordId(context.getTenantRecordId());
+ paymentTransaction.setTenantRecordId(context.getTenantRecordId());
+
synchronized (this) {
payments.put(payment.getId(), payment);
+ mockNonEntityDao.addTenantRecordIdMapping(payment.getId(), context);
+
transactions.put(paymentTransaction.getId(), paymentTransaction);
+ mockNonEntityDao.addTenantRecordIdMapping(paymentTransaction.getId(), context);
}
return payment;
}
@Override
public PaymentTransactionModelDao updatePaymentWithNewTransaction(final UUID paymentId, final PaymentTransactionModelDao paymentTransaction, final InternalCallContext context) {
+ paymentTransaction.setTenantRecordId(context.getTenantRecordId());
+
synchronized (this) {
transactions.put(paymentTransaction.getId(), paymentTransaction);
+ mockNonEntityDao.addTenantRecordIdMapping(paymentId, context);
}
return paymentTransaction;
}
diff --git a/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModule.java b/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModule.java
index ca64630..2b1ca1f 100644
--- a/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModule.java
+++ b/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModule.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -22,7 +22,6 @@ import java.util.UUID;
import org.killbill.billing.ObjectType;
import org.killbill.billing.callcontext.InternalTenantContext;
-import org.killbill.billing.mock.glue.MockAccountModule;
import org.killbill.billing.mock.glue.MockInvoiceModule;
import org.killbill.billing.mock.glue.MockSubscriptionModule;
import org.killbill.billing.mock.glue.MockTenantModule;
@@ -34,6 +33,7 @@ import org.killbill.billing.tag.TagInternalApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.config.PaymentConfig;
import org.killbill.billing.util.glue.CacheModule;
+import org.killbill.billing.util.glue.CallContextModule;
import org.killbill.billing.util.glue.MemoryGlobalLockerModule;
import org.killbill.billing.util.tag.Tag;
import org.killbill.clock.Clock;
@@ -68,11 +68,11 @@ public class TestPaymentModule extends PaymentModule {
protected void configure() {
super.configure();
install(new MockInvoiceModule(configSource));
- install(new MockAccountModule(configSource));
install(new MockSubscriptionModule(configSource));
install(new MemoryGlobalLockerModule(configSource));
install(new MockTenantModule(configSource));
install(new CacheModule(configSource));
+ install(new CallContextModule(configSource));
installExternalApis();
bind(TestPaymentHelper.class).asEagerSingleton();
}
diff --git a/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleNoDB.java b/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleNoDB.java
index d33e26c..503e8c2 100644
--- a/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleNoDB.java
+++ b/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleNoDB.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -19,6 +19,7 @@
package org.killbill.billing.payment.glue;
import org.killbill.billing.GuicyKillbillTestNoDBModule;
+import org.killbill.billing.mock.glue.MockAccountModule;
import org.killbill.billing.mock.glue.MockNonEntityDaoModule;
import org.killbill.billing.payment.core.sm.MockRetryablePaymentAutomatonRunner;
import org.killbill.billing.payment.core.sm.PluginRoutingPaymentAutomatonRunner;
@@ -42,6 +43,7 @@ public class TestPaymentModuleNoDB extends TestPaymentModule {
protected void configure() {
install(new GuicyKillbillTestNoDBModule(configSource));
install(new MockNonEntityDaoModule(configSource));
+ install(new MockAccountModule(configSource));
super.configure();
}
diff --git a/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleWithEmbeddedDB.java b/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleWithEmbeddedDB.java
index 92ded7c..7ad8a57 100644
--- a/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleWithEmbeddedDB.java
+++ b/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModuleWithEmbeddedDB.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -19,6 +19,7 @@
package org.killbill.billing.payment.glue;
import org.killbill.billing.GuicyKillbillTestWithEmbeddedDBModule;
+import org.killbill.billing.account.glue.DefaultAccountModule;
import org.killbill.billing.platform.api.KillbillConfigSource;
import org.killbill.billing.util.glue.NonEntityDaoModule;
import org.killbill.clock.Clock;
@@ -33,6 +34,7 @@ public class TestPaymentModuleWithEmbeddedDB extends TestPaymentModule {
protected void configure() {
install(new GuicyKillbillTestWithEmbeddedDBModule(configSource));
install(new NonEntityDaoModule(configSource));
+ install(new DefaultAccountModule(configSource));
super.configure();
}
diff --git a/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java b/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
index 562a94d..4cf6eee 100644
--- a/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
+++ b/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -23,9 +23,11 @@ import java.util.UUID;
import org.joda.time.LocalDate;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountInternalApi;
+import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.callcontext.InternalCallContext;
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.catalog.api.Currency;
+import org.killbill.billing.dao.MockNonEntityDao;
import org.killbill.billing.events.InvoiceCreationInternalEvent;
import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.invoice.api.InvoiceApiException;
@@ -47,24 +49,34 @@ import com.google.inject.Inject;
public class TestPaymentHelper {
- protected final AccountInternalApi AccountApi;
+ protected final AccountUserApi accountApi;
+ protected final AccountInternalApi accountInternalApi;
protected final InvoiceInternalApi invoiceApi;
protected PaymentApi paymentApi;
private final PersistentBus eventBus;
private final Clock clock;
-
+ private final MockNonEntityDao mockNonEntityDao;
+ private final InternalCallContext internalCallContext;
private final CallContext context;
@Inject
- public TestPaymentHelper(final AccountInternalApi AccountApi, final InvoiceInternalApi invoiceApi,
- final PaymentApi paymentApi, final PersistentBus eventBus,
+ public TestPaymentHelper(final AccountUserApi accountApi,
+ final AccountInternalApi accountInternalApi,
+ final InvoiceInternalApi invoiceApi,
+ final PaymentApi paymentApi,
+ final PersistentBus eventBus,
final Clock clock,
+ final MockNonEntityDao mockNonEntityDao,
+ final InternalCallContext internalCallContext,
final CallContext context) {
+ this.accountApi = accountApi;
this.eventBus = eventBus;
- this.AccountApi = AccountApi;
+ this.accountInternalApi = accountInternalApi;
this.invoiceApi = invoiceApi;
this.paymentApi = paymentApi;
this.clock = clock;
+ this.mockNonEntityDao = mockNonEntityDao;
+ this.internalCallContext = internalCallContext;
this.context = context;
}
@@ -107,30 +119,49 @@ public class TestPaymentHelper {
final String name = "First" + UUID.randomUUID().toString() + " " + "Last" + UUID.randomUUID().toString();
final String externalKey = UUID.randomUUID().toString();
- final Account account = Mockito.mock(Account.class);
- Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
- Mockito.when(account.getExternalKey()).thenReturn(externalKey);
- Mockito.when(account.getName()).thenReturn(name);
- Mockito.when(account.getFirstNameLength()).thenReturn(10);
- Mockito.when(account.getPhone()).thenReturn("123-456-7890");
- Mockito.when(account.getEmail()).thenReturn(email);
- Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
- Mockito.when(account.getBillCycleDayLocal()).thenReturn(1);
- Mockito.when(account.isMigrated()).thenReturn(false);
- Mockito.when(account.isNotifiedForInvoices()).thenReturn(false);
-
- Mockito.when(AccountApi.getAccountById(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(account);
- Mockito.when(AccountApi.getAccountByKey(Mockito.anyString(), Mockito.<InternalTenantContext>any())).thenReturn(account);
+ final Account accountData = Mockito.mock(Account.class);
+ Mockito.when(accountData.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(accountData.getExternalKey()).thenReturn(externalKey);
+ Mockito.when(accountData.getName()).thenReturn(name);
+ Mockito.when(accountData.getFirstNameLength()).thenReturn(10);
+ Mockito.when(accountData.getPhone()).thenReturn("123-456-7890");
+ Mockito.when(accountData.getEmail()).thenReturn(email);
+ Mockito.when(accountData.getCurrency()).thenReturn(Currency.USD);
+ Mockito.when(accountData.getBillCycleDayLocal()).thenReturn(1);
+ Mockito.when(accountData.isMigrated()).thenReturn(false);
+ Mockito.when(accountData.isNotifiedForInvoices()).thenReturn(false);
+
+ Account account;
+ if (isFastTest()) {
+ account = accountData;
+ Mockito.when(accountInternalApi.getAccountById(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(account);
+ Mockito.when(accountInternalApi.getAccountByKey(Mockito.anyString(), Mockito.<InternalTenantContext>any())).thenReturn(account);
+ mockNonEntityDao.addTenantRecordIdMapping(account.getId(), internalCallContext);
+ } else {
+ account = accountApi.createAccount(accountData, context);
+ }
if (addPaymentMethod) {
final PaymentMethodPlugin pm = new DefaultNoOpPaymentMethodPlugin(UUID.randomUUID().toString(), true, null);
- addTestPaymentMethod(account, pm);
+ account = addTestPaymentMethod(account, pm);
}
+
return account;
}
- public void addTestPaymentMethod(final Account account, final PaymentMethodPlugin paymentMethodInfo) throws Exception {
+ public Account addTestPaymentMethod(final Account account, final PaymentMethodPlugin paymentMethodInfo) throws Exception {
final UUID paymentMethodId = paymentApi.addPaymentMethod(account, paymentMethodInfo.getExternalPaymentMethodId(), MockPaymentProviderPlugin.PLUGIN_NAME, true, paymentMethodInfo, ImmutableList.<PluginProperty>of(), context);
- Mockito.when(account.getPaymentMethodId()).thenReturn(paymentMethodId);
+ if (isFastTest()) {
+ Mockito.when(account.getPaymentMethodId()).thenReturn(paymentMethodId);
+ return account;
+ } else {
+ // To reflect the payment method id change
+ return accountApi.getAccountById(account.getId(), context);
+ }
+ }
+
+ // Unfortunately, this helper is shared across fast and slow tests
+ private boolean isFastTest() {
+ return Mockito.mockingDetails(accountInternalApi).isMock();
}
}
pom.xml 2(+1 -1)
diff --git a/pom.xml b/pom.xml
index 756aee0..a6a87cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>killbill-oss-parent</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.8</version>
+ <version>0.9.9-SNAPSHOT</version>
</parent>
<artifactId>killbill</artifactId>
<version>0.13.2-SNAPSHOT</version>
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestBundle.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestBundle.java
index 23a9462..a020252 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestBundle.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestBundle.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -24,6 +24,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.ProductCategory;
+import org.killbill.billing.client.KillBillClientException;
import org.killbill.billing.client.model.Account;
import org.killbill.billing.client.model.Bundle;
import org.killbill.billing.client.model.Bundles;
@@ -69,7 +70,12 @@ public class TestBundle extends TestJaxrsBase {
public void testBundleNonExistent() throws Exception {
final Account accountJson = createAccount();
- Assert.assertNull(killBillClient.getBundle(UUID.randomUUID()));
+ try {
+ killBillClient.getBundle(UUID.randomUUID());
+ Assert.fail();
+ } catch (final KillBillClientException e) {
+ Assert.assertEquals(e.getBillingException().getClassName(), "java.lang.IllegalStateException");
+ }
Assert.assertTrue(killBillClient.getAccountBundles(accountJson.getAccountId(), "98374982743892").isEmpty());
Assert.assertTrue(killBillClient.getAccountBundles(accountJson.getAccountId()).isEmpty());
}
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCredit.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCredit.java
index 49e146a..bb1f0ad 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCredit.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCredit.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -26,6 +26,7 @@ import org.killbill.billing.client.KillBillClientException;
import org.killbill.billing.client.model.Account;
import org.killbill.billing.client.model.Credit;
import org.killbill.billing.client.model.Invoice;
+import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -87,6 +88,11 @@ public class TestCredit extends TestJaxrsBase {
@Test(groups = "slow", description = "Cannot retrieve a non existing credit")
public void testCreditDoesNotExist() throws Exception {
- assertNull(killBillClient.getCredit(UUID.randomUUID()));
+ try {
+ killBillClient.getCredit(UUID.randomUUID());
+ Assert.fail();
+ } catch (final KillBillClientException e) {
+ Assert.assertEquals(e.getBillingException().getClassName(), "java.lang.IllegalStateException");
+ }
}
}
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
index e72ccb4..a885df7 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -27,6 +27,7 @@ import org.killbill.billing.catalog.api.BillingActionPolicy;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.PriceListSet;
import org.killbill.billing.catalog.api.ProductCategory;
+import org.killbill.billing.client.KillBillClientException;
import org.killbill.billing.client.model.Account;
import org.killbill.billing.client.model.Subscription;
import org.killbill.billing.entitlement.api.Entitlement.EntitlementActionPolicy;
@@ -132,12 +133,26 @@ public class TestEntitlement extends TestJaxrsBase {
subscription.setBillingPeriod(BillingPeriod.ANNUAL);
subscription.setPriceList(PriceListSet.DEFAULT_PRICELIST_NAME);
- Assert.assertNull(killBillClient.updateSubscription(subscription, CALL_COMPLETION_TIMEOUT_SEC, createdBy, reason, comment));
-
- // No-op (404, doesn't throw an exception)
- killBillClient.cancelSubscription(subscriptionId, createdBy, reason, comment);
-
- Assert.assertNull(killBillClient.getSubscription(subscriptionId));
+ try {
+ killBillClient.updateSubscription(subscription, CALL_COMPLETION_TIMEOUT_SEC, createdBy, reason, comment);
+ Assert.fail();
+ } catch (final KillBillClientException e) {
+ Assert.assertEquals(e.getBillingException().getClassName(), "java.lang.IllegalStateException");
+ }
+
+ try {
+ killBillClient.cancelSubscription(subscriptionId, createdBy, reason, comment);
+ Assert.fail();
+ } catch (final KillBillClientException e) {
+ Assert.assertEquals(e.getBillingException().getClassName(), "java.lang.IllegalStateException");
+ }
+
+ try {
+ killBillClient.getSubscription(subscriptionId);
+ Assert.fail();
+ } catch (final KillBillClientException e) {
+ Assert.assertEquals(e.getBillingException().getClassName(), "java.lang.IllegalStateException");
+ }
}
@Test(groups = "slow", description = "Can override billing policy on change")
subscription/pom.xml 5(+5 -0)
diff --git a/subscription/pom.xml b/subscription/pom.xml
index 1c110d4..d001607 100644
--- a/subscription/pom.xml
+++ b/subscription/pom.xml
@@ -69,6 +69,11 @@
</dependency>
<dependency>
<groupId>org.kill-bill.billing</groupId>
+ <artifactId>killbill-account</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.billing</groupId>
<artifactId>killbill-api</artifactId>
</dependency>
<dependency>
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/migration/TestMigration.java b/subscription/src/test/java/org/killbill/billing/subscription/api/migration/TestMigration.java
index 727b555..53a85e1 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/migration/TestMigration.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/migration/TestMigration.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestTransfer.java b/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestTransfer.java
index 4cc394d..60bf798 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestTransfer.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestTransfer.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -20,6 +22,8 @@ import java.util.List;
import java.util.UUID;
import org.joda.time.DateTime;
+import org.killbill.billing.account.api.Account;
+import org.killbill.billing.account.api.AccountData;
import org.killbill.billing.api.TestApiListener.NextEvent;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.PhaseType;
@@ -36,6 +40,7 @@ import org.killbill.billing.subscription.api.user.SubscriptionBaseBundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
@@ -47,10 +52,21 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
protected static final Logger log = LoggerFactory.getLogger(TestTransfer.class);
+ protected UUID newAccountId;
+ protected UUID finalNewAccountId;
+
+ @BeforeClass(groups = "slow")
+ public void setUp() throws Exception {
+ final AccountData accountData = subscriptionTestInitializer.initAccountData();
+ final Account account = accountUserApi.createAccount(accountData, callContext);
+ newAccountId = account.getId();
+ final AccountData accountData2 = subscriptionTestInitializer.initAccountData();
+ final Account account2 = accountUserApi.createAccount(accountData2, callContext);
+ finalNewAccountId = account2.getId();
+ }
+
@Test(groups = "slow")
public void testTransferMigratedSubscriptionWithCTDInFuture() throws Exception {
- final UUID newAccountId = UUID.randomUUID();
-
final DateTime startDate = clock.getUTCNow().minusMonths(2);
final DateTime beforeMigration = clock.getUTCNow();
final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
@@ -101,8 +117,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferBPInTrialWithNoCTD() throws Exception {
- final UUID newAccountId = UUID.randomUUID();
-
final String baseProduct = "Shotgun";
final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
@@ -152,8 +166,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferBPInTrialWithCTD() throws Exception {
- final UUID newAccountId = UUID.randomUUID();
-
final String baseProduct = "Shotgun";
final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
@@ -202,8 +214,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferBPNoTrialWithNoCTD() throws Exception {
- final UUID newAccountId = UUID.randomUUID();
-
final String baseProduct = "Shotgun";
final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
@@ -251,8 +261,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferBPNoTrialWithCTD() throws Exception {
- final UUID newAccountId = UUID.randomUUID();
-
final String baseProduct = "Shotgun";
final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
@@ -331,8 +339,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferWithAO() throws Exception {
- final UUID newAccountId = UUID.randomUUID();
-
final String baseProduct = "Shotgun";
final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
@@ -414,7 +420,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
assertListenerStatus();
// ISSUE ANOTHER TRANSFER TO CHECK THAT WE CAN TRANSFER AGAIN-- NOTE WILL NOT WORK ON PREVIOUS ACCOUNT (LIMITATION)
- final UUID finalNewAccountId = UUID.randomUUID();
final DateTime newTransferRequestedDate = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.CANCEL);
testListener.pushExpectedEvent(NextEvent.TRANSFER);
@@ -426,8 +431,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferWithAOCancelled() throws Exception {
- final UUID newAccountId = UUID.randomUUID();
-
final String baseProduct = "Shotgun";
final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
@@ -476,8 +479,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferWithUncancel() throws Exception {
- final UUID newAccountId = UUID.randomUUID();
-
final String baseProduct = "Shotgun";
final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java
index 93b17b2..6f6e57d 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -28,11 +30,10 @@ import javax.inject.Inject;
import org.joda.time.DateTime;
import org.joda.time.Period;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-
import org.killbill.billing.ErrorCode;
+import org.killbill.billing.account.api.Account;
+import org.killbill.billing.account.api.AccountApiException;
+import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.api.TestApiListener;
import org.killbill.billing.api.TestApiListener.NextEvent;
import org.killbill.billing.callcontext.InternalCallContext;
@@ -43,8 +44,8 @@ import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
import org.killbill.billing.catalog.api.PriceListSet;
import org.killbill.billing.catalog.api.ProductCategory;
import org.killbill.billing.catalog.api.TimeUnit;
-import org.killbill.clock.Clock;
import org.killbill.billing.events.EffectiveSubscriptionInternalEvent;
+import org.killbill.billing.mock.MockAccountBuilder;
import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
import org.killbill.billing.subscription.api.SubscriptionBaseTransitionType;
import org.killbill.billing.subscription.api.migration.SubscriptionBaseMigrationApi.AccountMigration;
@@ -62,6 +63,11 @@ import org.killbill.billing.subscription.events.SubscriptionBaseEvent;
import org.killbill.billing.subscription.events.phase.PhaseEvent;
import org.killbill.billing.subscription.events.user.ApiEvent;
import org.killbill.billing.subscription.events.user.ApiEventType;
+import org.killbill.billing.util.callcontext.CallContext;
+import org.killbill.clock.Clock;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
@@ -72,20 +78,20 @@ public class TestSubscriptionHelper {
private final Logger log = LoggerFactory.getLogger(TestSubscriptionHelper.class);
+ private final AccountUserApi accountApi;
private final SubscriptionBaseInternalApi subscriptionApi;
-
private final Clock clock;
-
- private final InternalCallContext callContext;
-
+ private final InternalCallContext internalCallContext;
+ private final CallContext callContext;
private final TestApiListener testListener;
-
private final SubscriptionDao dao;
@Inject
- public TestSubscriptionHelper(final SubscriptionBaseInternalApi subscriptionApi, final Clock clock, final InternalCallContext callContext, final TestApiListener testListener, final SubscriptionDao dao) {
+ public TestSubscriptionHelper(final AccountUserApi accountApi, final SubscriptionBaseInternalApi subscriptionApi, final Clock clock, final InternalCallContext internallCallContext, final CallContext callContext, final TestApiListener testListener, final SubscriptionDao dao) {
+ this.accountApi = accountApi;
this.subscriptionApi = subscriptionApi;
this.clock = clock;
+ this.internalCallContext = internallCallContext;
this.callContext = callContext;
this.testListener = testListener;
this.dao = dao;
@@ -106,7 +112,7 @@ public class TestSubscriptionHelper {
testListener.pushExpectedEvent(NextEvent.CREATE);
final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionApi.createSubscription(bundleId,
new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSet, null),
- requestedDate == null ? clock.getUTCNow() : requestedDate, callContext);
+ requestedDate == null ? clock.getUTCNow() : requestedDate, internalCallContext);
assertNotNull(subscription);
testListener.assertListenerStatus();
@@ -115,7 +121,7 @@ public class TestSubscriptionHelper {
}
public void checkNextPhaseChange(final DefaultSubscriptionBase subscription, final int expPendingEvents, final DateTime expPhaseChange) {
- final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), callContext);
+ final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
assertNotNull(events);
printEvents(events);
assertEquals(events.size(), expPendingEvents);
@@ -245,8 +251,17 @@ public class TestSubscriptionHelper {
*/
public AccountMigration createAccountForMigrationTest(final List<List<SubscriptionMigrationCaseWithCTD>> cases) {
+ final Account account;
+ try {
+ final Account accountData = new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8))
+ .email(UUID.randomUUID().toString().substring(1, 8))
+ .build();
+ account = accountApi.createAccount(accountData, callContext);
+ } catch (final AccountApiException e) {
+ throw new AssertionError(e.getLocalizedMessage());
+ }
+
return new AccountMigration() {
- private final UUID accountId = UUID.randomUUID();
@Override
public BundleMigration[] getBundles() {
@@ -295,7 +310,7 @@ public class TestSubscriptionHelper {
@Override
public UUID getAccountKey() {
- return accountId;
+ return account.getId();
}
};
}
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiError.java b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiError.java
index 724360c..c24b2a4 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiError.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiError.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -22,9 +24,6 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.joda.time.Interval;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
import org.killbill.billing.ErrorCode;
import org.killbill.billing.api.TestApiListener.NextEvent;
import org.killbill.billing.catalog.api.BillingActionPolicy;
@@ -32,10 +31,12 @@ import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.Duration;
import org.killbill.billing.catalog.api.PlanPhase;
import org.killbill.billing.catalog.api.PriceListSet;
-import org.killbill.clock.DefaultClock;
import org.killbill.billing.subscription.SubscriptionTestSuiteNoDB;
import org.killbill.billing.subscription.api.SubscriptionBase;
import org.killbill.billing.subscription.exceptions.SubscriptionBaseError;
+import org.killbill.clock.DefaultClock;
+import org.testng.Assert;
+import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
@@ -74,16 +75,14 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
@Test(groups = "fast")
public void testCreateSubscriptionAddOnNotAvailable() throws SubscriptionBaseApiException {
- final UUID accountId = UUID.randomUUID();
- final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
+ final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), "myAOBundle", internalCallContext);
testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_NOT_AVAILABLE);
}
@Test(groups = "fast")
public void testCreateSubscriptionAddOnIncluded() throws SubscriptionBaseApiException {
- final UUID accountId = UUID.randomUUID();
- final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
+ final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), "myAOBundle", internalCallContext);
testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_ALREADY_INCLUDED);
}
@@ -95,7 +94,7 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
testUtil.getProductSpecifier(productName, planSet, term, null),
clock.getUTCNow(), internalCallContext);
Assert.fail("Exception expected, error code: " + expected);
- } catch (SubscriptionBaseApiException e) {
+ } catch (final SubscriptionBaseApiException e) {
assertEquals(e.getCode(), expected.getCode());
}
}
@@ -108,7 +107,7 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
subscription.cancelWithDate(clock.getUTCNow(), callContext);
try {
subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
- } catch (SubscriptionBaseApiException e) {
+ } catch (final SubscriptionBaseApiException e) {
assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_NON_ACTIVE.getCode());
}
}
@@ -120,7 +119,7 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
try {
subscription.changePlanWithPolicy("Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, BillingActionPolicy.ILLEGAL, callContext);
Assert.fail();
- } catch (SubscriptionBaseError error) {
+ } catch (final SubscriptionBaseError error) {
assertTrue(true);
assertEquals(subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext).getCurrentPlan().getRecurringBillingPeriod(), BillingPeriod.ANNUAL);
}
@@ -154,7 +153,7 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
subscription.cancelWithPolicy(BillingActionPolicy.END_OF_TERM, callContext);
try {
subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
- } catch (SubscriptionBaseApiException e) {
+ } catch (final SubscriptionBaseApiException e) {
assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_FUTURE_CANCELLED.getCode());
}
@@ -167,7 +166,7 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
try {
subscription.uncancel(callContext);
- } catch (SubscriptionBaseApiException e) {
+ } catch (final SubscriptionBaseApiException e) {
assertEquals(e.getCode(), ErrorCode.SUB_UNCANCEL_BAD_STATE.getCode());
}
assertListenerStatus();
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java b/subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java
index 63518ba..41605f2 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -60,10 +60,10 @@ public class DefaultSubscriptionTestInitializer implements SubscriptionTestIniti
}
public AccountData initAccountData() {
- final AccountData accountData = new MockAccountBuilder().name(UUID.randomUUID().toString())
+ final AccountData accountData = new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8))
.firstNameLength(6)
- .email(UUID.randomUUID().toString())
- .phone(UUID.randomUUID().toString())
+ .email(UUID.randomUUID().toString().substring(1, 8))
+ .phone(UUID.randomUUID().toString().substring(1, 8))
.migrated(false)
.isNotifiedForInvoices(false)
.externalKey(UUID.randomUUID().toString())
@@ -77,17 +77,16 @@ public class DefaultSubscriptionTestInitializer implements SubscriptionTestIniti
return accountData;
}
- public SubscriptionBaseBundle initBundle(final SubscriptionBaseInternalApi subscriptionApi, final InternalCallContext callContext) throws Exception {
- final UUID accountId = UUID.randomUUID();
+ public SubscriptionBaseBundle initBundle(final UUID accountId, final SubscriptionBaseInternalApi subscriptionApi, final InternalCallContext callContext) throws Exception {
final SubscriptionBaseBundle bundle = subscriptionApi.createBundleForAccount(accountId, DEFAULT_BUNDLE_KEY, callContext);
assertNotNull(bundle);
return bundle;
}
- public void startTestFamework(final TestApiListener testListener,
- final ClockMock clock,
- final BusService busService,
- final SubscriptionBaseService subscriptionBaseService) throws Exception {
+ public void startTestFramework(final TestApiListener testListener,
+ final ClockMock clock,
+ final BusService busService,
+ final SubscriptionBaseService subscriptionBaseService) throws Exception {
log.debug("STARTING TEST FRAMEWORK");
resetTestListener(testListener);
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java b/subscription/src/test/java/org/killbill/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
index c094ffe..2c7994c 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -27,21 +29,14 @@ import java.util.TreeSet;
import java.util.UUID;
import org.joda.time.DateTime;
-import org.killbill.billing.catalog.api.CatalogApiException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.killbill.billing.callcontext.InternalCallContext;
import org.killbill.billing.callcontext.InternalTenantContext;
+import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.CatalogService;
import org.killbill.billing.catalog.api.ProductCategory;
import org.killbill.billing.catalog.api.TimeUnit;
-import org.killbill.clock.Clock;
+import org.killbill.billing.dao.MockNonEntityDao;
import org.killbill.billing.entitlement.api.SubscriptionApiException;
-import org.killbill.notificationq.api.NotificationEvent;
-import org.killbill.notificationq.api.NotificationQueue;
-import org.killbill.notificationq.api.NotificationQueueService;
-import org.killbill.notificationq.api.NotificationQueueService.NoSuchNotificationQueue;
import org.killbill.billing.subscription.api.SubscriptionBase;
import org.killbill.billing.subscription.api.migration.AccountMigrationData;
import org.killbill.billing.subscription.api.migration.AccountMigrationData.BundleMigrationData;
@@ -64,6 +59,13 @@ import org.killbill.billing.util.entity.Pagination;
import org.killbill.billing.util.entity.dao.EntitySqlDao;
import org.killbill.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
import org.killbill.billing.util.entity.dao.MockEntityDaoBase;
+import org.killbill.clock.Clock;
+import org.killbill.notificationq.api.NotificationEvent;
+import org.killbill.notificationq.api.NotificationQueue;
+import org.killbill.notificationq.api.NotificationQueueService;
+import org.killbill.notificationq.api.NotificationQueueService.NoSuchNotificationQueue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
@@ -74,15 +76,19 @@ public class MockSubscriptionDaoMemory extends MockEntityDaoBase<SubscriptionBun
private final List<SubscriptionBaseBundle> bundles;
private final List<SubscriptionBase> subscriptions;
private final TreeSet<SubscriptionBaseEvent> events;
+
+ private final MockNonEntityDao mockNonEntityDao;
private final Clock clock;
private final NotificationQueueService notificationQueueService;
private final CatalogService catalogService;
@Inject
- public MockSubscriptionDaoMemory(final Clock clock,
+ public MockSubscriptionDaoMemory(final MockNonEntityDao mockNonEntityDao,
+ final Clock clock,
final NotificationQueueService notificationQueueService,
final CatalogService catalogService) {
super();
+ this.mockNonEntityDao = mockNonEntityDao;
this.clock = clock;
this.catalogService = catalogService;
this.notificationQueueService = notificationQueueService;
@@ -162,6 +168,7 @@ public class MockSubscriptionDaoMemory extends MockEntityDaoBase<SubscriptionBun
@Override
public SubscriptionBaseBundle createSubscriptionBundle(final DefaultSubscriptionBaseBundle bundle, final InternalCallContext context) {
bundles.add(bundle);
+ mockNonEntityDao.addTenantRecordIdMapping(bundle.getId(), context);
return getSubscriptionBundleFromId(bundle.getId(), context);
}
@@ -204,6 +211,7 @@ public class MockSubscriptionDaoMemory extends MockEntityDaoBase<SubscriptionBun
}
final SubscriptionBase updatedSubscription = buildSubscription(subscription, context);
subscriptions.add(updatedSubscription);
+ mockNonEntityDao.addTenantRecordIdMapping(updatedSubscription.getId(), context);
}
@Override
@@ -289,7 +297,7 @@ public class MockSubscriptionDaoMemory extends MockEntityDaoBase<SubscriptionBun
if (events.size() > 0) {
try {
subscription.rebuildTransitions(getEventsForSubscription(in.getId(), context), catalogService.getFullCatalog(context));
- } catch (CatalogApiException e) {
+ } catch (final CatalogApiException e) {
log.warn("Failed to rebuild subscription", e);
}
}
@@ -347,6 +355,7 @@ public class MockSubscriptionDaoMemory extends MockEntityDaoBase<SubscriptionBun
private void insertEvent(final SubscriptionBaseEvent event, final InternalCallContext context) {
synchronized (events) {
events.add(event);
+ mockNonEntityDao.addTenantRecordIdMapping(event.getId(), context);
recordFutureNotificationFromTransaction(null, event.getEffectiveDate(), new SubscriptionNotificationKey(event.getId()), context);
}
}
@@ -433,13 +442,16 @@ public class MockSubscriptionDaoMemory extends MockEntityDaoBase<SubscriptionBun
final DefaultSubscriptionBase subData = curSubscription.getData();
for (final SubscriptionBaseEvent curEvent : curSubscription.getInitialEvents()) {
events.add(curEvent);
+ mockNonEntityDao.addTenantRecordIdMapping(curEvent.getId(), context);
recordFutureNotificationFromTransaction(null, curEvent.getEffectiveDate(),
new SubscriptionNotificationKey(curEvent.getId()), context);
}
subscriptions.add(subData);
+ mockNonEntityDao.addTenantRecordIdMapping(subData.getId(), context);
}
bundles.add(bundleData);
+ mockNonEntityDao.addTenantRecordIdMapping(bundleData.getId(), context);
}
}
}
@@ -462,9 +474,9 @@ public class MockSubscriptionDaoMemory extends MockEntityDaoBase<SubscriptionBun
final NotificationQueue subscriptionEventQueue = notificationQueueService.getNotificationQueue(DefaultSubscriptionBaseService.SUBSCRIPTION_SERVICE_NAME,
DefaultSubscriptionBaseService.NOTIFICATION_QUEUE_NAME);
subscriptionEventQueue.recordFutureNotificationFromTransaction(null, effectiveDate, notificationKey, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
- } catch (NoSuchNotificationQueue e) {
+ } catch (final NoSuchNotificationQueue e) {
throw new RuntimeException(e);
- } catch (IOException e) {
+ } catch (final IOException e) {
throw new RuntimeException(e);
}
}
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModule.java b/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModule.java
index 495e447..25984ce 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModule.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModule.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -18,7 +18,6 @@
package org.killbill.billing.subscription.glue;
-import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.api.TestApiListener;
import org.killbill.billing.catalog.glue.CatalogModule;
import org.killbill.billing.mock.glue.MockTenantModule;
@@ -28,7 +27,6 @@ import org.killbill.billing.subscription.SubscriptionTestInitializer;
import org.killbill.billing.subscription.api.user.TestSubscriptionHelper;
import org.killbill.billing.util.glue.CacheModule;
import org.killbill.billing.util.glue.CallContextModule;
-import org.mockito.Mockito;
public class TestDefaultSubscriptionModule extends DefaultSubscriptionModule {
@@ -44,8 +42,6 @@ public class TestDefaultSubscriptionModule extends DefaultSubscriptionModule {
install(new CacheModule(configSource));
install(new MockTenantModule(configSource));
- bind(AccountUserApi.class).toInstance(Mockito.mock(AccountUserApi.class));
-
bind(TestSubscriptionHelper.class).asEagerSingleton();
bind(TestApiListener.class).asEagerSingleton();
bind(SubscriptionTestInitializer.class).to(DefaultSubscriptionTestInitializer.class).asEagerSingleton();
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleNoDB.java b/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleNoDB.java
index 4cae607..ae1d4b7 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleNoDB.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleNoDB.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -19,12 +19,14 @@
package org.killbill.billing.subscription.glue;
import org.killbill.billing.GuicyKillbillTestNoDBModule;
+import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.mock.glue.MockNonEntityDaoModule;
import org.killbill.billing.platform.api.KillbillConfigSource;
import org.killbill.billing.subscription.api.timeline.RepairSubscriptionLifecycleDao;
import org.killbill.billing.subscription.engine.dao.MockSubscriptionDaoMemory;
import org.killbill.billing.subscription.engine.dao.RepairSubscriptionDao;
import org.killbill.billing.subscription.engine.dao.SubscriptionDao;
+import org.mockito.Mockito;
import com.google.inject.name.Names;
@@ -46,6 +48,8 @@ public class TestDefaultSubscriptionModuleNoDB extends TestDefaultSubscriptionMo
protected void configure() {
install(new GuicyKillbillTestNoDBModule(configSource));
+ bind(AccountUserApi.class).toInstance(Mockito.mock(AccountUserApi.class));
+
super.configure();
install(new MockNonEntityDaoModule(configSource));
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java b/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
index 51f0305..6d8cfa2 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -19,6 +19,7 @@
package org.killbill.billing.subscription.glue;
import org.killbill.billing.GuicyKillbillTestWithEmbeddedDBModule;
+import org.killbill.billing.account.glue.DefaultAccountModule;
import org.killbill.billing.platform.api.KillbillConfigSource;
import org.killbill.billing.subscription.api.timeline.RepairSubscriptionLifecycleDao;
import org.killbill.billing.subscription.engine.dao.MockSubscriptionDaoSql;
@@ -52,6 +53,8 @@ public class TestDefaultSubscriptionModuleWithEmbeddedDB extends TestDefaultSubs
install(new CustomFieldModule(configSource));
+ install(new DefaultAccountModule(configSource));
+
super.configure();
}
}
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestInitializer.java b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestInitializer.java
index 6feee72..ca1baec 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestInitializer.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestInitializer.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -18,6 +18,8 @@
package org.killbill.billing.subscription;
+import java.util.UUID;
+
import org.killbill.billing.account.api.AccountData;
import org.killbill.billing.api.TestApiListener;
import org.killbill.billing.callcontext.InternalCallContext;
@@ -36,12 +38,12 @@ public interface SubscriptionTestInitializer {
public AccountData initAccountData();
- public SubscriptionBaseBundle initBundle(final SubscriptionBaseInternalApi subscriptionApi, final InternalCallContext callContext) throws Exception;
+ public SubscriptionBaseBundle initBundle(final UUID accountId, final SubscriptionBaseInternalApi subscriptionApi, final InternalCallContext callContext) throws Exception;
- public void startTestFamework(final TestApiListener testListener,
- final ClockMock clock,
- final BusService busService,
- final SubscriptionBaseService subscriptionBaseService) throws Exception;
+ public void startTestFramework(final TestApiListener testListener,
+ final ClockMock clock,
+ final BusService busService,
+ final SubscriptionBaseService subscriptionBaseService) throws Exception;
public void stopTestFramework(final TestApiListener testListener,
final BusService busService,
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java
index 581397b..29f932f 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -18,6 +18,8 @@
package org.killbill.billing.subscription;
+import java.util.UUID;
+
import javax.inject.Inject;
import org.killbill.billing.GuicyKillbillTestSuiteNoDB;
@@ -25,6 +27,7 @@ import org.killbill.billing.account.api.AccountData;
import org.killbill.billing.api.TestApiListener;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogService;
+import org.killbill.billing.dao.MockNonEntityDao;
import org.killbill.billing.lifecycle.api.BusService;
import org.killbill.billing.platform.api.KillbillConfigSource;
import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
@@ -94,11 +97,13 @@ public class SubscriptionTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
@Inject
protected CacheControllerDispatcher cacheControllerDispatcher;
+ @Inject
+ protected MockNonEntityDao mockNonEntityDao;
+
protected Catalog catalog;
protected AccountData accountData;
protected SubscriptionBaseBundle bundle;
-
@Override
protected KillbillConfigSource getConfigSource() {
return getConfigSource("/subscription.properties");
@@ -119,11 +124,13 @@ public class SubscriptionTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
// CLEANUP ALL DB TABLES OR IN MEMORY STRUCTURES
((MockSubscriptionDaoMemory) dao).reset();
- subscriptionTestInitializer.startTestFamework(testListener, clock, busService, subscriptionBaseService);
+ subscriptionTestInitializer.startTestFramework(testListener, clock, busService, subscriptionBaseService);
this.catalog = subscriptionTestInitializer.initCatalog(catalogService, internalCallContext);
this.accountData = subscriptionTestInitializer.initAccountData();
- this.bundle = subscriptionTestInitializer.initBundle(subscriptionInternalApi, internalCallContext);
+ final UUID accountId = UUID.randomUUID();
+ mockNonEntityDao.addTenantRecordIdMapping(accountId, internalCallContext);
+ this.bundle = subscriptionTestInitializer.initBundle(accountId, subscriptionInternalApi, internalCallContext);
}
@AfterMethod(groups = "fast")
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
index 9539fc7..e335d8f 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -21,7 +21,9 @@ package org.killbill.billing.subscription;
import javax.inject.Inject;
import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountData;
+import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.api.TestApiListener;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogService;
@@ -55,6 +57,8 @@ public class SubscriptionTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteW
public static final Long DELAY = 10000L;
@Inject
+ protected AccountUserApi accountUserApi;
+ @Inject
protected SubscriptionBaseService subscriptionBaseService;
@Inject
protected SubscriptionBaseInternalApi subscriptionInternalApi;
@@ -103,11 +107,12 @@ public class SubscriptionTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteW
@BeforeMethod(groups = "slow")
public void beforeMethod() throws Exception {
super.beforeMethod();
- subscriptionTestInitializer.startTestFamework(testListener, clock, busService, subscriptionBaseService);
+ subscriptionTestInitializer.startTestFramework(testListener, clock, busService, subscriptionBaseService);
this.catalog = subscriptionTestInitializer.initCatalog(catalogService, internalCallContext);
this.accountData = subscriptionTestInitializer.initAccountData();
- this.bundle = subscriptionTestInitializer.initBundle(subscriptionInternalApi, internalCallContext);
+ final Account account = accountUserApi.createAccount(accountData, callContext);
+ this.bundle = subscriptionTestInitializer.initBundle(account.getId(), subscriptionInternalApi, internalCallContext);
// Make sure we start with a clean state
assertListenerStatus();
diff --git a/util/src/test/java/org/killbill/billing/dao/MockNonEntityDao.java b/util/src/test/java/org/killbill/billing/dao/MockNonEntityDao.java
index 997ee41..896240a 100644
--- a/util/src/test/java/org/killbill/billing/dao/MockNonEntityDao.java
+++ b/util/src/test/java/org/killbill/billing/dao/MockNonEntityDao.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -16,11 +18,14 @@
package org.killbill.billing.dao;
+import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
import javax.annotation.Nullable;
import org.killbill.billing.ObjectType;
+import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.util.cache.CacheController;
import org.killbill.billing.util.dao.NonEntityDao;
import org.killbill.billing.util.dao.NonEntitySqlDao;
@@ -28,6 +33,12 @@ import org.killbill.billing.util.dao.TableName;
public class MockNonEntityDao implements NonEntityDao {
+ private final Map<UUID, Long> tenantRecordIdMappings = new HashMap<UUID, Long>();
+
+ public void addTenantRecordIdMapping(final UUID objectId, final InternalTenantContext context) {
+ tenantRecordIdMappings.put(objectId, context.getTenantRecordId());
+ }
+
@Override
public Long retrieveRecordIdFromObject(final UUID objectId, final ObjectType objectType, @Nullable final CacheController<Object, Object> cache) {
return null;
@@ -40,7 +51,7 @@ public class MockNonEntityDao implements NonEntityDao {
@Override
public Long retrieveTenantRecordIdFromObject(final UUID objectId, final ObjectType objectType, @Nullable final CacheController<Object, Object> cache) {
- return null;
+ return tenantRecordIdMappings.get(objectId);
}
@Override
diff --git a/util/src/test/java/org/killbill/billing/mock/glue/MockNonEntityDaoModule.java b/util/src/test/java/org/killbill/billing/mock/glue/MockNonEntityDaoModule.java
index 6616770..70d5c85 100644
--- a/util/src/test/java/org/killbill/billing/mock/glue/MockNonEntityDaoModule.java
+++ b/util/src/test/java/org/killbill/billing/mock/glue/MockNonEntityDaoModule.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -31,6 +31,7 @@ public class MockNonEntityDaoModule extends KillBillModule {
@Override
protected void configure() {
- bind(NonEntityDao.class).to(MockNonEntityDao.class);
+ bind(NonEntityDao.class).to(MockNonEntityDao.class).asEagerSingleton();
+ bind(MockNonEntityDao.class).asEagerSingleton();
}
}