Skip to content

Commit

Permalink
invoice: Fix json deserialization for consumable details (new json)
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrossie committed Feb 12, 2018
1 parent d8fd404 commit d65e9e0
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 20 deletions.
Expand Up @@ -70,6 +70,8 @@ public ContiguousIntervalConsumableUsageInArrear(final Usage usage,
protected void populateResults(final LocalDate startDate, final LocalDate endDate, final Iterable<InvoiceItem> billedItems, final BigDecimal billedUsage, final BigDecimal toBeBilledUsage, final UsageInArrearDetail toBeBilledUsageDetails, final boolean areAllBilledItemsWithDetails, final List<InvoiceItem> result) { protected void populateResults(final LocalDate startDate, final LocalDate endDate, final Iterable<InvoiceItem> billedItems, final BigDecimal billedUsage, final BigDecimal toBeBilledUsage, final UsageInArrearDetail toBeBilledUsageDetails, final boolean areAllBilledItemsWithDetails, final List<InvoiceItem> result) {
// Compute final amount by subtracting amount that was already billed. // Compute final amount by subtracting amount that was already billed.
if (!billedItems.iterator().hasNext() || billedUsage.compareTo(toBeBilledUsage) < 0) { if (!billedItems.iterator().hasNext() || billedUsage.compareTo(toBeBilledUsage) < 0) {
// In the case past invoice items showed the details (areAllBilledItemsWithDetails=true), billed usage has already been taken into account
// as it part of the reconciliation logic, so no need to subtract it here
final BigDecimal amountToBill = areAllBilledItemsWithDetails ? toBeBilledUsage : toBeBilledUsage.subtract(billedUsage); final BigDecimal amountToBill = areAllBilledItemsWithDetails ? toBeBilledUsage : toBeBilledUsage.subtract(billedUsage);


if (amountToBill.compareTo(BigDecimal.ZERO) > 0) { if (amountToBill.compareTo(BigDecimal.ZERO) > 0) {
Expand All @@ -90,6 +92,7 @@ protected void populateResults(final LocalDate startDate, final LocalDate endDat


} }


@Override
protected UsageInArrearDetail getToBeBilledUsageDetails(final List<RolledUpUnit> rolledUpUnits, final Iterable<InvoiceItem> billedItems, final boolean areAllBilledItemsWithDetails) throws CatalogApiException { protected UsageInArrearDetail getToBeBilledUsageDetails(final List<RolledUpUnit> rolledUpUnits, final Iterable<InvoiceItem> billedItems, final boolean areAllBilledItemsWithDetails) throws CatalogApiException {


final Map<String, List<UsageConsumableInArrearTierUnitDetail>> previousUnitsUsage; final Map<String, List<UsageConsumableInArrearTierUnitDetail>> previousUnitsUsage;
Expand Down Expand Up @@ -121,8 +124,9 @@ private List<UsageConsumableInArrearTierUnitDetail> getUsageConsumableInArrearDe


final List<UsageConsumableInArrearTierUnitDetail> result = new ArrayList<UsageConsumableInArrearTierUnitDetail>(); final List<UsageConsumableInArrearTierUnitDetail> result = new ArrayList<UsageConsumableInArrearTierUnitDetail>();
for (final InvoiceItem bi : billedItems) { for (final InvoiceItem bi : billedItems) {
final List<UsageConsumableInArrearTierUnitDetail> billedUsageItemDetails = fromJson(bi.getItemDetails());
for (final UsageConsumableInArrearTierUnitDetail curDetail : billedUsageItemDetails) { final UsageConsumableInArrearDetail usageDetail = fromJson(bi.getItemDetails());
for (final UsageConsumableInArrearTierUnitDetail curDetail : usageDetail.getTierDetails()) {
if (curDetail.getTierUnit().equals(unitType)) { if (curDetail.getTierUnit().equals(unitType)) {
result.add(curDetail); result.add(curDetail);
} }
Expand Down Expand Up @@ -229,17 +233,16 @@ public String toString() {
return sb.toString(); return sb.toString();
} }


public static List<UsageConsumableInArrearTierUnitDetail> fromJson(String itemDetails) { public static UsageConsumableInArrearDetail fromJson(String itemDetails) {
List<UsageConsumableInArrearTierUnitDetail> toBeBilledUsageConsumableInArrearTierUnitDetails = null; UsageConsumableInArrearDetail result = null;
if (itemDetails != null) { if (itemDetails != null) {
try { try {
toBeBilledUsageConsumableInArrearTierUnitDetails = objectMapper.readValue(itemDetails, new TypeReference<List<UsageConsumableInArrearTierUnitDetail>>() {}); result = objectMapper.readValue(itemDetails, new TypeReference<UsageConsumableInArrearDetail>() {});
} catch (IOException e) { } catch (IOException e) {
Preconditions.checkState(false, e.getMessage()); Preconditions.checkState(false, e.getMessage());
} }
} }

return result;
return toBeBilledUsageConsumableInArrearTierUnitDetails;
} }


} }
Expand Up @@ -52,7 +52,7 @@ public String toJson(final ObjectMapper objectMapper) {
String result = null; String result = null;
if (tierDetails != null && tierDetails.size() > 0){ if (tierDetails != null && tierDetails.size() > 0){
try { try {
result = objectMapper.writeValueAsString(tierDetails); result = objectMapper.writeValueAsString(this);
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
Preconditions.checkState(false, e.getMessage()); Preconditions.checkState(false, e.getMessage());
} }
Expand Down
Expand Up @@ -61,8 +61,8 @@
import com.google.common.collect.Ordering; import com.google.common.collect.Ordering;


import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import static org.testng.AssertJUnit.assertNull;


public class TestContiguousIntervalConsumableInArrear extends TestUsageInArrearBase { public class TestContiguousIntervalConsumableInArrear extends TestUsageInArrearBase {


Expand Down Expand Up @@ -636,9 +636,10 @@ public void testComputeMissingItemsAggregateModeTopTier() throws CatalogApiExcep


List<InvoiceItem> result = produceInvoiceItems(rawUsages, TierBlockPolicy.TOP_TIER, UsageDetailMode.AGGREGATE, ImmutableList.<InvoiceItem>of()); List<InvoiceItem> result = produceInvoiceItems(rawUsages, TierBlockPolicy.TOP_TIER, UsageDetailMode.AGGREGATE, ImmutableList.<InvoiceItem>of());
assertEquals(result.size(), 1); assertEquals(result.size(), 1);
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("203")),0); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("203")), 0);


List<UsageConsumableInArrearTierUnitDetail> itemDetails = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<List<UsageConsumableInArrearTierUnitDetail>>() {}); UsageConsumableInArrearDetail usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearDetail>() {});
List<UsageConsumableInArrearTierUnitDetail> itemDetails = usageDetail.getTierDetails();
// BAR: 99 * 2 = 198 // BAR: 99 * 2 = 198
assertEquals(itemDetails.get(0).getTierUnit(), "BAR"); assertEquals(itemDetails.get(0).getTierUnit(), "BAR");
assertEquals(itemDetails.get(0).getTier(), 1); assertEquals(itemDetails.get(0).getTier(), 1);
Expand All @@ -659,9 +660,11 @@ public void testComputeMissingItemsAggregateModeTopTier() throws CatalogApiExcep


result = produceInvoiceItems(rawUsages, TierBlockPolicy.TOP_TIER, UsageDetailMode.AGGREGATE, ImmutableList.<InvoiceItem>of()); result = produceInvoiceItems(rawUsages, TierBlockPolicy.TOP_TIER, UsageDetailMode.AGGREGATE, ImmutableList.<InvoiceItem>of());
assertEquals(result.size(), 1); assertEquals(result.size(), 1);
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("2025")),0); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("2025")), 0);

usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearDetail>() {});
itemDetails = usageDetail.getTierDetails();


itemDetails = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<List<UsageConsumableInArrearTierUnitDetail>>() {});
// BAR: 101 * 20 = 2020 // BAR: 101 * 20 = 2020
assertEquals(itemDetails.get(0).getTierUnit(), "BAR"); assertEquals(itemDetails.get(0).getTierUnit(), "BAR");
assertEquals(itemDetails.get(0).getTier(), 2); assertEquals(itemDetails.get(0).getTier(), 2);
Expand All @@ -682,9 +685,10 @@ public void testComputeMissingItemsAggregateModeTopTier() throws CatalogApiExcep


result = produceInvoiceItems(rawUsages, TierBlockPolicy.TOP_TIER, UsageDetailMode.AGGREGATE, ImmutableList.<InvoiceItem>of()); result = produceInvoiceItems(rawUsages, TierBlockPolicy.TOP_TIER, UsageDetailMode.AGGREGATE, ImmutableList.<InvoiceItem>of());
assertEquals(result.size(), 1); assertEquals(result.size(), 1);
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("9620")),0); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("9620")), 0);


