killbill-memoizeit

analytics: fix remaining tests Signed-off-by: Pierre-Alexandre

4/5/2013 7:14:10 PM

Details

diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/BusinessAccount.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/BusinessAccount.java
index bfa4a40..65686e9 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/BusinessAccount.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/BusinessAccount.java
@@ -43,6 +43,7 @@ public class BusinessAccount extends BusinessEntityBase {
     private final String phone;
     private final Boolean isMigrated;
     private final Boolean isNotifiedForInvoices;
+    private final DateTime updatedDate;
     private final BigDecimal balance;
     private final LocalDate lastInvoiceDate;
     private final DateTime lastPaymentDate;
@@ -73,6 +74,7 @@ public class BusinessAccount extends BusinessEntityBase {
         this.phone = businessAccountModelDao.getPhone();
         this.isMigrated = businessAccountModelDao.getMigrated();
         this.isNotifiedForInvoices = businessAccountModelDao.getNotifiedForInvoices();
+        this.updatedDate = businessAccountModelDao.getUpdatedDate();
         this.balance = businessAccountModelDao.getBalance();
         this.lastInvoiceDate = businessAccountModelDao.getLastInvoiceDate();
         this.lastPaymentDate = businessAccountModelDao.getLastPaymentDate();
@@ -147,6 +149,10 @@ public class BusinessAccount extends BusinessEntityBase {
         return isNotifiedForInvoices;
     }
 
+    public DateTime getUpdatedDate() {
+        return updatedDate;
+    }
+
     public BigDecimal getBalance() {
         return balance;
     }
@@ -184,6 +190,7 @@ public class BusinessAccount extends BusinessEntityBase {
         sb.append(", phone='").append(phone).append('\'');
         sb.append(", isMigrated=").append(isMigrated);
         sb.append(", isNotifiedForInvoices=").append(isNotifiedForInvoices);
+        sb.append(", updatedDate=").append(updatedDate);
         sb.append(", balance=").append(balance);
         sb.append(", lastInvoiceDate=").append(lastInvoiceDate);
         sb.append(", lastPaymentDate=").append(lastPaymentDate);
@@ -212,7 +219,7 @@ public class BusinessAccount extends BusinessEntityBase {
         if (address2 != null ? !address2.equals(that.address2) : that.address2 != null) {
             return false;
         }
-        if (balance != null ? !balance.equals(that.balance) : that.balance != null) {
+        if (balance != null ? balance.compareTo(that.balance) != 0 : that.balance != null) {
             return false;
         }
         if (billingCycleDayLocal != null ? !billingCycleDayLocal.equals(that.billingCycleDayLocal) : that.billingCycleDayLocal != null) {
@@ -269,6 +276,9 @@ public class BusinessAccount extends BusinessEntityBase {
         if (timeZone != null ? !timeZone.equals(that.timeZone) : that.timeZone != null) {
             return false;
         }
+        if (updatedDate != null ? !updatedDate.equals(that.updatedDate) : that.updatedDate != null) {
+            return false;
+        }
 
         return true;
     }
@@ -293,6 +303,7 @@ public class BusinessAccount extends BusinessEntityBase {
         result = 31 * result + (phone != null ? phone.hashCode() : 0);
         result = 31 * result + (isMigrated != null ? isMigrated.hashCode() : 0);
         result = 31 * result + (isNotifiedForInvoices != null ? isNotifiedForInvoices.hashCode() : 0);
+        result = 31 * result + (updatedDate != null ? updatedDate.hashCode() : 0);
         result = 31 * result + (balance != null ? balance.hashCode() : 0);
         result = 31 * result + (lastInvoiceDate != null ? lastInvoiceDate.hashCode() : 0);
         result = 31 * result + (lastPaymentDate != null ? lastPaymentDate.hashCode() : 0);
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java
index b211639..ac39ac7 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java
@@ -140,7 +140,11 @@ public class AnalyticsDao {
         final Long accountRecordId = getAccountRecordId(accountId, context);
         final Long tenantRecordId = getTenantRecordId(context);
 
-        final List<BusinessFieldModelDao> businessFieldModelDaos = sqlDao.getFieldsByAccountRecordId(accountRecordId, tenantRecordId, context);
+        final List<BusinessFieldModelDao> businessFieldModelDaos = new LinkedList<BusinessFieldModelDao>();
+        businessFieldModelDaos.addAll(sqlDao.getAccountFieldsByAccountRecordId(accountRecordId, tenantRecordId, context));
+        businessFieldModelDaos.addAll(sqlDao.getInvoiceFieldsByAccountRecordId(accountRecordId, tenantRecordId, context));
+        businessFieldModelDaos.addAll(sqlDao.getInvoicePaymentFieldsByAccountRecordId(accountRecordId, tenantRecordId, context));
+
         return Lists.transform(businessFieldModelDaos, new Function<BusinessFieldModelDao, BusinessField>() {
             @Override
             public BusinessField apply(final BusinessFieldModelDao input) {
@@ -153,7 +157,11 @@ public class AnalyticsDao {
         final Long accountRecordId = getAccountRecordId(accountId, context);
         final Long tenantRecordId = getTenantRecordId(context);
 
-        final List<BusinessTagModelDao> businessTagModelDaos = sqlDao.getTagsByAccountRecordId(accountRecordId, tenantRecordId, context);
+        final List<BusinessTagModelDao> businessTagModelDaos = new LinkedList<BusinessTagModelDao>();
+        businessTagModelDaos.addAll(sqlDao.getAccountTagsByAccountRecordId(accountRecordId, tenantRecordId, context));
+        businessTagModelDaos.addAll(sqlDao.getInvoiceTagsByAccountRecordId(accountRecordId, tenantRecordId, context));
+        businessTagModelDaos.addAll(sqlDao.getInvoicePaymentTagsByAccountRecordId(accountRecordId, tenantRecordId, context));
+
         return Lists.transform(businessTagModelDaos, new Function<BusinessTagModelDao, BusinessTag>() {
             @Override
             public BusinessTag apply(final BusinessTagModelDao input) {
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.java
index 72cf2f5..5ba5502 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.java
@@ -21,71 +21,98 @@ import java.util.List;
 import org.skife.jdbi.v2.sqlobject.Bind;
 import org.skife.jdbi.v2.sqlobject.SqlQuery;
 import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+import org.skife.jdbi.v2.sqlobject.customizers.Define;
 import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
 
 import com.ning.billing.commons.jdbi.binder.SmartBindBean;
+import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessAccountFieldModelDao;
 import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessAccountModelDao;
-import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessFieldModelDao;
+import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessAccountTagModelDao;
+import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceFieldModelDao;
 import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceItemBaseModelDao;
 import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceModelDao;
 import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoicePaymentBaseModelDao;
+import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoicePaymentFieldModelDao;
+import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoicePaymentTagModelDao;
+import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceTagModelDao;
 import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessModelDaoBase;
 import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessOverdueStatusModelDao;
 import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessSubscriptionTransitionModelDao;
-import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessTagModelDao;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
 
 public interface BusinessAnalyticsSqlDao extends Transactional<BusinessAnalyticsSqlDao> {
 
+    // Note: the CallContext and TenantContext are not bound for now since they are not used (and createdDate would conflict)
+
     @SqlUpdate
     public void create(final String tableName,
                        @SmartBindBean final BusinessModelDaoBase entity,
-                       @SmartBindBean final CallContext callContext);
+                       final CallContext callContext);
 
     @SqlUpdate
-    public void deleteByAccountRecordId(@Bind("tableName") final String tableName,
+    public void deleteByAccountRecordId(@Define("tableName") final String tableName,
                                         @Bind("accountRecordId") final Long accountRecordId,
                                         @Bind("tenantRecordId") final Long tenantRecordId,
-                                        @SmartBindBean final CallContext callContext);
+                                        final CallContext callContext);
 
     @SqlQuery
     public BusinessAccountModelDao getAccountByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
                                                                @Bind("tenantRecordId") final Long tenantRecordId,
-                                                               @SmartBindBean final TenantContext tenantContext);
+                                                               final TenantContext tenantContext);
 
     @SqlQuery
     public List<BusinessSubscriptionTransitionModelDao> getSubscriptionTransitionsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
                                                                                                     @Bind("tenantRecordId") final Long tenantRecordId,
-                                                                                                    @SmartBindBean final TenantContext tenantContext);
+                                                                                                    final TenantContext tenantContext);
 
     @SqlQuery
     public List<BusinessOverdueStatusModelDao> getOverdueStatusesByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
                                                                                    @Bind("tenantRecordId") final Long tenantRecordId,
-                                                                                   @SmartBindBean final TenantContext tenantContext);
+                                                                                   final TenantContext tenantContext);
 
     @SqlQuery
     public List<BusinessInvoiceModelDao> getInvoicesByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
                                                                       @Bind("tenantRecordId") final Long tenantRecordId,
-                                                                      @SmartBindBean final TenantContext tenantContext);
+                                                                      final TenantContext tenantContext);
 
     @SqlQuery
     public List<BusinessInvoiceItemBaseModelDao> getInvoiceItemsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
                                                                                   @Bind("tenantRecordId") final Long tenantRecordId,
-                                                                                  @SmartBindBean final TenantContext tenantContext);
+                                                                                  final TenantContext tenantContext);
 
     @SqlQuery
     public List<BusinessInvoicePaymentBaseModelDao> getInvoicePaymentsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
                                                                                         @Bind("tenantRecordId") final Long tenantRecordId,
-                                                                                        @SmartBindBean final TenantContext tenantContext);
+                                                                                        final TenantContext tenantContext);
+
+    @SqlQuery
+    public List<BusinessAccountFieldModelDao> getAccountFieldsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
+                                                                                @Bind("tenantRecordId") final Long tenantRecordId,
+                                                                                final TenantContext tenantContext);
+
+    @SqlQuery
+    public List<BusinessInvoiceFieldModelDao> getInvoiceFieldsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
+                                                                                @Bind("tenantRecordId") final Long tenantRecordId,
+                                                                                final TenantContext tenantContext);
+
+    @SqlQuery
+    public List<BusinessInvoicePaymentFieldModelDao> getInvoicePaymentFieldsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
+                                                                                              @Bind("tenantRecordId") final Long tenantRecordId,
+                                                                                              final TenantContext tenantContext);
+
+    @SqlQuery
+    public List<BusinessAccountTagModelDao> getAccountTagsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
+                                                                            @Bind("tenantRecordId") final Long tenantRecordId,
+                                                                            final TenantContext tenantContext);
 
     @SqlQuery
