killbill-uncached

util: introduce AuditLevel for audits Let the user specify

8/13/2012 3:34:42 PM

Details

diff --git a/api/src/main/java/com/ning/billing/util/api/AuditLevel.java b/api/src/main/java/com/ning/billing/util/api/AuditLevel.java
new file mode 100644
index 0000000..53e6bd6
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/api/AuditLevel.java
@@ -0,0 +1,26 @@
+/*
+ * 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.util.api;
+
+public enum AuditLevel {
+    // All audits
+    FULL,
+    // Initial inserts only
+    MINIMAL,
+    // No audit
+    NONE
+}
diff --git a/api/src/main/java/com/ning/billing/util/api/AuditUserApi.java b/api/src/main/java/com/ning/billing/util/api/AuditUserApi.java
index 266eb3b..c4e6bb2 100644
--- a/api/src/main/java/com/ning/billing/util/api/AuditUserApi.java
+++ b/api/src/main/java/com/ning/billing/util/api/AuditUserApi.java
@@ -37,49 +37,55 @@ public interface AuditUserApi {
     /**
      * Fetch all audit logs for bundles.
      *
-     * @param bundles the bundles to lookup
+     * @param bundles    the bundles to lookup
+     * @param auditLevel audit level (verbosity)
      * @return all audit logs for these refunds
      */
-    public AuditLogsForBundles getAuditLogsForBundles(final List<SubscriptionBundle> bundles);
+    public AuditLogsForBundles getAuditLogsForBundles(final List<SubscriptionBundle> bundles, final AuditLevel auditLevel);
 
     /**
      * Fetch all audit logs for invoice payments.
      *
      * @param invoicePayments the invoice payments to lookup
+     * @param auditLevel      audit level (verbosity)
      * @return all audit logs for these invoice payments
      */
-    public AuditLogsForInvoicePayments getAuditLogsForInvoicePayments(final List<InvoicePayment> invoicePayments);
+    public AuditLogsForInvoicePayments getAuditLogsForInvoicePayments(final List<InvoicePayment> invoicePayments, final AuditLevel auditLevel);
 
     /**
      * Fetch all audit logs for refunds.
      *
-     * @param refunds the refunds to lookup
+     * @param refunds    the refunds to lookup
+     * @param auditLevel audit level (verbosity)
      * @return all audit logs for these refunds
      */
-    public AuditLogsForRefunds getAuditLogsForRefunds(final List<Refund> refunds);
+    public AuditLogsForRefunds getAuditLogsForRefunds(final List<Refund> refunds, final AuditLevel auditLevel);
 
     /**
      * Fetch all audit logs for payments.
      *
-     * @param payments the payments to lookup
+     * @param payments   the payments to lookup
+     * @param auditLevel audit level (verbosity)
      * @return all audit logs for these payments
      */
-    public AuditLogsForPayments getAuditLogsForPayments(final List<Payment> payments);
+    public AuditLogsForPayments getAuditLogsForPayments(final List<Payment> payments, final AuditLevel auditLevel);
 
     /**
      * Fetch all audit logs for invoices and associated invoice items.
      *
-     * @param invoices the invoices to lookup
+     * @param invoices   the invoices to lookup
+     * @param auditLevel audit level (verbosity)
      * @return all audit logs for these invoices
      */
-    public AuditLogsForInvoices getAuditLogsForInvoices(final List<Invoice> invoices);
+    public AuditLogsForInvoices getAuditLogsForInvoices(final List<Invoice> invoices, final AuditLevel auditLevel);
 
     /**
      * Get all the audit entries for a given object.
      *
      * @param objectId   the object id
      * @param objectType the type of object
+     * @param auditLevel audit level (verbosity)
      * @return all audit entries for that object
      */
-    public List<AuditLog> getAuditLogs(final UUID objectId, final ObjectType objectType);
+    public List<AuditLog> getAuditLogs(final UUID objectId, final ObjectType objectType, final AuditLevel auditLevel);
 }
diff --git a/util/src/main/java/com/ning/billing/util/audit/api/DefaultAuditUserApi.java b/util/src/main/java/com/ning/billing/util/audit/api/DefaultAuditUserApi.java
index 14ca318..25b7a8a 100644
--- a/util/src/main/java/com/ning/billing/util/audit/api/DefaultAuditUserApi.java
+++ b/util/src/main/java/com/ning/billing/util/audit/api/DefaultAuditUserApi.java
@@ -29,6 +29,7 @@ import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.payment.api.Payment;
 import com.ning.billing.payment.api.Refund;