itemDetails = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<List<UsageConsumableInArrearTierUnitDetail>>() {}); usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearDetail>() {});
itemDetails = usageDetail.getTierDetails();
// BAR: 101 * 20 = 2020 // BAR: 101 * 20 = 2020
assertEquals(itemDetails.get(0).getTierUnit(), "BAR"); assertEquals(itemDetails.get(0).getTierUnit(), "BAR");
assertEquals(itemDetails.get(0).getTier(), 2); assertEquals(itemDetails.get(0).getTier(), 2);
Expand Down Expand Up @@ -725,7 +729,7 @@ public void testComputeMissingItemsDetailModeTopTier() throws CatalogApiExceptio


result = produceInvoiceItems(rawUsages, TierBlockPolicy.TOP_TIER, UsageDetailMode.DETAIL, ImmutableList.<InvoiceItem>of()); result = produceInvoiceItems(rawUsages, TierBlockPolicy.TOP_TIER, UsageDetailMode.DETAIL, ImmutableList.<InvoiceItem>of());
assertEquals(result.size(), 2); assertEquals(result.size(), 2);
// BAR: 101 * 20 = 2020 // BAR: 101 * 20 = 2020
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("2020.0")), 0); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("2020.0")), 0);
assertEquals(result.get(0).getQuantity().intValue(), 101); assertEquals(result.get(0).getQuantity().intValue(), 101);
assertEquals(result.get(0).getRate().compareTo(new BigDecimal("20.0")), 0); assertEquals(result.get(0).getRate().compareTo(new BigDecimal("20.0")), 0);
Expand Down Expand Up @@ -775,19 +779,20 @@ public void testMultipleItemsAndTiersWithExistingItemsAllTiers() throws CatalogA
// Create usage data points (will include already billed + add new usage data) // Create usage data points (will include already billed + add new usage data)
// //
List<RawUsage> rawUsages = new ArrayList<RawUsage>(); List<RawUsage> rawUsages = new ArrayList<RawUsage>();
rawUsages.add(new DefaultRawUsage(subscriptionId, new LocalDate(2014, 03, 20), "FOO", 50L /* already built */+ 20L)); // tier 3 rawUsages.add(new DefaultRawUsage(subscriptionId, new LocalDate(2014, 03, 20), "FOO", 50L /* already built */ + 20L)); // tier 3
rawUsages.add(new DefaultRawUsage(subscriptionId, new LocalDate(2014, 03, 21), "BAR", 80L /* already built */+ 120L)); // tier 2 rawUsages.add(new DefaultRawUsage(subscriptionId, new LocalDate(2014, 03, 21), "BAR", 80L /* already built */ + 120L)); // tier 2