-    public List<BusinessFieldModelDao> getFieldsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
-                                                                  @Bind("tenantRecordId") final Long tenantRecordId,
-                                                                  @SmartBindBean final TenantContext tenantContext);
+    public List<BusinessInvoiceTagModelDao> getInvoiceTagsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
+                                                                            @Bind("tenantRecordId") final Long tenantRecordId,
+                                                                            final TenantContext tenantContext);
 
     @SqlQuery
-    public List<BusinessTagModelDao> getTagsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
-                                                              @Bind("tenantRecordId") final Long tenantRecordId,
-                                                              @SmartBindBean final TenantContext tenantContext);
+    public List<BusinessInvoicePaymentTagModelDao> getInvoicePaymentTagsByAccountRecordId(@Bind("accountRecordId") final Long accountRecordId,
+                                                                                          @Bind("tenantRecordId") final Long tenantRecordId,
+                                                                                          final TenantContext tenantContext);
 }
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
index 2a746d1..03f1cd6 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
@@ -50,6 +50,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
     private String phone;
     private Boolean migrated;
     private Boolean notifiedForInvoices;
+    private DateTime updatedDate;
     private BigDecimal balance;
     private LocalDate lastInvoiceDate;
     private DateTime lastPaymentDate;
@@ -74,6 +75,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
                                    final String phone,
                                    final Boolean isMigrated,
                                    final Boolean notifiedForInvoices,