+import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.api.AuditUserApi;
 import com.ning.billing.util.audit.AuditLog;
 import com.ning.billing.util.audit.AuditLogsForBundles;
@@ -57,53 +58,53 @@ public class DefaultAuditUserApi implements AuditUserApi {
     }
 
     @Override
-    public AuditLogsForBundles getAuditLogsForBundles(final List<SubscriptionBundle> bundles) {
+    public AuditLogsForBundles getAuditLogsForBundles(final List<SubscriptionBundle> bundles, final AuditLevel auditLevel) {
         final Map<UUID, List<AuditLog>> bundlesAuditLogs = new HashMap<UUID, List<AuditLog>>();
         for (final SubscriptionBundle bundle : bundles) {
-            bundlesAuditLogs.put(bundle.getId(), getAuditLogs(bundle.getId(), ObjectType.BUNDLE));
+            bundlesAuditLogs.put(bundle.getId(), getAuditLogs(bundle.getId(), ObjectType.BUNDLE, auditLevel));
         }
 
         return new DefaultAuditLogsForBundles(bundlesAuditLogs);
     }
 
     @Override
-    public AuditLogsForInvoicePayments getAuditLogsForInvoicePayments(final List<InvoicePayment> invoicePayments) {
+    public AuditLogsForInvoicePayments getAuditLogsForInvoicePayments(final List<InvoicePayment> invoicePayments, final AuditLevel auditLevel) {
         final Map<UUID, List<AuditLog>> invoicePaymentsAuditLogs = new HashMap<UUID, List<AuditLog>>();
         for (final InvoicePayment invoicePayment : invoicePayments) {
-            invoicePaymentsAuditLogs.put(invoicePayment.getId(), getAuditLogs(invoicePayment.getId(), ObjectType.INVOICE_PAYMENT));
+            invoicePaymentsAuditLogs.put(invoicePayment.getId(), getAuditLogs(invoicePayment.getId(), ObjectType.INVOICE_PAYMENT, auditLevel));
         }
 
         return new DefaultAuditLogsForInvoicePayments(invoicePaymentsAuditLogs);
     }
 
     @Override
-    public AuditLogsForRefunds getAuditLogsForRefunds(final List<Refund> refunds) {
+    public AuditLogsForRefunds getAuditLogsForRefunds(final List<Refund> refunds, final AuditLevel auditLevel) {
         final Map<UUID, List<AuditLog>> refundsAuditLogs = new HashMap<UUID, List<AuditLog>>();
         for (final Refund refund : refunds) {
-            refundsAuditLogs.put(refund.getId(), getAuditLogs(refund.getId(), ObjectType.REFUND));
+            refundsAuditLogs.put(refund.getId(), getAuditLogs(refund.getId(), ObjectType.REFUND, auditLevel));
         }
 
         return new DefaultAuditLogsForRefunds(refundsAuditLogs);
     }
 
     @Override
-    public AuditLogsForPayments getAuditLogsForPayments(final List<Payment> payments) {
+    public AuditLogsForPayments getAuditLogsForPayments(final List<Payment> payments, final AuditLevel auditLevel) {
         final Map<UUID, List<AuditLog>> paymentsAuditLogs = new HashMap<UUID, List<AuditLog>>();
         for (final Payment payment : payments) {
-            paymentsAuditLogs.put(payment.getId(), getAuditLogs(payment.getId(), ObjectType.PAYMENT));
+            paymentsAuditLogs.put(payment.getId(), getAuditLogs(payment.getId(), ObjectType.PAYMENT, auditLevel));
         }
 
         return new DefaultAuditLogsForPayments(paymentsAuditLogs);
     }
 
     @Override
-    public AuditLogsForInvoices getAuditLogsForInvoices(final List<Invoice> invoices) {
+    public AuditLogsForInvoices getAuditLogsForInvoices(final List<Invoice> invoices, final AuditLevel auditLevel) {
         final Map<UUID, List<AuditLog>> invoiceAuditLogs = new HashMap<UUID, List<AuditLog>>();
         final Map<UUID, List<AuditLog>> invoiceItemsAuditLogs = new HashMap<UUID, List<AuditLog>>();
         for (final Invoice invoice : invoices) {
-            invoiceAuditLogs.put(invoice.getId(), getAuditLogs(invoice.getId(), ObjectType.INVOICE));
+            invoiceAuditLogs.put(invoice.getId(), getAuditLogs(invoice.getId(), ObjectType.INVOICE, auditLevel));
             for (final InvoiceItem invoiceItem : invoice.getInvoiceItems()) {
-                invoiceItemsAuditLogs.put(invoiceItem.getId(), getAuditLogs(invoiceItem.getId(), ObjectType.INVOICE_ITEM));
+                invoiceItemsAuditLogs.put(invoiceItem.getId(), getAuditLogs(invoiceItem.getId(), ObjectType.INVOICE_ITEM, auditLevel));
             }
         }
 
@@ -111,13 +112,18 @@ public class DefaultAuditUserApi implements AuditUserApi {
     }
 
     @Override
-    public List<AuditLog> getAuditLogs(final UUID objectId, final ObjectType objectType) {
+    public List<AuditLog> getAuditLogs(final UUID objectId, final ObjectType objectType, final AuditLevel auditLevel) {
+        // Optimization - bail early
+        if (AuditLevel.NONE.equals(auditLevel)) {
+            return ImmutableList.<AuditLog>of();
+        }
+
         final TableName tableName = getTableNameFromObjectType(objectType);
         if (tableName == null) {
             return ImmutableList.<AuditLog>of();
         }
 
-        return auditDao.getAuditLogsForId(tableName, objectId);
+        return auditDao.getAuditLogsForId(tableName, objectId, auditLevel);
     }
 
     private TableName getTableNameFromObjectType(final ObjectType objectType) {
diff --git a/util/src/main/java/com/ning/billing/util/audit/dao/AuditDao.java b/util/src/main/java/com/ning/billing/util/audit/dao/AuditDao.java
index 4244ddc..3f0e485 100644
--- a/util/src/main/java/com/ning/billing/util/audit/dao/AuditDao.java
+++ b/util/src/main/java/com/ning/billing/util/audit/dao/AuditDao.java
@@ -19,10 +19,11 @@ package com.ning.billing.util.audit.dao;
 import java.util.List;
 import java.util.UUID;
 
+import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.audit.AuditLog;
 import com.ning.billing.util.dao.TableName;
 
 public interface AuditDao {
 
-    public List<AuditLog> getAuditLogsForId(final TableName tableName, final UUID objectId);
+    public List<AuditLog> getAuditLogsForId(final TableName tableName, final UUID objectId, final AuditLevel auditLevel);
 }
diff --git a/util/src/main/java/com/ning/billing/util/audit/dao/DefaultAuditDao.java b/util/src/main/java/com/ning/billing/util/audit/dao/DefaultAuditDao.java
index 73f82ec..0e71983 100644
--- a/util/src/main/java/com/ning/billing/util/audit/dao/DefaultAuditDao.java
+++ b/util/src/main/java/com/ning/billing/util/audit/dao/DefaultAuditDao.java
@@ -24,6 +24,7 @@ import javax.inject.Inject;
 
 import org.skife.jdbi.v2.IDBI;
 
+import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.audit.AuditLog;
 import com.ning.billing.util.dao.AuditSqlDao;
 import com.ning.billing.util.dao.TableName;
@@ -40,25 +41,25 @@ public class DefaultAuditDao implements AuditDao {
     }
 
     @Override
-    public List<AuditLog> getAuditLogsForId(final TableName tableName, final UUID objectId) {
+    public List<AuditLog> getAuditLogsForId(final TableName tableName, final UUID objectId, final AuditLevel auditLevel) {
         if (tableName.hasHistoryTable()) {
-            return doGetAuditLogsViaHistoryForId(tableName, objectId);
+            return doGetAuditLogsViaHistoryForId(tableName, objectId, auditLevel);
         } else {
-            return doGetAuditLogsForId(tableName, objectId);
+            return doGetAuditLogsForId(tableName, objectId, auditLevel);
         }
     }
 
-    private List<AuditLog> doGetAuditLogsForId(final TableName tableName, final UUID objectId) {
+    private List<AuditLog> doGetAuditLogsForId(final TableName tableName, final UUID objectId, final AuditLevel auditLevel) {
         // Look at the table and gather all record_id for that objectId
         final Long recordId = auditSqlDao.getRecordIdForTable(tableName.getTableName().toLowerCase(), objectId.toString());
         if (recordId == null) {
             return ImmutableList.<AuditLog>of();
         } else {
-            return auditSqlDao.getAuditLogsForRecordId(tableName, recordId);
+            return getAuditLogsForRecordId(tableName, recordId, auditLevel);
         }
     }
 
-    private List<AuditLog> doGetAuditLogsViaHistoryForId(final TableName tableName, final UUID objectId) {
+    private List<AuditLog> doGetAuditLogsViaHistoryForId(final TableName tableName, final UUID objectId, final AuditLevel auditLevel) {
         final List<AuditLog> auditLogs = new ArrayList<AuditLog>();
 
         // Look at the history table and gather all the history_record_id for that objectId
@@ -68,10 +69,23 @@ public class DefaultAuditDao implements AuditDao {
             return auditLogs;
         } else {
             for (final Long recordId : recordIds) {
-                auditLogs.addAll(auditSqlDao.getAuditLogsForRecordId(tableName.getHistoryTableName(), recordId));
+                auditLogs.addAll(getAuditLogsForRecordId(tableName.getHistoryTableName(), recordId, auditLevel));
             }
 
             return auditLogs;
         }
     }
+
+    private List<AuditLog> getAuditLogsForRecordId(final TableName tableName, final Long recordId, final AuditLevel auditLevel) {
+        final List<AuditLog> allAuditLogs = auditSqlDao.getAuditLogsForRecordId(tableName, recordId);
+        if (AuditLevel.FULL.equals(auditLevel)) {
+            return allAuditLogs;
+        } else if (AuditLevel.MINIMAL.equals(auditLevel) && allAuditLogs.size() > 0) {
+            return ImmutableList.<AuditLog>of(allAuditLogs.get(0));
+        } else if (AuditLevel.NONE.equals(auditLevel)) {
+            return ImmutableList.<AuditLog>of();
+        } else {
+            return allAuditLogs;
+        }
+    }
 }
diff --git a/util/src/main/resources/com/ning/billing/util/dao/AuditSqlDao.sql.stg b/util/src/main/resources/com/ning/billing/util/dao/AuditSqlDao.sql.stg
index c8d64bb..20cd42f 100644
--- a/util/src/main/resources/com/ning/billing/util/dao/AuditSqlDao.sql.stg
+++ b/util/src/main/resources/com/ning/billing/util/dao/AuditSqlDao.sql.stg
@@ -20,7 +20,8 @@ getAuditLogsForRecordId() ::= <<
   SELECT <fields()>
   FROM audit_log
   WHERE record_id = :recordId
-  AND table_name = :tableName;
+  AND table_name = :tableName
+  ORDER BY change_date ASC
 >>
 
 getRecordIdForTable(tableName) ::= <<
diff --git a/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java b/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
index 9c58442..debece4 100644
--- a/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
+++ b/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
@@ -32,6 +32,7 @@ import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.payment.api.Payment;
 import com.ning.billing.payment.api.Refund;
+import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.api.AuditUserApi;
 import com.ning.billing.util.audit.AuditLog;
 import com.ning.billing.util.audit.AuditLogsForBundles;
@@ -74,32 +75,40 @@ public class TestDefaultAuditUserApi extends AuditLogsTestBase {
 
         // TODO check SubscriptionEventsAuditLogs
 
-        final AuditLogsForBundles auditLogsForBundles = auditUserApi.getAuditLogsForBundles(bundles);
-        verifyAuditLogs(auditLogsForBundles.getBundlesAuditLogs());
+        for (final AuditLevel level : AuditLevel.values()) {
+            final AuditLogsForBundles auditLogsForBundles = auditUserApi.getAuditLogsForBundles(bundles, level);
+            verifyAuditLogs(auditLogsForBundles.getBundlesAuditLogs(), level);
+        }
     }
 
     @Test(groups = "fast")
     public void testForInvoicePayments() throws Exception {
         final List<InvoicePayment> invoicePayments = createMocks(InvoicePayment.class);
 
-        final AuditLogsForInvoicePayments auditLogsForInvoicePayments = auditUserApi.getAuditLogsForInvoicePayments(invoicePayments);
-        verifyAuditLogs(auditLogsForInvoicePayments.getInvoicePaymentsAuditLogs());
+        for (final AuditLevel level : AuditLevel.values()) {
+            final AuditLogsForInvoicePayments auditLogsForInvoicePayments = auditUserApi.getAuditLogsForInvoicePayments(invoicePayments, level);
+            verifyAuditLogs(auditLogsForInvoicePayments.getInvoicePaymentsAuditLogs(), level);
+        }
     }
 
     @Test(groups = "fast")
     public void testForRefunds() throws Exception {
         final List<Refund> refunds = createMocks(Refund.class);
 
-        final AuditLogsForRefunds auditLogsForRefunds = auditUserApi.getAuditLogsForRefunds(refunds);
-        verifyAuditLogs(auditLogsForRefunds.getRefundsAuditLogs());
+        for (final AuditLevel level : AuditLevel.values()) {
+            final AuditLogsForRefunds auditLogsForRefunds = auditUserApi.getAuditLogsForRefunds(refunds, level);
+            verifyAuditLogs(auditLogsForRefunds.getRefundsAuditLogs(), level);
+        }
     }
 
     @Test(groups = "fast")
     public void testForPayments() throws Exception {
         final List<Payment> payments = createMocks(Payment.class);
 
-        final AuditLogsForPayments auditLogsForPayments = auditUserApi.getAuditLogsForPayments(payments);
-        verifyAuditLogs(auditLogsForPayments.getPaymentsAuditLogs());
+        for (final AuditLevel level : AuditLevel.values()) {
+            final AuditLogsForPayments auditLogsForPayments = auditUserApi.getAuditLogsForPayments(payments, level);
+            verifyAuditLogs(auditLogsForPayments.getPaymentsAuditLogs(), level);
+        }
     }
 
     @Test(groups = "fast")
@@ -110,24 +119,46 @@ public class TestDefaultAuditUserApi extends AuditLogsTestBase {
             Mockito.when(invoice.getInvoiceItems()).thenReturn(invoiceItems);
         }
 
-        final AuditLogsForInvoices auditLogsForInvoices = auditUserApi.getAuditLogsForInvoices(invoices);
-        verifyAuditLogs(auditLogsForInvoices.getInvoiceAuditLogs());
-        verifyAuditLogs(auditLogsForInvoices.getInvoiceItemsAuditLogs());
+        for (final AuditLevel level : AuditLevel.values()) {
+            final AuditLogsForInvoices auditLogsForInvoices = auditUserApi.getAuditLogsForInvoices(invoices, level);
+            verifyAuditLogs(auditLogsForInvoices.getInvoiceAuditLogs(), level);
+            verifyAuditLogs(auditLogsForInvoices.getInvoiceItemsAuditLogs(), level);
+        }
     }
 
     @Test(groups = "fast")
     public void testForObject() throws Exception {
         for (final ObjectType objectType : ObjectType.values()) {
             for (final UUID objectId : objectIds) {
-                Assert.assertEquals(auditUserApi.getAuditLogs(objectId, objectType), auditLogs);
+                for (final AuditLevel level : AuditLevel.values()) {
+                    if (AuditLevel.NONE.equals(level)) {
+                        Assert.assertEquals(auditUserApi.getAuditLogs(objectId, objectType, level).size(), 0);
+                    } else if (AuditLevel.MINIMAL.equals(level)) {
+                        Assert.assertEquals(auditUserApi.getAuditLogs(objectId, objectType, level), ImmutableList.<AuditLog>of(auditLogs.get(0)));
+                    } else {
+                        Assert.assertEquals(auditUserApi.getAuditLogs(objectId, objectType, level), auditLogs);
+                    }
+                }
             }
         }
     }
 
-    private void verifyAuditLogs(final Map<UUID, List<AuditLog>> objectsAuditLogs) {
+    private void verifyAuditLogs(final Map<UUID, List<AuditLog>> objectsAuditLogs, final AuditLevel level) {
         Assert.assertEquals(objectsAuditLogs.size(), objectIds.size());
-        for (final UUID objectId : objectIds) {
-            Assert.assertEquals(objectsAuditLogs.get(objectId), auditLogs);
+
+        if (AuditLevel.NONE.equals(level)) {
+            for (final UUID objectId : objectIds) {
+                Assert.assertEquals(objectsAuditLogs.get(objectId).size(), 0);
+            }
+        } else if (AuditLevel.MINIMAL.equals(level)) {
+            for (final UUID objectId : objectIds) {
+                Assert.assertEquals(objectsAuditLogs.get(objectId).size(), 1);
+                Assert.assertEquals(objectsAuditLogs.get(objectId).get(0), auditLogs.get(0));
+            }
+        } else {
+            for (final UUID objectId : objectIds) {
+                Assert.assertEquals(objectsAuditLogs.get(objectId), auditLogs);
+            }
         }
     }
 
diff --git a/util/src/test/java/com/ning/billing/util/audit/dao/MockAuditDao.java b/util/src/test/java/com/ning/billing/util/audit/dao/MockAuditDao.java
index 7af195c..daee3e8 100644
--- a/util/src/test/java/com/ning/billing/util/audit/dao/MockAuditDao.java
+++ b/util/src/test/java/com/ning/billing/util/audit/dao/MockAuditDao.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.audit.AuditLog;
 import com.ning.billing.util.dao.TableName;
 
@@ -49,13 +50,22 @@ public class MockAuditDao implements AuditDao {
     }
 
     @Override
-    public List<AuditLog> getAuditLogsForId(final TableName tableName, final UUID objectId) {
+    public List<AuditLog> getAuditLogsForId(final TableName tableName, final UUID objectId, final AuditLevel auditLevel) {
         final Map<UUID, List<AuditLog>> auditLogsForTableName = auditLogsForTables.get(tableName);
         if (auditLogsForTableName == null) {
             return ImmutableList.<AuditLog>of();
         }
 
         final List<AuditLog> auditLogsForObjectId = auditLogsForTableName.get(objectId);
-        return Objects.firstNonNull(auditLogsForObjectId, ImmutableList.<AuditLog>of());
+        final List<AuditLog> allAuditLogs = Objects.firstNonNull(auditLogsForObjectId, ImmutableList.<AuditLog>of());
+        if (AuditLevel.FULL.equals(auditLevel)) {
+            return allAuditLogs;
+        } else if (AuditLevel.MINIMAL.equals(auditLevel) && allAuditLogs.size() > 0) {
+            return ImmutableList.<AuditLog>of(allAuditLogs.get(0));
+        } else if (AuditLevel.NONE.equals(auditLevel)) {
+            return ImmutableList.<AuditLog>of();
+        } else {
+            return allAuditLogs;
+        }
     }
 }
diff --git a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
index e4abf3c..220e564 100644
--- a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
+++ b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
@@ -31,6 +31,7 @@ import org.testng.annotations.Test;
 
 import com.ning.billing.util.ChangeType;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
+import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.audit.AuditLog;
@@ -95,16 +96,20 @@ public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
         final String tagHistoryString = (String) handle.select("select id from tag_history limit 1").get(0).get("id");
         handle.close();
 
-        final List<AuditLog> auditLogs = auditDao.getAuditLogsForId(TableName.TAG_HISTORY, UUID.fromString(tagHistoryString));
-        verifyAuditLogsForTag(auditLogs);
+        for (final AuditLevel level : AuditLevel.values()) {
+            final List<AuditLog> auditLogs = auditDao.getAuditLogsForId(TableName.TAG_HISTORY, UUID.fromString(tagHistoryString), level);
+            verifyAuditLogsForTag(auditLogs, level);
+        }
     }
 
     @Test(groups = "slow")
     public void testRetrieveAuditsViaHistory() throws Exception {
         addTag();
 
-        final List<AuditLog> auditLogs = auditDao.getAuditLogsForId(TableName.TAG, tagId);
-        verifyAuditLogsForTag(auditLogs);
+        for (final AuditLevel level : AuditLevel.values()) {
+            final List<AuditLog> auditLogs = auditDao.getAuditLogsForId(TableName.TAG, tagId, level);
+            verifyAuditLogsForTag(auditLogs, level);
+        }
     }
 
     private void addTag() throws TagDefinitionApiException, TagApiException {
@@ -124,7 +129,12 @@ public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
         tagId = tag.getId();
     }
 
-    private void verifyAuditLogsForTag(final List<AuditLog> auditLogs) {
+    private void verifyAuditLogsForTag(final List<AuditLog> auditLogs, final AuditLevel level) {
+        if (AuditLevel.NONE.equals(level)) {
+            Assert.assertEquals(auditLogs.size(), 0);
+            return;
+        }
+
         Assert.assertEquals(auditLogs.size(), 1);
         Assert.assertEquals(auditLogs.get(0).getUserToken(), context.getUserToken().toString());
         Assert.assertEquals(auditLogs.get(0).getChangeType(), ChangeType.INSERT);