@Test(groups = "fast") public void testUsageCapacityInAdvance() { try { final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("UsageExperimental.xml").toExternalForm(), StandaloneCatalog.class); final Usage[] usages = getUsages(catalog, "capacity-in-advance-monthly"); assertEquals(usages.length, 1); final Usage usage = usages[0]; assertEquals(usage.getName(), "capacity-in-advance-monthly-usage1"); assertEquals(usage.getBillingPeriod(), BillingPeriod.MONTHLY); assertEquals(usage.getUsageType(), UsageType.CAPACITY); assertEquals(usage.getBillingMode(), BillingMode.IN_ADVANCE); assertEquals(usage.getTierBlockPolicy(), TierBlockPolicy.ALL_TIERS); assertEquals(usage.getBlocks().length, 0); assertEquals(usage.getTiers().length, 0); assertEquals(usage.getLimits().length, 1); assertEquals(usage.getLimits()[0].getUnit().getName(), "members"); assertEquals(usage.getLimits()[0].getMax(), new Double("100")); assertEquals(usage.getRecurringPrice().getPrices().length, 1); assertEquals(usage.getRecurringPrice().getPrices()[0].getCurrency(), Currency.BTC); assertEquals(usage.getRecurringPrice().getPrices()[0].getValue(), new BigDecimal("100.00")); } catch (Exception e) { Assert.fail(e.toString()); } }
@Test(groups = "fast") public void testUsageConsumableInAdvanceTopUp() { try { final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("UsageExperimental.xml").toExternalForm(), StandaloneCatalog.class); final Usage[] usages = getUsages(catalog, "consumable-in-advance-topup"); assertEquals(usages.length, 1); final Usage usage = usages[0]; assertEquals(usage.getName(), "consumable-in-advance-topup-usage1"); assertEquals(usage.getBillingPeriod(), BillingPeriod.NO_BILLING_PERIOD); assertEquals(usage.getUsageType(), UsageType.CONSUMABLE); assertEquals(usage.getBillingMode(), BillingMode.IN_ADVANCE); assertEquals(usage.getLimits().length, 0); assertEquals(usage.getTiers().length, 0); assertEquals(usage.getBlocks().length, 1); assertEquals(usage.getBlocks()[0].getUnit().getName(), "fastrack-tokens"); assertEquals(usage.getBlocks()[0].getSize(), new Double("10")); assertEquals(usage.getBlocks()[0].getPrice().getPrices().length, 1); assertEquals(usage.getBlocks()[0].getPrice().getPrices()[0].getCurrency(), Currency.BTC); assertEquals(usage.getBlocks()[0].getPrice().getPrices()[0].getValue(), new BigDecimal("0.10")); assertEquals(usage.getBlocks()[0].getMinTopUpCredit(), new Double("5")); } catch (Exception e) { Assert.fail(e.toString()); } }
@Test(groups = "fast") public void testUsageConsumableInAdvancePrepayCredit() { try { final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("UsageExperimental.xml").toExternalForm(), StandaloneCatalog.class); final Usage[] usages = getUsages(catalog, "consumable-in-advance-prepay-credit-monthly"); assertEquals(usages.length, 1); final Usage usage = usages[0]; assertEquals(usage.getName(), "consumable-in-advance-prepay-credit-monthly-usage1"); assertEquals(usage.getBillingPeriod(), BillingPeriod.MONTHLY); assertEquals(usage.getUsageType(), UsageType.CONSUMABLE); assertEquals(usage.getBillingMode(), BillingMode.IN_ADVANCE); assertEquals(usage.getLimits().length, 0); assertEquals(usage.getTiers().length, 0); assertEquals(usage.getBlocks().length, 1); assertEquals(usage.getBlocks()[0].getUnit().getName(), "cell-phone-minutes"); assertEquals(usage.getBlocks()[0].getSize(), new Double("1000")); assertEquals(usage.getBlocks()[0].getPrice().getPrices().length, 1); assertEquals(usage.getBlocks()[0].getPrice().getPrices()[0].getCurrency(), Currency.BTC); assertEquals(usage.getBlocks()[0].getPrice().getPrices()[0].getValue(), new BigDecimal("0.10")); } catch (Exception e) { Assert.fail(e.toString()); } }
this.tierBlockPolicy = in.getTierBlockPolicy(); this.billingPeriod = in.getBillingPeriod(); this.billingMode = in.getBillingMode(); this.limits = (DefaultLimit[]) in.getLimits(); this.blocks = (DefaultBlock[]) in.getBlocks();
assertEquals(usage.getBillingPeriod(), BillingPeriod.MONTHLY); assertEquals(usage.getUsageType(), UsageType.CONSUMABLE); assertEquals(usage.getBillingMode(), BillingMode.IN_ARREAR);
private DefaultUsage toDefaultUsage(final Usage input) { final DefaultUsage result = new DefaultUsage(); result.setName(input.getName()); result.setBillingMode(input.getBillingMode()); result.setBillingPeriod(input.getBillingPeriod()); result.setUsageType(input.getUsageType()); result.setTierBlockPolicy(input.getTierBlockPolicy()); if (input.getLimits() != null && input.getLimits().length > 0) { result.setLimits(toDefaultLimits(Arrays.asList(input.getLimits()))); } if (input.getBlocks() != null && input.getBlocks().length > 0) { result.setBlocks(toDefaultBlocks(Arrays.asList(input.getBlocks()))); } if (input.getTiers() != null && input.getTiers().length > 0) { result.setTiers(toDefaultTiers(Arrays.asList(input.getTiers()))); } result.setFixedPrice(toDefaultInternationalPrice(input.getFixedPrice())); result.setRecurringPrice(toDefaultInternationalPrice(input.getRecurringPrice())); return result; }
assertEquals(usage.getBillingPeriod(), BillingPeriod.MONTHLY); assertEquals(usage.getUsageType(), UsageType.CAPACITY); assertEquals(usage.getBillingMode(), BillingMode.IN_ARREAR);
@Override public boolean apply(@Nullable final Usage input) { return input.getBillingMode() == BillingMode.IN_ARREAR; } })) {
private List<Usage> findUsageInArrearUsages(final BillingEvent event) { if (event.getUsages().isEmpty()) { return Collections.emptyList(); } final List<Usage> result = Lists.newArrayList(); for (final Usage usage : event.getUsages()) { if (usage.getBillingMode() != BillingMode.IN_ARREAR) { continue; } result.add(usage); } return result; }
public static List<Tier> getCapacityInArrearTier(final Usage usage) { Preconditions.checkArgument(usage.getBillingMode() == BillingMode.IN_ARREAR && usage.getUsageType() == UsageType.CAPACITY); Preconditions.checkArgument(usage.getTiers().length > 0); return ImmutableList.copyOf(usage.getTiers()); }
public static Set<String> getConsumableInArrearUnitTypes(final Usage usage) { Preconditions.checkArgument(usage.getBillingMode() == BillingMode.IN_ARREAR && usage.getUsageType() == UsageType.CONSUMABLE); Preconditions.checkArgument(usage.getTiers().length > 0); final Set<String> result = new HashSet<String>(); for (Tier tier : usage.getTiers()) { for (TieredBlock tierBlock : tier.getTieredBlocks()) { result.add(tierBlock.getUnit().getName()); } } return result; }
public static Set<String> getCapacityInArrearUnitTypes(final Usage usage) { Preconditions.checkArgument(usage.getBillingMode() == BillingMode.IN_ARREAR && usage.getUsageType() == UsageType.CAPACITY); Preconditions.checkArgument(usage.getTiers().length > 0); final Set<String> result = new HashSet<String>(); for (Tier tier : usage.getTiers()) { for (Limit limit : tier.getLimits()) { result.add(limit.getUnit().getName()); } } return result; }
public static List<TieredBlock> getConsumableInArrearTieredBlocks(final Usage usage, final String unitType) { Preconditions.checkArgument(usage.getBillingMode() == BillingMode.IN_ARREAR && usage.getUsageType() == UsageType.CONSUMABLE); Preconditions.checkArgument(usage.getTiers().length > 0); final List<TieredBlock> result = Lists.newLinkedList(); for (Tier tier : usage.getTiers()) { boolean found = false; for (TieredBlock tierBlock : tier.getTieredBlocks()) { if (tierBlock.getUnit().getName().equals(unitType)) { result.add(tierBlock); found = true; break; } } // We expect this method to return an ordered list of TieredBlock, each for each tier. Preconditions.checkState(found, "Catalog issue in usage section '%s': Missing tierBlock definition for unit '%s'", usage.getName(), unitType); } return result; }
private void addTransitionTimesForBillingEvent(final LocalDate startDate, final LocalDate endDate, final int bcd) { final BillingIntervalDetail bid = new BillingIntervalDetail(startDate, endDate, targetDate, bcd, usage.getBillingPeriod(), usage.getBillingMode()); int numberOfPeriod = 0; // First billingCycleDate prior startDate LocalDate nextBillCycleDate = bid.getFutureBillingDateFor(numberOfPeriod); while (!nextBillCycleDate.isAfter(endDate)) { if (transitionTimes.isEmpty() || nextBillCycleDate.isAfter(transitionTimes.get(transitionTimes.size() - 1))) { if (nextBillCycleDate.compareTo(rawUsageStartDate) >= 0) { transitionTimes.add(nextBillCycleDate); } } numberOfPeriod++; nextBillCycleDate = bid.getFutureBillingDateFor(numberOfPeriod); } }
public PhasePriceJson(final String planName, final String phaseName, final String phaseType, final BigDecimal fixedPrice, final BigDecimal recurringPrice, final Usage[] usagePrices, final Currency currency) throws CatalogApiException { this.planName = planName; this.phaseName = phaseName; this.phaseType = phaseType; this.fixedPrice = fixedPrice; this.recurringPrice = recurringPrice; this.usagePrices = new LinkedList<UsagePriceJson>(); for (final Usage usage : usagePrices) { List<TierPriceJson> usageTierPrices = new LinkedList<TierPriceJson>(); for (final Tier tier : usage.getTiers()) { List<BlockPriceJson> blockPrices = new LinkedList<BlockPriceJson>(); for (final TieredBlock block : tier.getTieredBlocks()) { BlockPriceJson blockPriceJson = new BlockPriceJson(block.getUnit().getName(), block.getSize(), block.getPrice().getPrice(currency), block.getMax()); blockPrices.add(blockPriceJson); } TierPriceJson tierPriceJson = new TierPriceJson(blockPrices); usageTierPrices.add(tierPriceJson); } final UsagePriceJson usagePriceJson = new UsagePriceJson(usage.getName(), usage.getUsageType(), usage.getBillingMode(), usage.getTierBlockPolicy(), usageTierPrices); this.usagePrices.add(usagePriceJson); } }
@Test(groups = "fast") public void testUsageCapacityInAdvance() { try { final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("UsageExperimental.xml").toExternalForm(), StandaloneCatalog.class); final Usage[] usages = getUsages(catalog, "capacity-in-advance-monthly"); assertEquals(usages.length, 1); final Usage usage = usages[0]; assertEquals(usage.getName(), "capacity-in-advance-monthly-usage1"); assertEquals(usage.getBillingPeriod(), BillingPeriod.MONTHLY); assertEquals(usage.getUsageType(), UsageType.CAPACITY); assertEquals(usage.getBillingMode(), BillingMode.IN_ADVANCE); assertEquals(usage.getTierBlockPolicy(), TierBlockPolicy.ALL_TIERS); assertEquals(usage.getBlocks().length, 0); assertEquals(usage.getTiers().length, 0); assertEquals(usage.getLimits().length, 1); assertEquals(usage.getLimits()[0].getUnit().getName(), "members"); assertEquals(usage.getLimits()[0].getMax(), new Double("100")); assertEquals(usage.getRecurringPrice().getPrices().length, 1); assertEquals(usage.getRecurringPrice().getPrices()[0].getCurrency(), Currency.BTC); assertEquals(usage.getRecurringPrice().getPrices()[0].getValue(), new BigDecimal("100.00")); } catch (Exception e) { Assert.fail(e.toString()); } }
@Test(groups = "fast") public void testUsageConsumableInAdvancePrepayCredit() { try { final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("UsageExperimental.xml").toExternalForm(), StandaloneCatalog.class); final Usage[] usages = getUsages(catalog, "consumable-in-advance-prepay-credit-monthly"); assertEquals(usages.length, 1); final Usage usage = usages[0]; assertEquals(usage.getName(), "consumable-in-advance-prepay-credit-monthly-usage1"); assertEquals(usage.getBillingPeriod(), BillingPeriod.MONTHLY); assertEquals(usage.getUsageType(), UsageType.CONSUMABLE); assertEquals(usage.getBillingMode(), BillingMode.IN_ADVANCE); assertEquals(usage.getLimits().length, 0); assertEquals(usage.getTiers().length, 0); assertEquals(usage.getBlocks().length, 1); assertEquals(usage.getBlocks()[0].getUnit().getName(), "cell-phone-minutes"); assertEquals(usage.getBlocks()[0].getSize(), new Double("1000")); assertEquals(usage.getBlocks()[0].getPrice().getPrices().length, 1); assertEquals(usage.getBlocks()[0].getPrice().getPrices()[0].getCurrency(), Currency.BTC); assertEquals(usage.getBlocks()[0].getPrice().getPrices()[0].getValue(), new BigDecimal("0.10")); } catch (Exception e) { Assert.fail(e.toString()); } }
@Test(groups = "fast") public void testUsageConsumableInAdvanceTopUp() { try { final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("UsageExperimental.xml").toExternalForm(), StandaloneCatalog.class); final Usage[] usages = getUsages(catalog, "consumable-in-advance-topup"); assertEquals(usages.length, 1); final Usage usage = usages[0]; assertEquals(usage.getName(), "consumable-in-advance-topup-usage1"); assertEquals(usage.getBillingPeriod(), BillingPeriod.NO_BILLING_PERIOD); assertEquals(usage.getUsageType(), UsageType.CONSUMABLE); assertEquals(usage.getBillingMode(), BillingMode.IN_ADVANCE); assertEquals(usage.getLimits().length, 0); assertEquals(usage.getTiers().length, 0); assertEquals(usage.getBlocks().length, 1); assertEquals(usage.getBlocks()[0].getUnit().getName(), "fastrack-tokens"); assertEquals(usage.getBlocks()[0].getSize(), new Double("10")); assertEquals(usage.getBlocks()[0].getPrice().getPrices().length, 1); assertEquals(usage.getBlocks()[0].getPrice().getPrices()[0].getCurrency(), Currency.BTC); assertEquals(usage.getBlocks()[0].getPrice().getPrices()[0].getValue(), new BigDecimal("0.10")); assertEquals(usage.getBlocks()[0].getMinTopUpCredit(), new Double("5")); } catch (Exception e) { Assert.fail(e.toString()); } }
assertEquals(usage.getBillingPeriod(), BillingPeriod.MONTHLY); assertEquals(usage.getUsageType(), UsageType.CONSUMABLE); assertEquals(usage.getBillingMode(), BillingMode.IN_ARREAR);
private DefaultUsage toDefaultUsage(final Usage input) { final DefaultUsage result = new DefaultUsage(); result.setName(input.getName()); result.setBillingMode(input.getBillingMode()); result.setBillingPeriod(input.getBillingPeriod()); result.setUsageType(input.getUsageType()); result.setTierBlockPolicy(input.getTierBlockPolicy()); if (input.getLimits() != null && input.getLimits().length > 0) { result.setLimits(toDefaultLimits(Arrays.asList(input.getLimits()))); } if (input.getBlocks() != null && input.getBlocks().length > 0) { result.setBlocks(toDefaultBlocks(Arrays.asList(input.getBlocks()))); } if (input.getTiers() != null && input.getTiers().length > 0) { result.setTiers(toDefaultTiers(Arrays.asList(input.getTiers()))); } result.setFixedPrice(toDefaultInternationalPrice(input.getFixedPrice())); result.setRecurringPrice(toDefaultInternationalPrice(input.getRecurringPrice())); return result; }