+                                   final DateTime updatedDate,
                                    final BigDecimal balance,
                                    final LocalDate lastInvoiceDate,
                                    final DateTime lastPaymentDate,
@@ -113,6 +115,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         this.phone = phone;
         this.migrated = isMigrated;
         this.notifiedForInvoices = notifiedForInvoices;
+        this.updatedDate = updatedDate;
         this.balance = balance;
         this.lastInvoiceDate = lastInvoiceDate;
         this.lastPaymentDate = lastPaymentDate;
@@ -143,6 +146,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
              account.getPhone(),
              account.isMigrated(),
              account.isNotifiedForInvoices(),
+             account.getUpdatedDate(),
              balance,
              lastInvoice == null ? null : lastInvoice.getInvoiceDate(),
              lastPayment == null ? null : lastPayment.getEffectiveDate(),
@@ -231,6 +235,10 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         return notifiedForInvoices;
     }
 
+    public DateTime getUpdatedDate() {
+        return updatedDate;
+    }
+
     public BigDecimal getBalance() {
         return balance;
     }
@@ -268,6 +276,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         sb.append(", phone='").append(phone).append('\'');
         sb.append(", migrated=").append(migrated);
         sb.append(", notifiedForInvoices=").append(notifiedForInvoices);
+        sb.append(", updatedDate=").append(updatedDate);
         sb.append(", balance=").append(balance);
         sb.append(", lastInvoiceDate=").append(lastInvoiceDate);
         sb.append(", lastPaymentDate=").append(lastPaymentDate);
