killbill-memoizeit
Changes
invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java 35(+23 -12)
Details
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
index 55a2e8f..9499378 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
@@ -29,6 +29,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
+
package com.ning.billing.invoice.template.formatters;
import java.math.BigDecimal;
@@ -41,6 +42,9 @@ import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceItem;
@@ -48,6 +52,9 @@ import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.api.formatters.InvoiceFormatter;
import com.ning.billing.util.template.translation.TranslatorConfig;
+/**
+ * Format invoice fields. Note that the Mustache engine won't accept null values.
+ */
public class DefaultInvoiceFormatter implements InvoiceFormatter {
private final TranslatorConfig config;
private final Invoice invoice;
@@ -63,7 +70,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
@Override
public Integer getInvoiceNumber() {
- return invoice.getInvoiceNumber();
+ return Objects.firstNonNull(invoice.getInvoiceNumber(), 0);
}
@Override
@@ -87,7 +94,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
@Override
public <T extends InvoiceItem> List<InvoiceItem> getInvoiceItems(final Class<T> clazz) {
- return invoice.getInvoiceItems(clazz);
+ return Objects.firstNonNull(invoice.getInvoiceItems(clazz), ImmutableList.<InvoiceItem>of());
}
@Override
@@ -107,7 +114,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
@Override
public List<InvoicePayment> getPayments() {
- return invoice.getPayments();
+ return Objects.firstNonNull(invoice.getPayments(), ImmutableList.<InvoicePayment>of());
}
@Override
@@ -122,18 +129,17 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
@Override
public BigDecimal getChargedAmount() {
- return invoice.getChargedAmount();
+ return Objects.firstNonNull(invoice.getChargedAmount(), BigDecimal.ZERO);
}
@Override
public BigDecimal getCBAAmount() {
- return invoice.getCBAAmount();
+ return Objects.firstNonNull(invoice.getCBAAmount(), BigDecimal.ZERO);
}
-
@Override
public BigDecimal getBalance() {
- return invoice.getBalance();
+ return Objects.firstNonNull(invoice.getBalance(), BigDecimal.ZERO);
}
@Override
@@ -168,12 +174,17 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
@Override
public BigDecimal getPaidAmount() {
- return invoice.getPaidAmount();
+ return Objects.firstNonNull(invoice.getPaidAmount(), BigDecimal.ZERO);
}
@Override
public String getFormattedInvoiceDate() {
- return invoice.getInvoiceDate().toString(dateFormatter);
+ final DateTime invoiceDate = invoice.getInvoiceDate();
+ if (invoiceDate == null) {
+ return "";
+ } else {
+ return Strings.nullToEmpty(invoiceDate.toString(dateFormatter));
+ }
}
@Override
@@ -201,16 +212,16 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
@Override
public BigDecimal getTotalAdjAmount() {
- return invoice.getTotalAdjAmount();
+ return Objects.firstNonNull(invoice.getTotalAdjAmount(), BigDecimal.ZERO);
}
@Override
public BigDecimal getCreditAdjAmount() {
- return invoice.getCreditAdjAmount();
+ return Objects.firstNonNull(invoice.getCreditAdjAmount(), BigDecimal.ZERO);
}
@Override
public BigDecimal getRefundAdjAmount() {
- return invoice.getRefundAdjAmount();
+ return Objects.firstNonNull(invoice.getRefundAdjAmount(), BigDecimal.ZERO);
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
index 3f4ff92..86be83b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
@@ -23,6 +23,8 @@ import java.util.UUID;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceItemType;
@@ -31,6 +33,9 @@ import com.ning.billing.util.template.translation.DefaultCatalogTranslator;
import com.ning.billing.util.template.translation.Translator;
import com.ning.billing.util.template.translation.TranslatorConfig;
+/**
+ * Format invoice item fields. Note that the Mustache engine won't accept null values.
+ */
public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
private final Translator translator;
@@ -48,7 +53,7 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
@Override
public BigDecimal getAmount() {
- return item.getAmount();
+ return Objects.firstNonNull(item.getAmount(), BigDecimal.ZERO);
}
@Override
@@ -60,16 +65,10 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
public InvoiceItemType getInvoiceItemType() {
return item.getInvoiceItemType();
}
-/*
- @Override
- public InvoiceItem asReversingItem() {
- return item.asReversingItem();
- }
- */
@Override
public String getDescription() {
- return item.getDescription();
+ return Strings.nullToEmpty(item.getDescription());
}
@Override
@@ -84,12 +83,12 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
@Override
public String getFormattedStartDate() {
- return item.getStartDate().toString(dateFormatter);
+ return Strings.nullToEmpty(item.getStartDate().toString(dateFormatter));
}
@Override
public String getFormattedEndDate() {
- return item.getEndDate().toString(dateFormatter);
+ return Strings.nullToEmpty(item.getEndDate().toString(dateFormatter));
}
@Override
@@ -114,12 +113,12 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
@Override
public String getPlanName() {
- return translator.getTranslation(locale, item.getPlanName());
+ return Strings.nullToEmpty(translator.getTranslation(locale, item.getPlanName()));
}
@Override
public String getPhaseName() {
- return translator.getTranslation(locale, item.getPhaseName());
+ return Strings.nullToEmpty(translator.getTranslation(locale, item.getPhaseName()));
}
@Override
@@ -134,7 +133,7 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
@Override
public BigDecimal getRate() {
- return null;
+ return BigDecimal.ZERO;
}
@Override
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 2847e0b..049e7e4 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
@@ -22,7 +22,9 @@ import java.util.List;
import java.util.Locale;
import org.joda.time.DateTime;
+import org.mockito.Mockito;
import org.skife.config.ConfigurationObjectFactory;
+import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
@@ -39,12 +41,10 @@ import com.ning.billing.util.email.templates.MustacheTemplateEngine;
import com.ning.billing.util.email.templates.TemplateEngine;
import com.ning.billing.util.template.translation.TranslatorConfig;
-import static org.testng.Assert.assertNotNull;
-
public class TestHtmlInvoiceGenerator {
private HtmlInvoiceGenerator g;
- @BeforeSuite(groups = {"fast"})
+ @BeforeSuite(groups = "fast")
public void setup() {
final TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
final TemplateEngine templateEngine = new MustacheTemplateEngine();
@@ -52,11 +52,17 @@ public class TestHtmlInvoiceGenerator {
g = new HtmlInvoiceGenerator(factory, templateEngine, config);
}
- @Test(groups = {"fast"})
+ @Test(groups = "fast")
public void testGenerateInvoice() throws Exception {
final String output = g.generateInvoice(createAccount(), createInvoice());
- assertNotNull(output);
- System.out.print(output);
+ Assert.assertNotNull(output);
+ }
+
+ @Test(groups = "fast")
+ public void testGenerateNullInvoice() throws Exception {
+ final Invoice invoice = Mockito.mock(Invoice.class);
+ final String output = g.generateInvoice(createAccount(), invoice);
+ Assert.assertNotNull(output);
}
private Account createAccount() {
@@ -110,7 +116,6 @@ public class TestHtmlInvoiceGenerator {
zombie.addResult("getPlanName", planName);
zombie.addResult("getDescription", networkName);
-
return item;
}
}