killbill-memoizeit
Changes
invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java 41(+7 -34)
invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java 4(+2 -2)
Details
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModuleMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModuleMemory.java
index 7836eca..aa0d174 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModuleMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModuleMemory.java
@@ -25,6 +25,7 @@ import org.skife.config.ConfigurationObjectFactory;
import org.skife.jdbi.v2.IDBI;
import com.ning.billing.GuicyKillbillTestModule;
+import com.ning.billing.GuicyKillbillTestNoDBModule;
import com.ning.billing.ObjectType;
import com.ning.billing.api.TestListenerStatus;
import com.ning.billing.entitlement.api.timeline.RepairEntitlementLifecycleDao;
@@ -62,16 +63,10 @@ public class MockEngineModuleMemory extends MockEngineModule {
bind(NotificationQueueConfig.class).toInstance(config);
}
- protected void installDBI() {
- final IDBI idbi = Mockito.mock(IDBI.class);
- bind(IDBI.class).toInstance(idbi);
- }
-
@Override
protected void configure() {
- installDBI();
- install(new GuicyKillbillTestModule());
+ install(new GuicyKillbillTestNoDBModule());
super.configure();
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
index 30512d3..c104f04 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
@@ -460,7 +460,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
}
@VisibleForTesting
- BigDecimal computePositiveRefundAmount(final InvoicePaymentModelDao payment, final BigDecimal requestedAmount, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts) throws InvoiceApiException {
+ static BigDecimal computePositiveRefundAmount(final InvoicePaymentModelDao payment, final BigDecimal requestedAmount, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts) throws InvoiceApiException {
final BigDecimal maxRefundAmount = payment.getAmount() == null ? BigDecimal.ZERO : payment.getAmount();
final BigDecimal requestedPositiveAmount = requestedAmount == null ? maxRefundAmount : requestedAmount;
// This check is good but not enough, we need to also take into account previous refunds
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
index 6cfe4cb..7d9c2f9 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
@@ -63,33 +63,6 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
private static final BigDecimal THIRTY = new BigDecimal("30.00");
private static final Currency CURRENCY = Currency.EUR;
- private final Clock clock = new ClockMock();
- private final CacheControllerDispatcher controllerDispatcher = new CacheControllerDispatcher();
-
- private InvoiceSqlDao invoiceSqlDao;
- private InvoiceItemSqlDao invoiceItemSqlDao;
- private InvoicePaymentApi invoicePaymentApi;
- private InvoiceInternalApi invoiceInternalApi;
- private InternalCallContextFactory internalCallContextFactory;
-
- @BeforeSuite(groups = "slow")
- public void setup() throws IOException {
- final IDBI dbi = getDBI();
-
- invoiceSqlDao = dbi.onDemand(InvoiceSqlDao.class);
- invoiceSqlDao.test(internalCallContext);
-
- invoiceItemSqlDao = dbi.onDemand(InvoiceItemSqlDao.class);
- invoiceItemSqlDao.test(internalCallContext);
-
- final NonEntityDao nonEntityDao = new DefaultNonEntityDao(dbi);
- final NextBillingDatePoster nextBillingDatePoster = new MockNextBillingDatePoster();
- internalCallContextFactory = new InternalCallContextFactory(clock, nonEntityDao, controllerDispatcher);
- final InvoiceDao invoiceDao = new DefaultInvoiceDao(dbi, nextBillingDatePoster, Mockito.mock(InternalBus.class), clock, controllerDispatcher, nonEntityDao);
- invoicePaymentApi = new DefaultInvoicePaymentApi(invoiceDao, internalCallContextFactory);
- invoiceInternalApi = new DefaultInvoiceInternalApi(invoiceDao);
- }
-
@Test(groups = "slow")
public void testFullRefundWithNoAdjustment() throws Exception {
verifyRefund(THIRTY, THIRTY, THIRTY, false, ImmutableMap.<UUID, BigDecimal>of());
@@ -113,8 +86,8 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
@Test(groups = "slow")
public void testFullRefundWithBothInvoiceItemAdjustments() throws Exception {
// Create an invoice with two items (30 \u20ac and 10 \u20ac)
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock,
- ImmutableList.<BigDecimal>of(THIRTY, BigDecimal.TEN), CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock,
+ ImmutableList.<BigDecimal>of(THIRTY, BigDecimal.TEN), CURRENCY, internalCallContext);
// Fully adjust both items
final Map<UUID, BigDecimal> adjustments = new HashMap<UUID, BigDecimal>();
@@ -127,8 +100,8 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
@Test(groups = "slow")
public void testPartialRefundWithSingleInvoiceItemAdjustment() throws Exception {
// Create an invoice with two items (30 \u20ac and 10 \u20ac)
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock,
- ImmutableList.<BigDecimal>of(THIRTY, BigDecimal.TEN), CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock,
+ ImmutableList.<BigDecimal>of(THIRTY, BigDecimal.TEN), CURRENCY, internalCallContext);
// Fully adjust both items
final Map<UUID, BigDecimal> adjustments = new HashMap<UUID, BigDecimal>();
@@ -140,8 +113,8 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
@Test(groups = "slow")
public void testPartialRefundWithTwoInvoiceItemAdjustment() throws Exception {
// Create an invoice with two items (30 \u20ac and 10 \u20ac)
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock,
- ImmutableList.<BigDecimal>of(THIRTY, BigDecimal.TEN), CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock,
+ ImmutableList.<BigDecimal>of(THIRTY, BigDecimal.TEN), CURRENCY, internalCallContext);
// Adjust partially both items: the invoice posted was 40 \u20ac, but we should really just have charged you 2 \u20ac
final ImmutableMap<UUID, BigDecimal> adjustments = ImmutableMap.<UUID, BigDecimal>of(invoice.getInvoiceItems().get(0).getId(), new BigDecimal("29"),
invoice.getInvoiceItems().get(1).getId(), new BigDecimal("9"));
@@ -150,7 +123,7 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
private void verifyRefund(final BigDecimal invoiceAmount, final BigDecimal refundAmount, final BigDecimal finalInvoiceAmount,
final boolean adjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts) throws InvoiceApiException {
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, invoiceAmount, CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, invoiceAmount, CURRENCY, internalCallContext);
verifyRefund(invoice, invoiceAmount, refundAmount, finalInvoiceAmount, adjusted, invoiceItemIdsWithAmounts);
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/user/TestEventJson.java b/invoice/src/test/java/com/ning/billing/invoice/api/user/TestEventJson.java
index 240fb0a..5be52fc 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/user/TestEventJson.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/user/TestEventJson.java
@@ -24,12 +24,12 @@ import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.InvoiceTestSuite;
+import com.ning.billing.invoice.InvoiceTestSuiteNoDB;
import com.ning.billing.util.events.InvoiceCreationInternalEvent;
import com.ning.billing.util.events.NullInvoiceInternalEvent;
import com.ning.billing.util.jackson.ObjectMapper;
-public class TestEventJson extends InvoiceTestSuite {
+public class TestEventJson extends InvoiceTestSuiteNoDB {
private static final ObjectMapper mapper = new ObjectMapper();
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
index 16b0c48..e6ad194 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
@@ -31,7 +31,7 @@ import org.testng.annotations.Test;
import com.ning.billing.ErrorCode;
import com.ning.billing.dao.MockNonEntityDao;
-import com.ning.billing.invoice.InvoiceTestSuite;
+import com.ning.billing.invoice.InvoiceTestSuiteNoDB;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.notification.NextBillingDatePoster;
@@ -42,35 +42,7 @@ import com.ning.billing.util.svcsapi.bus.InternalBus;
import com.google.common.collect.ImmutableMap;
-public class TestDefaultInvoiceDao extends InvoiceTestSuite {
-
- private InvoiceSqlDao invoiceSqlDao;
- private DefaultInvoiceDao dao;
- private final CacheControllerDispatcher controllerDispatcher = new CacheControllerDispatcher();
-
-
- @BeforeMethod(groups = "fast")
- public void setUp() throws Exception {
- final IDBI idbi = Mockito.mock(IDBI.class);
- invoiceSqlDao = Mockito.mock(InvoiceSqlDao.class);
- Mockito.when(idbi.onDemand(InvoiceSqlDao.class)).thenReturn(invoiceSqlDao);
- Mockito.when(invoiceSqlDao.getById(Mockito.anyString(), Mockito.<InternalTenantContext>any())).thenReturn(Mockito.mock(InvoiceModelDao.class));
- Mockito.when(invoiceSqlDao.inTransaction(Mockito.<Transaction<Void, EntitySqlDao<InvoiceModelDao, Invoice>>>any())).thenAnswer(new Answer() {
- @Override
- public Object answer(final InvocationOnMock invocation) {
- final Object[] args = invocation.getArguments();
- try {
- ((Transaction<Void, InvoiceSqlDao>) args[0]).inTransaction(invoiceSqlDao, null);
- } catch (Exception e) {
- Assert.fail(e.toString());
- }
- return null;
- }
- });
-
- final NextBillingDatePoster poster = Mockito.mock(NextBillingDatePoster.class);
- dao = new DefaultInvoiceDao(idbi, poster, Mockito.mock(InternalBus.class), clock, controllerDispatcher, new MockNonEntityDao());
- }
+public class TestDefaultInvoiceDao extends InvoiceTestSuiteNoDB {
@Test(groups = "fast")
public void testComputePositiveRefundAmount() throws Exception {
@@ -105,7 +77,7 @@ public class TestDefaultInvoiceDao extends InvoiceTestSuite {
final InvoicePaymentModelDao invoicePayment = Mockito.mock(InvoicePaymentModelDao.class);
Mockito.when(invoicePayment.getAmount()).thenReturn(paymentAmount);
- final BigDecimal actualRefundAmount = dao.computePositiveRefundAmount(invoicePayment, requestedAmount, invoiceItemIdsWithAmounts);
+ final BigDecimal actualRefundAmount = DefaultInvoiceDao.computePositiveRefundAmount(invoicePayment, requestedAmount, invoiceItemIdsWithAmounts);
Assert.assertEquals(actualRefundAmount, expectedRefundAmount);
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModule.java b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModule.java
new file mode 100644
index 0000000..dc73fed
--- /dev/null
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModule.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning 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:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.invoice.glue;
+
+import org.mockito.Mockito;
+
+import com.ning.billing.GuicyKillbillTestWithEmbeddedDBModule;
+import com.ning.billing.catalog.glue.CatalogModule;
+import com.ning.billing.mock.glue.MockGlobalLockerModule;
+import com.ning.billing.util.email.EmailModule;
+import com.ning.billing.util.email.templates.TemplateModule;
+import com.ning.billing.util.glue.CacheModule;
+import com.ning.billing.util.glue.CallContextModule;
+import com.ning.billing.util.glue.CustomFieldModule;
+import com.ning.billing.util.glue.NonEntityDaoModule;
+import com.ning.billing.util.glue.NotificationQueueModule;
+import com.ning.billing.util.glue.TagStoreModule;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
+import com.ning.billing.util.svcapi.junction.BillingInternalApi;
+
+public class TestInvoiceModule extends DefaultInvoiceModule {
+
+
+
+ private void installExternalApis() {
+ bind(EntitlementInternalApi.class).toInstance(Mockito.mock(EntitlementInternalApi.class));
+ bind(AccountInternalApi.class).toInstance(Mockito.mock(AccountInternalApi.class));
+ bind(BillingInternalApi.class).toInstance(Mockito.mock(BillingInternalApi.class));
+ }
+
+ @Override
+ protected void configure() {
+ super.configure();
+
+ install(new MockGlobalLockerModule());
+
+ install(new CatalogModule());
+ install(new CacheModule());
+ install(new TemplateModule());
+ install(new EmailModule());
+
+ install(new NotificationQueueModule());
+ install(new TagStoreModule());
+ install(new CustomFieldModule());
+
+ installExternalApis();
+
+ }
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleNoDB.java b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleNoDB.java
new file mode 100644
index 0000000..14d2139
--- /dev/null
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleNoDB.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning 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:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.invoice.glue;
+
+import com.ning.billing.GuicyKillbillTestNoDBModule;
+import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.invoice.dao.MockInvoiceDao;
+import com.ning.billing.mock.glue.MockNonEntityDaoModule;
+import com.ning.billing.util.bus.InMemoryBusModule;
+
+public class TestInvoiceModuleNoDB extends TestInvoiceModule {
+
+ protected void installInvoiceDao() {
+ bind(InvoiceDao.class).to(MockInvoiceDao.class);
+ }
+
+ @Override
+ public void configure() {
+ super.configure();
+ install(new GuicyKillbillTestNoDBModule());
+ install(new MockNonEntityDaoModule());
+ install(new InMemoryBusModule());
+ }
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteNoDB.java b/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteNoDB.java
new file mode 100644
index 0000000..8c7dd0a
--- /dev/null
+++ b/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteNoDB.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning 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:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.invoice;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+import com.ning.billing.KillbillTestSuite;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.InvoiceMigrationApi;
+import com.ning.billing.invoice.api.InvoicePaymentApi;
+import com.ning.billing.invoice.api.InvoiceUserApi;
+import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.invoice.generator.InvoiceGenerator;
+import com.ning.billing.invoice.glue.InvoiceModuleWithEmbeddedDb;
+import com.ning.billing.invoice.glue.TestInvoiceModuleNoDB;
+import com.ning.billing.util.api.TagUserApi;
+import com.ning.billing.util.cache.CacheControllerDispatcher;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.globallocker.GlobalLocker;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
+import com.ning.billing.util.svcapi.junction.BillingInternalApi;
+import com.ning.billing.util.svcsapi.bus.BusService;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+import static org.testng.Assert.assertNotNull;
+
+public abstract class InvoiceTestSuiteNoDB extends KillbillTestSuite {
+
+ private static final Logger log = LoggerFactory.getLogger(InvoiceTestSuiteNoDB.class);
+
+
+ protected static final Currency accountCurrency = Currency.USD;
+
+ @Inject
+ protected InternalBus bus;
+ @Inject
+ protected CacheControllerDispatcher controllerDispatcher;
+ @Inject
+ protected InvoiceUserApi invoiceUserApi;
+ @Inject
+ protected InvoicePaymentApi invoicePaymentApi;
+ @Inject
+ protected InvoiceMigrationApi migrationApi;
+ @Inject
+ protected InvoiceGenerator generator;
+ @Inject
+ protected BillingInternalApi billingApi;
+ @Inject
+ protected AccountInternalApi accountApi;
+ @Inject
+ protected EntitlementInternalApi entitlementApi;
+ @Inject
+ protected BusService busService;
+ @Inject
+ protected TagUserApi tagUserApi;
+ @Inject
+ protected GlobalLocker locker;
+ @Inject
+ protected Clock clock;
+ @Inject
+ protected InternalCallContextFactory internalCallContextFactory;
+ @Inject
+ protected InvoiceInternalApi invoiceInternalApi;
+ @Inject
+ protected InvoiceDao invoiceDao;
+
+
+ @BeforeClass(groups = "fast")
+ protected void setup() throws Exception {
+
+ loadSystemPropertiesFromClasspath("/resource.properties");
+
+ final Injector injector = Guice.createInjector(new TestInvoiceModuleNoDB());
+ injector.injectMembers(this);
+ }
+
+ @BeforeMethod(groups = "fast")
+ public void setupTest() {
+ bus.start();
+ }
+
+ @AfterMethod(groups = "fast")
+ public void cleanupTest() {
+ bus.stop();
+ }
+
+ private static void loadSystemPropertiesFromClasspath(final String resource) {
+ final URL url = InvoiceModuleWithEmbeddedDb.class.getResource(resource);
+ assertNotNull(url);
+ try {
+ System.getProperties().load(url.openStream());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java b/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
index de4234f..683267b 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
@@ -16,7 +16,114 @@
package com.ning.billing.invoice;
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
+import java.io.IOException;
+import java.net.URL;
+
+import org.skife.jdbi.v2.IDBI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+import com.ning.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.InvoiceMigrationApi;
+import com.ning.billing.invoice.api.InvoicePaymentApi;
+import com.ning.billing.invoice.api.InvoiceUserApi;
+import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.invoice.dao.InvoiceItemSqlDao;
+import com.ning.billing.invoice.dao.InvoicePaymentSqlDao;
+import com.ning.billing.invoice.dao.InvoiceSqlDao;
+import com.ning.billing.invoice.generator.InvoiceGenerator;
+import com.ning.billing.invoice.glue.InvoiceModuleWithEmbeddedDb;
+import com.ning.billing.invoice.glue.TestInvoiceModuleWithEmbeddedDb;
+import com.ning.billing.util.api.TagUserApi;
+import com.ning.billing.util.cache.CacheControllerDispatcher;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.globallocker.GlobalLocker;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
+import com.ning.billing.util.svcapi.junction.BillingInternalApi;
+import com.ning.billing.util.svcsapi.bus.BusService;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+import static org.testng.Assert.assertNotNull;
+
+public abstract class InvoiceTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
+
+ private static final Logger log = LoggerFactory.getLogger(InvoiceTestSuiteWithEmbeddedDB.class);
+
+
+ protected static final Currency accountCurrency = Currency.USD;
+
+ @Inject
+ protected InternalBus bus;
+ @Inject
+ protected CacheControllerDispatcher controllerDispatcher;
+ @Inject
+ protected InvoiceUserApi invoiceUserApi;
+ @Inject
+ protected InvoicePaymentApi invoicePaymentApi;
+ @Inject
+ protected InvoiceMigrationApi migrationApi;
+ @Inject
+ protected InvoiceGenerator generator;
+ @Inject
+ protected BillingInternalApi billingApi;
+ @Inject
+ protected AccountInternalApi accountApi;
+ @Inject
+ protected EntitlementInternalApi entitlementApi;
+ @Inject
+ protected BusService busService;
+ @Inject
+ protected InvoiceDao invoiceDao;
+ @Inject
+ protected TagUserApi tagUserApi;
+ @Inject
+ protected GlobalLocker locker;
+ @Inject
+ protected Clock clock;
+ @Inject
+ protected InternalCallContextFactory internalCallContextFactory;
+ @Inject
+ protected InvoiceInternalApi invoiceInternalApi;
+
+
+ @BeforeClass(groups = "slow")
+ protected void setup() throws Exception {
+
+ loadSystemPropertiesFromClasspath("/resource.properties");
+
+ final Injector injector = Guice.createInjector(new TestInvoiceModuleWithEmbeddedDb());
+ injector.injectMembers(this);
+ }
+
+ @BeforeMethod(groups = "slow")
+ public void setupTest() {
+ bus.start();
+ }
+
+ @AfterMethod(groups = "slow")
+ public void cleanupTest() {
+ bus.stop();
+ }
+
+ private static void loadSystemPropertiesFromClasspath(final String resource) {
+ final URL url = InvoiceModuleWithEmbeddedDb.class.getResource(resource);
+ assertNotNull(url);
+ try {
+ System.getProperties().load(url.openStream());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
-public abstract class InvoiceTestSuiteWithEmbeddedDB extends KillbillTestSuiteWithEmbeddedDB {
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java b/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
index b1a6db5..1c6726c 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
@@ -30,7 +30,7 @@ import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.InvoiceTestSuite;
+import com.ning.billing.invoice.InvoiceTestSuiteNoDB;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceItemType;
@@ -44,7 +44,7 @@ import com.ning.billing.invoice.model.RepairAdjInvoiceItem;
import com.ning.billing.util.email.templates.MustacheTemplateEngine;
import com.ning.billing.util.template.translation.TranslatorConfig;
-public class TestDefaultInvoiceFormatter extends InvoiceTestSuite {
+public class TestDefaultInvoiceFormatter extends InvoiceTestSuiteNoDB {
private TranslatorConfig config;
private MustacheTemplateEngine templateEngine;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java b/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java
index e91f9be..9c14d71 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java
@@ -30,7 +30,7 @@ import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.InvoiceTestSuite;
+import com.ning.billing.invoice.InvoiceTestSuiteNoDB;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.invoice.model.RecurringInvoiceItem;
@@ -38,7 +38,7 @@ import com.ning.billing.util.LocaleUtils;
import com.ning.billing.util.email.templates.MustacheTemplateEngine;
import com.ning.billing.util.template.translation.TranslatorConfig;
-public class TestDefaultInvoiceItemFormatter extends InvoiceTestSuite {
+public class TestDefaultInvoiceItemFormatter extends InvoiceTestSuiteNoDB {
private TranslatorConfig config;
private MustacheTemplateEngine templateEngine;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java b/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
index bcd4ea7..ce08611 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
@@ -41,7 +41,7 @@ import com.ning.billing.util.email.templates.MustacheTemplateEngine;
import com.ning.billing.util.email.templates.TemplateEngine;
import com.ning.billing.util.template.translation.TranslatorConfig;
-public class TestHtmlInvoiceGenerator extends InvoiceTestSuite {
+public class TestHtmlInvoiceGenerator extends InvoiceTestSuiteNoDB {
private HtmlInvoiceGenerator g;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/InvoiceTestUtils.java b/invoice/src/test/java/com/ning/billing/invoice/tests/InvoiceTestUtils.java
index b7bc6cb..8d7cdaf 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/InvoiceTestUtils.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/InvoiceTestUtils.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
+import org.joda.time.DateTime;
import org.mockito.Mockito;
import org.testng.Assert;
@@ -30,9 +31,11 @@ import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.api.InvoicePayment.InvoicePaymentType;
+import com.ning.billing.invoice.dao.InvoiceDao;
import com.ning.billing.invoice.dao.InvoiceItemModelDao;
import com.ning.billing.invoice.dao.InvoiceItemSqlDao;
import com.ning.billing.invoice.dao.InvoiceModelDao;
+import com.ning.billing.invoice.dao.InvoicePaymentModelDao;
import com.ning.billing.invoice.dao.InvoiceSqlDao;
import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.util.callcontext.CallContext;
@@ -43,34 +46,31 @@ import com.ning.billing.util.entity.EntityPersistenceException;
import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
public class InvoiceTestUtils {
private InvoiceTestUtils() {}
- public static Invoice createAndPersistInvoice(final InvoiceSqlDao invoiceSqlDao,
- final InvoiceItemSqlDao invoiceItemSqlDao,
+ public static Invoice createAndPersistInvoice(final InvoiceDao invoiceDao,
final Clock clock,
final BigDecimal amount,
final Currency currency,
- final CallContext callContext,
- final InternalCallContextFactory internalCallContextFactory) {
+ final InternalCallContext internalCallContext) {
try {
- return createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, ImmutableList.<BigDecimal>of(amount),
- currency, callContext, internalCallContextFactory);
+ return createAndPersistInvoice(invoiceDao, clock, ImmutableList.<BigDecimal>of(amount),
+ currency, internalCallContext);
} catch (EntityPersistenceException e) {
Assert.fail(e.getMessage());
return null;
}
}
- public static Invoice createAndPersistInvoice(final InvoiceSqlDao invoiceSqlDao,
- final InvoiceItemSqlDao invoiceItemSqlDao,
+ public static Invoice createAndPersistInvoice(final InvoiceDao invoiceDao,
final Clock clock,
final List<BigDecimal> amounts,
final Currency currency,
- final CallContext callContext,
- final InternalCallContextFactory internalCallContextFactory) throws EntityPersistenceException {
+ final InternalCallContext internalCallContext) throws EntityPersistenceException {
final Invoice invoice = Mockito.mock(Invoice.class);
final UUID invoiceId = UUID.randomUUID();
final UUID accountId = UUID.randomUUID();
@@ -83,18 +83,15 @@ public class InvoiceTestUtils {
Mockito.when(invoice.isMigrationInvoice()).thenReturn(false);
final List<InvoiceItem> invoiceItems = new ArrayList<InvoiceItem>();
+ final List<InvoiceItemModelDao> invoiceModelItems = new ArrayList<InvoiceItemModelDao>();
for (final BigDecimal amount : amounts) {
final InvoiceItem invoiceItem = createInvoiceItem(clock, invoiceId, accountId, amount, currency);
- invoiceItemSqlDao.create(new InvoiceItemModelDao(invoiceItem), internalCallContextFactory.createInternalCallContext(accountId, callContext));
+ invoiceModelItems.add(new InvoiceItemModelDao(invoiceItem));
invoiceItems.add(invoiceItem);
}
Mockito.when(invoice.getInvoiceItems()).thenReturn(invoiceItems);
- try {
- invoiceSqlDao.create(new InvoiceModelDao(invoice), internalCallContextFactory.createInternalCallContext(accountId, callContext));
- } catch (EntityPersistenceException e) {
- Assert.fail(e.getMessage());
- }
+ invoiceDao.createInvoice(new InvoiceModelDao(invoice), invoiceModelItems, ImmutableList.<InvoicePaymentModelDao>of(), true, ImmutableMap.<UUID, DateTime>of(), internalCallContext);
return invoice;
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
index bd980a0..461a8d8 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
@@ -40,7 +40,6 @@ import com.ning.billing.invoice.api.svcs.DefaultInvoiceInternalApi;
import com.ning.billing.invoice.dao.DefaultInvoiceDao;
import com.ning.billing.invoice.dao.InvoiceDao;
import com.ning.billing.invoice.dao.InvoiceItemSqlDao;
-import com.ning.billing.invoice.dao.InvoiceSqlDao;
import com.ning.billing.invoice.glue.InvoiceModuleWithEmbeddedDb;
import com.ning.billing.invoice.notification.MockNextBillingDatePoster;
import com.ning.billing.invoice.notification.NextBillingDatePoster;
@@ -65,7 +64,6 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
private static final BigDecimal FIFTEEN = new BigDecimal("15.00");
private static final BigDecimal THIRTY = new BigDecimal("30.00");
private static final BigDecimal ONE_MILLION = new BigDecimal("1000000.00");
- private InvoiceSqlDao invoiceSqlDao;
private InvoiceItemSqlDao invoiceItemSqlDao;
private InvoicePaymentApi invoicePaymentApi;
private InvoiceInternalApi invoiceApi;
@@ -82,8 +80,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
final IDBI dbi = getDBI();
- invoiceSqlDao = dbi.onDemand(InvoiceSqlDao.class);
- invoiceSqlDao.test(internalCallContext);
+ invoiceDao.test(internalCallContext);
final NonEntityDao nonEntityDao = new DefaultNonEntityDao(dbi);
invoiceItemSqlDao = dbi.onDemand(InvoiceItemSqlDao.class);
@@ -107,7 +104,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testCompleteChargeBack() throws InvoiceApiException {
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
// create a full charge back
@@ -120,7 +117,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testPartialChargeBack() throws InvoiceApiException {
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
// create a partial charge back
@@ -134,7 +131,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow", expectedExceptions = InvoiceApiException.class)
public void testChargeBackLargerThanPaymentAmount() throws InvoiceApiException {
try {
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
// create a large charge back
@@ -148,7 +145,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow", expectedExceptions = InvoiceApiException.class)
public void testNegativeChargeBackAmount() throws InvoiceApiException {
try {
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
// create a partial charge back
@@ -160,7 +157,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetAccountIdFromPaymentIdHappyPath() throws InvoiceApiException {
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
final UUID accountId = invoicePaymentApi.getAccountIdFromInvoicePaymentId(payment.getId(), callContext);
assertEquals(accountId, invoice.getAccountId());
@@ -186,7 +183,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetChargeBacksByAccountIdHappyPath() throws InvoiceApiException {
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
// create a partial charge back
@@ -207,7 +204,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetChargeBacksByInvoicePaymentIdHappyPath() throws InvoiceApiException {
- final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
+ final Invoice invoice = createAndPersistInvoice(invoiceDao, clock, THIRTY, CURRENCY, internalCallContext);
final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
// create a partial charge back
diff --git a/util/src/test/java/com/ning/billing/GuicyKillbillTestNoDBModule.java b/util/src/test/java/com/ning/billing/GuicyKillbillTestNoDBModule.java
new file mode 100644
index 0000000..265f94e
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/GuicyKillbillTestNoDBModule.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning 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:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing;
+
+
+import org.mockito.Mockito;
+import org.skife.jdbi.v2.IDBI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ning.billing.dbi.DBTestingHelper;
+import com.ning.billing.dbi.H2TestingHelper;
+import com.ning.billing.dbi.MysqlTestingHelper;
+
+public class GuicyKillbillTestNoDBModule extends GuicyKillbillTestModule {
+
+ private final static Logger log = LoggerFactory.getLogger(GuicyKillbillTestNoDBModule.class);
+
+ private void installDBI() {
+ final IDBI idbi = Mockito.mock(IDBI.class);
+ bind(IDBI.class).toInstance(idbi);
+ }
+
+ @Override
+ protected void configure() {
+ super.configure();
+ installDBI();
+ }
+}