@@ -296,7 +305,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         if (address2 != null ? !address2.equals(that.address2) : that.address2 != null) {
             return false;
         }
-        if (balance != null ? !balance.equals(that.balance) : that.balance != null) {
+        if (balance != null ? balance.compareTo(that.balance) != 0 : that.balance != null) {
             return false;
         }
         if (billingCycleDayLocal != null ? !billingCycleDayLocal.equals(that.billingCycleDayLocal) : that.billingCycleDayLocal != null) {
@@ -320,12 +329,6 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         if (firstNameLength != null ? !firstNameLength.equals(that.firstNameLength) : that.firstNameLength != null) {
             return false;
         }
-        if (migrated != null ? !migrated.equals(that.migrated) : that.migrated != null) {
-            return false;
-        }
-        if (notifiedForInvoices != null ? !notifiedForInvoices.equals(that.notifiedForInvoices) : that.notifiedForInvoices != null) {
-            return false;
-        }
         if (lastInvoiceDate != null ? !lastInvoiceDate.equals(that.lastInvoiceDate) : that.lastInvoiceDate != null) {
             return false;
         }
@@ -338,6 +341,12 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         if (locale != null ? !locale.equals(that.locale) : that.locale != null) {
             return false;
         }
+        if (migrated != null ? !migrated.equals(that.migrated) : that.migrated != null) {
+            return false;
+        }
+        if (notifiedForInvoices != null ? !notifiedForInvoices.equals(that.notifiedForInvoices) : that.notifiedForInvoices != null) {
+            return false;
+        }
         if (paymentMethodId != null ? !paymentMethodId.equals(that.paymentMethodId) : that.paymentMethodId != null) {
             return false;
         }
@@ -353,6 +362,9 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         if (timeZone != null ? !timeZone.equals(that.timeZone) : that.timeZone != null) {
             return false;
         }
+        if (updatedDate != null ? !updatedDate.equals(that.updatedDate) : that.updatedDate != null) {
+            return false;
+        }
 
         return true;
     }
@@ -377,6 +389,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         result = 31 * result + (phone != null ? phone.hashCode() : 0);
         result = 31 * result + (migrated != null ? migrated.hashCode() : 0);
         result = 31 * result + (notifiedForInvoices != null ? notifiedForInvoices.hashCode() : 0);
+        result = 31 * result + (updatedDate != null ? updatedDate.hashCode() : 0);
         result = 31 * result + (balance != null ? balance.hashCode() : 0);
         result = 31 * result + (lastInvoiceDate != null ? lastInvoiceDate.hashCode() : 0);
         result = 31 * result + (lastPaymentDate != null ? lastPaymentDate.hashCode() : 0);
diff --git a/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.sql.stg b/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.sql.stg
index ebe3174..df81b81 100644
--- a/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.sql.stg
+++ b/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.sql.stg
@@ -921,29 +921,32 @@ SELECT_STAR_FROM_TABLE(table) ::= <<
 select *
 from <table> t
 where <CHECK_TENANT_AND_ACCOUNT("t.")>
-;
 >>
 
-deleteByAccountRecordId() ::= <<
-delete from :tableName t
+deleteByAccountRecordId(tableName) ::= <<
+delete from <tableName> t
 where <CHECK_TENANT_AND_ACCOUNT("t.")>
 ;
 >>
 
 getAccountByAccountRecordId() ::= <<
 <SELECT_STAR_FROM_TABLE("bac")>
+;
 >>
 
 getSubscriptionTransitionsByAccountRecordId() ::= <<
 <SELECT_STAR_FROM_TABLE("bst")>
+;
 >>
 
 getOverdueStatusesByAccountRecordId() ::= <<
 <SELECT_STAR_FROM_TABLE("bos")>
+;
 >>
 
 getInvoicesByAccountRecordId() ::= <<
 <SELECT_STAR_FROM_TABLE("bin")>
+;
 >>
 
 getInvoiceItemsByAccountRecordId() ::= <<
@@ -954,6 +957,7 @@ union all
 <SELECT_STAR_FROM_TABLE("biia")>
 union all
 <SELECT_STAR_FROM_TABLE("biic")>
+;
 >>
 
 getInvoicePaymentsByAccountRecordId() ::= <<
@@ -962,20 +966,35 @@ union all
 <SELECT_STAR_FROM_TABLE("bipr")>
 union all
 <SELECT_STAR_FROM_TABLE("bipc")>
+;
 >>
 
-getFieldsByAccountRecordId() ::= <<
+getAccountFieldsByAccountRecordId() ::= <<
 <SELECT_STAR_FROM_TABLE("bac_fields")>
-union all
-<SELECT_STAR_FROM_TABLE("bin_fiels")>
-union all
-<SELECT_STAR_FROM_TABLE("bip_fiels")>
+;
+>>
+
+getInvoiceFieldsByAccountRecordId() ::= <<
+<SELECT_STAR_FROM_TABLE("bin_fields")>
+;
 >>
 
-getTagsByAccountRecordId() ::= <<
+getInvoicePaymentFieldsByAccountRecordId() ::= <<
+<SELECT_STAR_FROM_TABLE("bip_fields")>
+;
+>>
+
+getAccountTagsByAccountRecordId() ::= <<
 <SELECT_STAR_FROM_TABLE("bac_tags")>
-union all
+;
+>>
+
+getInvoiceTagsByAccountRecordId() ::= <<
 <SELECT_STAR_FROM_TABLE("bin_tags")>
-union all
+;
+>>
+
+getInvoicePaymentTagsByAccountRecordId() ::= <<
 <SELECT_STAR_FROM_TABLE("bip_tags")>
+;
 >>
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/AnalyticsTestSuiteNoDB.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/AnalyticsTestSuiteNoDB.java
index db0b552..8eadccb 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/AnalyticsTestSuiteNoDB.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/AnalyticsTestSuiteNoDB.java
@@ -55,6 +55,7 @@ import com.ning.billing.payment.api.Payment.PaymentAttempt;
 import com.ning.billing.payment.api.PaymentMethod;
 import com.ning.billing.payment.api.PaymentMethodPlugin;
 import com.ning.billing.payment.api.PaymentStatus;
+import com.ning.billing.util.api.RecordIdApi;
 import com.ning.billing.util.audit.AuditLog;
 import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.CallContext;
@@ -147,6 +148,7 @@ public abstract class AnalyticsTestSuiteNoDB {
         Mockito.when(account.isMigrated()).thenReturn(true);
         Mockito.when(account.isNotifiedForInvoices()).thenReturn(true);
         Mockito.when(account.getCreatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 47, DateTimeZone.UTC));
+        Mockito.when(account.getUpdatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 48, DateTimeZone.UTC));
         final UUID accountId = account.getId();
 
         bundle = Mockito.mock(SubscriptionBundle.class);
