killbill-aplcache

#256 : first commit implementing pending control tag type in

8/5/2016 12:11:30 PM

Details

diff --git a/overdue/src/main/java/org/killbill/billing/overdue/calculator/BillingStateCalculator.java b/overdue/src/main/java/org/killbill/billing/overdue/calculator/BillingStateCalculator.java
index 7d594fc..d1bec8d 100644
--- a/overdue/src/main/java/org/killbill/billing/overdue/calculator/BillingStateCalculator.java
+++ b/overdue/src/main/java/org/killbill/billing/overdue/calculator/BillingStateCalculator.java
@@ -19,6 +19,7 @@ package org.killbill.billing.overdue.calculator;
 import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.Comparator;
+import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.SortedSet;
 import java.util.TreeSet;
@@ -26,6 +27,7 @@ import java.util.UUID;
 
 import org.joda.time.DateTimeZone;
 import org.joda.time.LocalDate;
+import org.killbill.billing.ObjectType;
 import org.killbill.billing.account.api.ImmutableAccountData;
 import org.killbill.billing.callcontext.InternalTenantContext;
 import org.killbill.billing.invoice.api.Invoice;
@@ -33,6 +35,7 @@ import org.killbill.billing.invoice.api.InvoiceInternalApi;
 import org.killbill.billing.overdue.config.api.BillingState;
 import org.killbill.billing.overdue.config.api.OverdueException;
 import org.killbill.billing.payment.api.PaymentResponse;
+import org.killbill.billing.tag.TagInternalApi;
 import org.killbill.billing.util.tag.Tag;
 import org.killbill.clock.Clock;
 