final List<InvoiceItem> existingItems = new ArrayList<InvoiceItem>(); final List<InvoiceItem> existingItems = new ArrayList<InvoiceItem>();
final InvoiceItem ii1 = new UsageInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, usageName, new LocalDate(2014, 03, 20), new LocalDate(2014, 04, 15), new BigDecimal("570.00"), null, currency, null, existingUsageJson); final InvoiceItem ii1 = new UsageInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, usageName, new LocalDate(2014, 03, 20), new LocalDate(2014, 04, 15), new BigDecimal("570.00"), null, currency, null, existingUsageJson);
existingItems.add(ii1); existingItems.add(ii1);



List<InvoiceItem> result = produceInvoiceItems(rawUsages, TierBlockPolicy.ALL_TIERS, UsageDetailMode.AGGREGATE, existingItems); List<InvoiceItem> result = produceInvoiceItems(rawUsages, TierBlockPolicy.ALL_TIERS, UsageDetailMode.AGGREGATE, existingItems);
assertEquals(result.size(), 1); assertEquals(result.size(), 1);
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("3140.00")), 0, String.format("%s != 3140.0", result.get(0).getAmount())); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("3140.00")), 0, String.format("%s != 3140.0", result.get(0).getAmount()));


List<UsageConsumableInArrearTierUnitDetail> itemDetails = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<List<UsageConsumableInArrearTierUnitDetail>>() {}); UsageConsumableInArrearDetail usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearDetail>() {});
List<UsageConsumableInArrearTierUnitDetail> itemDetails = usageDetail.getTierDetails();

// BAR item detail // BAR item detail
assertEquals(itemDetails.get(0).getTierUnit(), "BAR"); assertEquals(itemDetails.get(0).getTierUnit(), "BAR");
assertEquals(itemDetails.get(0).getTier(), 1); assertEquals(itemDetails.get(0).getTier(), 1);
Expand Down

1 comment on commit d65e9e0

@pierre
Copy link
Member

@pierre pierre commented on d65e9e0 Feb 12, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Please sign in to comment.