@@ -192,7 +194,9 @@ public abstract class AnalyticsTestSuiteNoDB {
         Mockito.when(subscriptionTransition.getEffectiveTransitionTime()).thenReturn(new DateTime(2011, 2, 3, 4, 5, 6, DateTimeZone.UTC));
         Mockito.when(subscriptionTransition.getTransitionType()).thenReturn(SubscriptionTransitionType.CREATE);
         Mockito.when(subscriptionTransition.getNextEventCreatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 49, DateTimeZone.UTC));
+        Mockito.when(subscriptionTransition.getNextEventId()).thenReturn(UUID.randomUUID());
         final UUID subscriptionId = subscriptionTransition.getSubscriptionId();
+        final UUID nextEventId = subscriptionTransition.getNextEventId();
 
         blockingState = Mockito.mock(BlockingState.class);
         Mockito.when(blockingState.getId()).thenReturn(UUID.randomUUID());
@@ -205,7 +209,8 @@ public abstract class AnalyticsTestSuiteNoDB {
         Mockito.when(blockingState.isBlockEntitlement()).thenReturn(true);
         Mockito.when(blockingState.getDescription()).thenReturn(UUID.randomUUID().toString());
         Mockito.when(blockingState.getService()).thenReturn(UUID.randomUUID().toString());
-        Mockito.when(blockingState.getCreatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 00, DateTimeZone.UTC));
+        Mockito.when(blockingState.getCreatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 0, DateTimeZone.UTC));
+        final UUID blockingStateId = blockingState.getId();
 
         invoiceItem = Mockito.mock(InvoiceItem.class);
         Mockito.when(invoiceItem.getId()).thenReturn(UUID.randomUUID());