@@ -41,6 +44,7 @@ import com.google.inject.Inject;
 public class BillingStateCalculator {
 
     private final InvoiceInternalApi invoiceApi;
+    private final TagInternalApi tagApi;
     private final Clock clock;
 
     protected class InvoiceDateComparator implements Comparator<Invoice> {
@@ -57,9 +61,10 @@ public class BillingStateCalculator {
     }
 
     @Inject
-    public BillingStateCalculator(final InvoiceInternalApi invoiceApi, final Clock clock) {
+    public BillingStateCalculator(final InvoiceInternalApi invoiceApi, final Clock clock, final TagInternalApi tagApi) {
         this.invoiceApi = invoiceApi;
         this.clock = clock;
+        this.tagApi = tagApi;
     }
 
     public BillingState calculateBillingState(final ImmutableAccountData account, final InternalTenantContext context) throws OverdueException {
@@ -75,7 +80,8 @@ public class BillingStateCalculator {
             idOfEarliestUnpaidInvoice = invoice.getId();
         }
         final PaymentResponse responseForLastFailedPayment = PaymentResponse.INSUFFICIENT_FUNDS; //TODO MDW
-        final Tag[] tags = new Tag[]{}; //TODO MDW
+        final List<Tag> accountTags = tagApi.getTags(account.getId(), ObjectType.ACCOUNT, context);
+        final Tag[] tags = accountTags.toArray(new Tag[accountTags.size()]);
 
         return new BillingState(account.getId(), numberOfUnpaidInvoices, unpaidInvoiceBalance, dateOfEarliestUnpaidInvoice, account.getTimeZone(), idOfEarliestUnpaidInvoice, responseForLastFailedPayment, tags);
     }
diff --git a/overdue/src/test/java/org/killbill/billing/overdue/calculator/TestBillingStateCalculator.java b/overdue/src/test/java/org/killbill/billing/overdue/calculator/TestBillingStateCalculator.java
index d8f7b9d..a5db764 100644
--- a/overdue/src/test/java/org/killbill/billing/overdue/calculator/TestBillingStateCalculator.java
+++ b/overdue/src/test/java/org/killbill/billing/overdue/calculator/TestBillingStateCalculator.java
@@ -60,7 +60,7 @@ public class TestBillingStateCalculator extends OverdueTestSuiteNoDB {
 
         Mockito.when(invoiceApi.getUnpaidInvoicesByAccountId(Mockito.<UUID>any(), Mockito.<LocalDate>any(), Mockito.<InternalTenantContext>any())).thenReturn(invoices);
 
-        return new BillingStateCalculator(invoiceApi, clock) {
+        return new BillingStateCalculator(invoiceApi, clock, tagInternalApi) {
             @Override
             public BillingState calculateBillingState(final ImmutableAccountData overdueable,
                                                       final InternalTenantContext context) {
diff --git a/overdue/src/test/java/org/killbill/billing/overdue/glue/TestOverdueModule.java b/overdue/src/test/java/org/killbill/billing/overdue/glue/TestOverdueModule.java
index 39ead21..8d603af 100644
--- a/overdue/src/test/java/org/killbill/billing/overdue/glue/TestOverdueModule.java
+++ b/overdue/src/test/java/org/killbill/billing/overdue/glue/TestOverdueModule.java
@@ -21,7 +21,6 @@ package org.killbill.billing.overdue.glue;
 import java.util.List;
 import java.util.UUID;
 
-import org.joda.time.DateTime;
 import org.killbill.billing.callcontext.InternalCallContext;
 import org.killbill.billing.callcontext.InternalTenantContext;
 import org.killbill.billing.entitlement.api.BlockingState;
@@ -49,8 +48,6 @@ import org.killbill.billing.util.glue.CallContextModule;
 import org.killbill.billing.util.glue.ConfigModule;
 import org.killbill.billing.util.glue.CustomFieldModule;
 import org.killbill.billing.util.glue.MemoryGlobalLockerModule;
-import org.killbill.clock.Clock;
-import org.killbill.clock.ClockMock;
 
 import com.google.inject.name.Names;
 
@@ -73,7 +70,7 @@ public class TestOverdueModule extends DefaultOverdueModule {
         install(new MockAccountModule(configSource));
         install(new MockEntitlementModule(configSource, new ApplicatorBlockingApi()));
         install(new MockInvoiceModule(configSource));
-        install(new MockTagModule(configSource));
+        install(new MockTagModule(configSource, true));
         install(new TemplateModule(configSource));
         install(new MockTenantModule(configSource));
         install(new MemoryGlobalLockerModule(configSource));
diff --git a/overdue/src/test/java/org/killbill/billing/overdue/OverdueTestSuiteNoDB.java b/overdue/src/test/java/org/killbill/billing/overdue/OverdueTestSuiteNoDB.java
index 0e1f5e5..d7d6462 100644
--- a/overdue/src/test/java/org/killbill/billing/overdue/OverdueTestSuiteNoDB.java
+++ b/overdue/src/test/java/org/killbill/billing/overdue/OverdueTestSuiteNoDB.java
@@ -37,6 +37,7 @@ import org.killbill.billing.overdue.notification.OverdueNotifier;
 import org.killbill.billing.overdue.notification.OverduePoster;
 import org.killbill.billing.overdue.service.DefaultOverdueService;
 import org.killbill.billing.overdue.wrapper.OverdueWrapperFactory;
+import org.killbill.billing.tag.TagInternalApi;
 import org.killbill.billing.tenant.api.TenantInternalApi;
 import org.killbill.billing.util.cache.CacheControllerDispatcher;
 import org.killbill.billing.util.callcontext.InternalCallContextFactory;
@@ -102,6 +103,8 @@ public abstract class OverdueTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
     protected OverdueCacheInvalidationCallback cacheInvalidationCallback;
     @Inject
     protected TenantInternalApi tenantInternalApi;
+    @Inject
+    protected TagInternalApi tagInternalApi;
 
     @BeforeClass(groups = "fast")
     protected void beforeClass() throws Exception {
diff --git a/overdue/src/test/java/org/killbill/billing/overdue/TestOverdueHelper.java b/overdue/src/test/java/org/killbill/billing/overdue/TestOverdueHelper.java
index 3f09ee6..ac380e7 100644
--- a/overdue/src/test/java/org/killbill/billing/overdue/TestOverdueHelper.java
+++ b/overdue/src/test/java/org/killbill/billing/overdue/TestOverdueHelper.java
@@ -25,22 +25,24 @@ import java.util.UUID;
 
 import org.joda.time.DateTimeZone;
 import org.joda.time.LocalDate;
+import org.killbill.billing.ObjectType;
+import org.killbill.billing.account.api.AccountApiException;
+import org.killbill.billing.account.api.AccountInternalApi;
 import org.killbill.billing.account.api.ImmutableAccountData;
+import org.killbill.billing.callcontext.InternalTenantContext;
+import org.killbill.billing.entitlement.api.BlockingState;
+import org.killbill.billing.invoice.api.Invoice;
+import org.killbill.billing.invoice.api.InvoiceInternalApi;
+import org.killbill.billing.invoice.api.InvoiceItem;
+import org.killbill.billing.junction.BlockingInternalApi;
 import org.killbill.billing.overdue.api.OverdueState;
 import org.killbill.billing.overdue.glue.TestOverdueModule.ApplicatorBlockingApi;
+import org.killbill.billing.subscription.api.user.SubscriptionBaseApiException;
+import org.killbill.billing.tag.TagInternalApi;
+import org.killbill.billing.util.tag.Tag;
 import org.mockito.Mockito;
 import org.testng.Assert;
 
-import org.killbill.billing.account.api.AccountApiException;
-import org.killbill.billing.invoice.api.Invoice;
-import org.killbill.billing.invoice.api.InvoiceItem;
-import org.killbill.billing.entitlement.api.BlockingState;
-import org.killbill.billing.subscription.api.user.SubscriptionBaseApiException;
-import org.killbill.billing.callcontext.InternalTenantContext;
-import org.killbill.billing.account.api.AccountInternalApi;
-import org.killbill.billing.invoice.api.InvoiceInternalApi;
-import org.killbill.billing.junction.BlockingInternalApi;
-
 import com.google.inject.Inject;
 
 public class TestOverdueHelper {
@@ -79,6 +81,7 @@ public class TestOverdueHelper {
             "               <timeSinceEarliestUnpaidInvoiceEqualsOrExceeds>" +
             "                   <unit>DAYS</unit><number>30</number>" +
             "               </timeSinceEarliestUnpaidInvoiceEqualsOrExceeds>" +
+            "               <controlTag>TEST</controlTag>" +
             "           </condition>" +
             "           <externalMessage>Reached OD1</externalMessage>" +
             "           <blockChanges>true</blockChanges>" +
@@ -93,14 +96,17 @@ public class TestOverdueHelper {
     private final AccountInternalApi accountInternalApi;
     private final InvoiceInternalApi invoiceInternalApi;
     private final BlockingInternalApi blockingInternalApi;
+    private final TagInternalApi tagInternalApi;
 
     @Inject
     public TestOverdueHelper(final AccountInternalApi accountInternalApi,
                              final InvoiceInternalApi invoiceInternalApi,
-                             final BlockingInternalApi blockingInternalApi) {
+                             final BlockingInternalApi blockingInternalApi,
+                             final TagInternalApi tagInternalApi) {
         this.accountInternalApi = accountInternalApi;
         this.invoiceInternalApi = invoiceInternalApi;
         this.blockingInternalApi = blockingInternalApi;
+        this.tagInternalApi = tagInternalApi;
     }
 
     public void checkStateApplied(final OverdueState state) {
@@ -138,6 +144,15 @@ public class TestOverdueHelper {
         invoices.add(invoice);
         Mockito.when(invoiceInternalApi.getUnpaidInvoicesByAccountId(Mockito.<UUID>any(), Mockito.<LocalDate>any(), Mockito.<InternalTenantContext>any())).thenReturn(invoices);
 
+        final Tag tag = Mockito.mock(Tag.class);
+        Mockito.when(tag.getObjectId()).thenReturn(accountId);
+        Mockito.when(tag.getObjectType()).thenReturn(ObjectType.ACCOUNT);
+        Mockito.when(tag.getTagDefinitionId()).thenReturn(new UUID(0, 6));
+        final List<Tag> tags = new ArrayList<Tag>();
+        tags.add(tag);
+        Mockito.when(tagInternalApi.getTags(Mockito.eq(account.getId()), Mockito.eq(ObjectType.ACCOUNT), Mockito.<InternalTenantContext>any()))
+               .thenReturn(tags);
+
         return account;
     }
 
diff --git a/util/src/test/java/org/killbill/billing/mock/glue/MockTagModule.java b/util/src/test/java/org/killbill/billing/mock/glue/MockTagModule.java
index 6f77943..7c3e1a5 100644
--- a/util/src/test/java/org/killbill/billing/mock/glue/MockTagModule.java
+++ b/util/src/test/java/org/killbill/billing/mock/glue/MockTagModule.java
@@ -19,16 +19,27 @@
 package org.killbill.billing.mock.glue;
 
 import org.killbill.billing.platform.api.KillbillConfigSource;
+import org.killbill.billing.tag.TagInternalApi;
 import org.killbill.billing.util.glue.TagStoreModule;
+import org.killbill.billing.util.tag.DefaultTagInternalApi;
 import org.killbill.billing.util.tag.dao.MockTagDao;
 import org.killbill.billing.util.tag.dao.MockTagDefinitionDao;
 import org.killbill.billing.util.tag.dao.TagDao;
 import org.killbill.billing.util.tag.dao.TagDefinitionDao;
+import org.mockito.Mockito;
 
 public class MockTagModule extends TagStoreModule {
 
+    private final boolean mockInternalApi;
+
     public MockTagModule(final KillbillConfigSource configSource) {
         super(configSource);
+        this.mockInternalApi = false;
+    }
+
+    public MockTagModule(final KillbillConfigSource configSource, final boolean mockInternalApi) {
+        super(configSource);
+        this.mockInternalApi = mockInternalApi;
     }
 
     @Override
@@ -36,4 +47,13 @@ public class MockTagModule extends TagStoreModule {
         bind(TagDefinitionDao.class).to(MockTagDefinitionDao.class).asEagerSingleton();
         bind(TagDao.class).to(MockTagDao.class).asEagerSingleton();
     }
+
+    @Override
+    public void installInternalApi() {
+        if (mockInternalApi) {
+            bind(TagInternalApi.class).toInstance(Mockito.mock(TagInternalApi.class));
+        } else {
+            bind(TagInternalApi.class).to(DefaultTagInternalApi.class).asEagerSingleton();
+        }
+    }
 }