@@ -224,6 +229,7 @@ public abstract class AnalyticsTestSuiteNoDB {
         Mockito.when(invoiceItem.getRate()).thenReturn(new BigDecimal("1203"));
         Mockito.when(invoiceItem.getLinkedItemId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoiceItem.getCreatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 51, DateTimeZone.UTC));
+        final UUID invoiceItemId = invoiceItem.getId();
 
         final UUID invoiceId = UUID.randomUUID();
 
@@ -238,6 +244,7 @@ public abstract class AnalyticsTestSuiteNoDB {
         Mockito.when(invoicePayment.getLinkedInvoicePaymentId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoicePayment.getPaymentCookieId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoicePayment.getCreatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 53, DateTimeZone.UTC));
+        final UUID invoicePaymentId = invoicePayment.getId();
 
         invoice = Mockito.mock(Invoice.class);
         Mockito.when(invoice.getId()).thenReturn(invoiceId);
@@ -305,12 +312,14 @@ public abstract class AnalyticsTestSuiteNoDB {
         Mockito.when(customField.getFieldName()).thenReturn(UUID.randomUUID().toString());
         Mockito.when(customField.getFieldValue()).thenReturn(UUID.randomUUID().toString());
         Mockito.when(customField.getCreatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 57, DateTimeZone.UTC));
+        final UUID fieldId = customField.getId();
 
         tag = Mockito.mock(Tag.class);
         Mockito.when(tag.getObjectId()).thenReturn(UUID.randomUUID());
         Mockito.when(tag.getObjectType()).thenReturn(ObjectType.ACCOUNT);
         Mockito.when(tag.getTagDefinitionId()).thenReturn(UUID.randomUUID());
         Mockito.when(tag.getCreatedDate()).thenReturn(new DateTime(2016, 1, 22, 10, 56, 58, DateTimeZone.UTC));
+        final UUID tagId = tag.getId();
 
         tagDefinition = Mockito.mock(TagDefinition.class);
         Mockito.when(tagDefinition.getId()).thenReturn(UUID.randomUUID());
@@ -331,8 +340,22 @@ public abstract class AnalyticsTestSuiteNoDB {
 
         // Real class for the binding to work with JDBI
         callContext = new TestCallContext();
+        final UUID tenantId = callContext.getTenantId();
+
+        final RecordIdApi recordIdApi = Mockito.mock(RecordIdApi.class);
+        Mockito.when(recordIdApi.getRecordId(accountId, ObjectType.ACCOUNT, callContext)).thenReturn(accountRecordId);
+        Mockito.when(recordIdApi.getRecordId(nextEventId, ObjectType.SUBSCRIPTION_EVENT, callContext)).thenReturn(subscriptionEventRecordId);
+        Mockito.when(recordIdApi.getRecordId(invoiceId, ObjectType.INVOICE, callContext)).thenReturn(invoiceRecordId);
+        Mockito.when(recordIdApi.getRecordId(invoiceItemId, ObjectType.INVOICE_ITEM, callContext)).thenReturn(invoiceItemRecordId);
+        Mockito.when(recordIdApi.getRecordId(invoicePaymentId, ObjectType.INVOICE_PAYMENT, callContext)).thenReturn(invoicePaymentRecordId);
+        Mockito.when(recordIdApi.getRecordId(blockingStateId, ObjectType.BLOCKING_STATES, callContext)).thenReturn(blockingStateRecordId);
+        Mockito.when(recordIdApi.getRecordId(fieldId, ObjectType.CUSTOM_FIELD, callContext)).thenReturn(fieldRecordId);
+        Mockito.when(recordIdApi.getRecordId(tagId, ObjectType.TAG, callContext)).thenReturn(tagRecordId);
+        Mockito.when(recordIdApi.getRecordId(tenantId, ObjectType.TENANT, callContext)).thenReturn(tenantRecordId);
 
         killbillAPI = Mockito.mock(OSGIKillbillAPI.class);
+        Mockito.when(killbillAPI.getRecordIdApi()).thenReturn(recordIdApi);
+
         killbillDataSource = Mockito.mock(OSGIKillbillDataSource.class);
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
index ae60a88..d24f729 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
@@ -43,6 +43,9 @@ public class TestBusinessAccount extends AnalyticsTestSuiteNoDB {
         Assert.assertEquals(businessAccount.getFirstNameLength(), accountModelDao.getFirstNameLength());
         Assert.assertEquals(businessAccount.getCurrency(), accountModelDao.getCurrency());
         Assert.assertEquals(businessAccount.getBillingCycleDayLocal(), accountModelDao.getBillingCycleDayLocal());
+        Assert.assertEquals(businessAccount.getPaymentMethodId(), accountModelDao.getPaymentMethodId());
+        Assert.assertEquals(businessAccount.getTimeZone(), accountModelDao.getTimeZone());
+        Assert.assertEquals(businessAccount.getLocale(), accountModelDao.getLocale());
         Assert.assertEquals(businessAccount.getAddress1(), accountModelDao.getAddress1());
         Assert.assertEquals(businessAccount.getAddress2(), accountModelDao.getAddress2());
         Assert.assertEquals(businessAccount.getCompanyName(), accountModelDao.getCompanyName());
@@ -53,6 +56,7 @@ public class TestBusinessAccount extends AnalyticsTestSuiteNoDB {
         Assert.assertEquals(businessAccount.getPhone(), accountModelDao.getPhone());
         Assert.assertEquals(businessAccount.getMigrated(), accountModelDao.getMigrated());
         Assert.assertEquals(businessAccount.getNotifiedForInvoices(), accountModelDao.getNotifiedForInvoices());
+        Assert.assertEquals(businessAccount.getUpdatedDate(), accountModelDao.getUpdatedDate());
         Assert.assertEquals(businessAccount.getBalance(), accountModelDao.getBalance());
         Assert.assertEquals(businessAccount.getLastInvoiceDate(), accountModelDao.getLastInvoiceDate());
         Assert.assertEquals(businessAccount.getLastPaymentDate(), accountModelDao.getLastPaymentDate());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
index a94d484..367a90a 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
@@ -60,6 +60,7 @@ public class TestBusinessAccountModelDao extends AnalyticsTestSuiteNoDB {
     private void verifyAccountFields(final BusinessAccountModelDao accountModelDao) {
         verifyBusinessModelDaoBase(accountModelDao, accountRecordId, tenantRecordId);
         Assert.assertEquals(accountModelDao.getCreatedDate(), account.getCreatedDate());
+        Assert.assertEquals(accountModelDao.getUpdatedDate(), account.getUpdatedDate());
         Assert.assertEquals(accountModelDao.getEmail(), account.getEmail());
         Assert.assertEquals(accountModelDao.getFirstNameLength(), account.getFirstNameLength());
         Assert.assertEquals(accountModelDao.getCurrency(), account.getCurrency().toString());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestCallContext.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestCallContext.java
index d1e27f3..b558860 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestCallContext.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestCallContext.java
@@ -27,14 +27,22 @@ import com.ning.billing.util.callcontext.UserType;
 
 public class TestCallContext implements CallContext {
 
+    private final UUID userToken = UUID.randomUUID();
+    private final String userName = UUID.randomUUID().toString();
+    private final String reasonCode = UUID.randomUUID().toString();
+    private final String comments = UUID.randomUUID().toString();
+    private final DateTime createdDate = new DateTime(2010, 2, 4, 6, 8, 10, DateTimeZone.UTC);
+    private final DateTime updatedDate = new DateTime(2011, 3, 5, 7, 9, 11, DateTimeZone.UTC);
+    private final UUID tenantId = UUID.randomUUID();
+
     @Override
     public UUID getUserToken() {
-        return UUID.randomUUID();
+        return userToken;
     }
 
     @Override
     public String getUserName() {
-        return UUID.randomUUID().toString();
+        return userName;
     }
 
     @Override
@@ -49,26 +57,26 @@ public class TestCallContext implements CallContext {
 
     @Override
     public String getReasonCode() {
-        return UUID.randomUUID().toString();
+        return reasonCode;
     }
 
     @Override
     public String getComments() {
-        return UUID.randomUUID().toString();
+        return comments;
     }
 
     @Override
     public DateTime getCreatedDate() {
-        return new DateTime(2010, 2, 4, 6, 8, 10, DateTimeZone.UTC);
+        return createdDate;
     }
 
     @Override
     public DateTime getUpdatedDate() {
-        return new DateTime(2011, 3, 5, 7, 9, 11, DateTimeZone.UTC);
+        return updatedDate;
     }
 
     @Override
     public UUID getTenantId() {
-        return UUID.randomUUID();
+        return tenantId;
     }
 }