public Invoice createInvoice(final LocalDate date, final BigDecimal balance, final List<InvoiceItem> invoiceItems) { final Invoice invoice = Mockito.mock(Invoice.class); Mockito.when(invoice.getBalance()).thenReturn(balance); Mockito.when(invoice.getInvoiceDate()).thenReturn(date); Mockito.when(invoice.getInvoiceItems()).thenReturn(invoiceItems); Mockito.when(invoice.getId()).thenReturn(UUID.randomUUID()); return invoice; }
public BillingState calculateBillingState(final ImmutableAccountData account, final InternalCallContext context) throws OverdueException { final SortedSet<Invoice> unpaidInvoices = unpaidInvoicesForAccount(account.getId(), context); final int numberOfUnpaidInvoices = unpaidInvoices.size(); final BigDecimal unpaidInvoiceBalance = sumBalance(unpaidInvoices); LocalDate dateOfEarliestUnpaidInvoice = null; UUID idOfEarliestUnpaidInvoice = null; final Invoice invoice = earliest(unpaidInvoices); if (invoice != null) { dateOfEarliestUnpaidInvoice = invoice.getInvoiceDate(); idOfEarliestUnpaidInvoice = invoice.getId(); } final PaymentResponse responseForLastFailedPayment = PaymentResponse.INSUFFICIENT_FUNDS; //TODO MDW final List<Tag> accountTags = tagApi.getTags(account.getId(), ObjectType.ACCOUNT, context); final Tag[] tags = accountTags.toArray(new Tag[accountTags.size()]); return new BillingState(account.getId(), numberOfUnpaidInvoices, unpaidInvoiceBalance, dateOfEarliestUnpaidInvoice, idOfEarliestUnpaidInvoice, responseForLastFailedPayment, tags); }
public InvoiceJson(final Invoice input, final String bundleKeys, final List<CreditJson> credits, final List<AuditLog> auditLogs) { this(input.getChargedAmount(), input.getCurrency(), input.getStatus(), input.getCreditedAmount(), input.getRefundedAmount(), input.getId(), input.getInvoiceDate(), input.getTargetDate(), String.valueOf(input.getInvoiceNumber()), input.getBalance(), input.getAccountId(), bundleKeys, credits, null, input.isParentInvoice(), input.getParentInvoiceId(), input.getParentAccountId(), toAuditLogJson(auditLogs)); }
assertEquals(childInvoice.getNumberOfItems(), 2); assertEquals(childInvoice.getInvoiceItems().get(0).getInvoiceItemType(), InvoiceItemType.RECURRING); assertEquals(childInvoice.getInvoiceItems().get(0).getAmount().compareTo(BigDecimal.valueOf(29.95)), 0); assertEquals(childInvoice.getInvoiceItems().get(1).getInvoiceItemType(), InvoiceItemType.CBA_ADJ); assertEquals(childInvoice.getInvoiceItems().get(1).getAmount().compareTo(BigDecimal.valueOf(-10.00)), 0); assertEquals(childInvoice.getBalance().compareTo(BigDecimal.ZERO), 0); assertEquals(parentInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getStatus(), InvoiceStatus.DRAFT); assertTrue(parentInvoice.isParentInvoice()); assertEquals(parentInvoice.getBalance().compareTo(BigDecimal.ZERO), 0); assertEquals(parentInvoice.getInvoiceItems().get(0).getAmount().compareTo(BigDecimal.valueOf(19.95)), 0); assertEquals(parentInvoice.getStatus(), InvoiceStatus.COMMITTED); assertTrue(parentInvoice.isParentInvoice()); assertEquals(parentInvoice.getChargedAmount().compareTo(BigDecimal.valueOf(19.95)), 0); assertEquals(parentInvoice.getCreditedAmount().compareTo(BigDecimal.ZERO), 0);
public InvoiceModelDao(final Invoice invoice) { this(invoice.getId(), invoice.getCreatedDate(), invoice.getAccountId(), invoice.getInvoiceNumber(), invoice.getInvoiceDate(), invoice.getTargetDate(), invoice.getCurrency(), invoice.isMigrationInvoice(), invoice.getStatus(), invoice.isParentInvoice()); }
Mockito.when(invoice.getId()).thenReturn(invoiceId); Mockito.when(invoice.getAccountId()).thenReturn(accountId); final LocalDate today = clock.getUTCToday(); Mockito.when(invoice.getInvoiceDate()).thenReturn(today); Mockito.when(invoice.getTargetDate()).thenReturn(today); Mockito.when(invoice.getCurrency()).thenReturn(currency); Mockito.when(invoice.isMigrationInvoice()).thenReturn(false); Mockito.when(invoice.getStatus()).thenReturn(InvoiceStatus.COMMITTED); invoiceItems.add(invoiceItem); Mockito.when(invoice.getInvoiceItems()).thenReturn(invoiceItems);
public void checkInvoicesEqual(final InvoiceModelDao retrievedInvoice, final Invoice invoice) { Assert.assertEquals(retrievedInvoice.getId(), invoice.getId()); Assert.assertEquals(retrievedInvoice.getAccountId(), invoice.getAccountId()); Assert.assertEquals(retrievedInvoice.getCurrency(), invoice.getCurrency()); Assert.assertEquals(retrievedInvoice.getInvoiceDate(), invoice.getInvoiceDate()); Assert.assertEquals(retrievedInvoice.getTargetDate(), invoice.getTargetDate()); Assert.assertEquals(retrievedInvoice.getInvoiceItems().size(), invoice.getInvoiceItems().size()); Assert.assertEquals(retrievedInvoice.getInvoicePayments().size(), invoice.getPayments().size()); }
private void printDetailInvoice(final Invoice invoice) { log.info("-------------------- START DETAIL ----------------------"); log.info("Invoice " + invoice.getId() + ": BALANCE = " + invoice.getBalance() + ", CBA = " + invoice.getCreditedAmount() + ", CHARGE_AMOUNT = " + invoice.getChargedAmount() + ", ADJ_AMOUNT = " + invoice.getCreditedAmount()); for (final InvoiceItem cur : invoice.getInvoiceItems()) { log.info(cur.toString()); } log.info("-------------------- END DETAIL ----------------------"); } }
assertEquals(childInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getStatus(), InvoiceStatus.COMMITTED); assertTrue(parentInvoice.isParentInvoice()); assertEquals(parentInvoice.getBalance().compareTo(BigDecimal.ZERO), 0); assertEquals(parentInvoice.getChargedAmount().compareTo(BigDecimal.valueOf(249.95)), 0); childInvoice.getId(), childInvoice.getInvoiceItems().get(0).getId(), clock.getToday(childAccount.getTimeZone()), BigDecimal.TEN, childInvoice = invoiceUserApi.getInvoice(childInvoice.getId(), callContext); assertEquals(childInvoice.getNumberOfItems(), 3); assertEquals(childInvoice.getInvoiceItems().get(0).getInvoiceItemType(), InvoiceItemType.RECURRING); assertEquals(childInvoice.getInvoiceItems().get(0).getAmount().compareTo(BigDecimal.valueOf(249.95)), 0); assertEquals(childInvoice.getInvoiceItems().get(1).getInvoiceItemType(), InvoiceItemType.ITEM_ADJ); assertEquals(childInvoice.getInvoiceItems().get(1).getAmount().compareTo(BigDecimal.valueOf(-10)), 0); assertEquals(childInvoice.getInvoiceItems().get(2).getInvoiceItemType(), InvoiceItemType.CBA_ADJ); assertEquals(childInvoice.getInvoiceItems().get(2).getAmount().compareTo(BigDecimal.valueOf(10)), 0); parentInvoice = invoiceUserApi.getInvoice(parentInvoice.getId(), callContext); assertEquals(parentInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getPaidAmount().compareTo(BigDecimal.valueOf(249.95)), 0); assertEquals(parentInvoice.getInvoiceItems().get(0).getInvoiceItemType(), InvoiceItemType.PARENT_SUMMARY);
private Invoice createInvoice() { final LocalDate startDate = new LocalDate(new DateTime().minusMonths(1), DateTimeZone.UTC); final LocalDate endDate = new LocalDate(DateTimeZone.UTC); final BigDecimal price1 = new BigDecimal("29.95"); final BigDecimal price2 = new BigDecimal("59.95"); final Invoice dummyInvoice = Mockito.mock(Invoice.class); Mockito.when(dummyInvoice.getInvoiceDate()).thenReturn(startDate); Mockito.when(dummyInvoice.getInvoiceNumber()).thenReturn(42); Mockito.when(dummyInvoice.getCurrency()).thenReturn(Currency.USD); Mockito.when(dummyInvoice.getChargedAmount()).thenReturn(price1.add(price2)); Mockito.when(dummyInvoice.getPaidAmount()).thenReturn(BigDecimal.ZERO); Mockito.when(dummyInvoice.getBalance()).thenReturn(price1.add(price2)); final List<InvoiceItem> items = new ArrayList<InvoiceItem>(); items.add(createInvoiceItem(price1, "Domain 1", startDate, endDate, "ning-plus")); items.add(createInvoiceItem(price2, "Domain 2", startDate, endDate, "ning-pro")); Mockito.when(dummyInvoice.getInvoiceItems()).thenReturn(items); return dummyInvoice; }
public static Invoice buildInvoice(final Account account) { final Invoice invoice = Mockito.mock(Invoice.class); Mockito.when(invoice.getId()).thenReturn(UUID.randomUUID()); // To work-around org.mockito.exceptions.misusing.UnfinishedStubbingException final UUID accountId = account.getId(); final Currency currency = account.getCurrency(); Mockito.when(invoice.getAccountId()).thenReturn(accountId); Mockito.when(invoice.getInvoiceDate()).thenReturn(new LocalDate()); Mockito.when(invoice.getCurrency()).thenReturn(currency); Mockito.when(invoice.getInvoiceItems()).thenReturn(new LinkedList<InvoiceItem>()); return invoice; }
private InvoiceItem mergeCBAItem(final List<InvoiceItem> invoiceItems, InvoiceItem mergedCBAItem, final InvoiceItem item) { if (mergedCBAItem == null) { mergedCBAItem = item; } else { // This is really just to be safe - they should always have the same currency if (!mergedCBAItem.getCurrency().equals(item.getCurrency())) { invoiceItems.add(item); } else { mergedCBAItem = new CreditBalanceAdjInvoiceItem(invoice.getId(), invoice.getAccountId(), invoice.getInvoiceDate(), mergedCBAItem.getAmount().add(item.getAmount()), mergedCBAItem.getCurrency()); } } return mergedCBAItem; }
assertEquals(invoices.size(), 2); final Invoice invoice1 = invoices.get(0).getInvoiceItems().get(0).getInvoiceItemType() == InvoiceItemType.RECURRING ? invoices.get(0) : invoices.get(1); assertTrue(invoice1.getBalance().compareTo(new BigDecimal("249.95")) == 0); assertTrue(invoice1.getPaidAmount().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice1.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice1.getPayments().size(), 1); assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(BigDecimal.ZERO), 0); assertEquals(invoice1.getPayments().get(0).getCurrency(), Currency.USD); assertFalse(invoice1.getPayments().get(0).isSuccess()); assertNotNull(invoice1.getPayments().get(0).getPaymentId()); assertListenerStatus(); final Invoice invoice2 = invoiceUserApi.getInvoice(invoice1.getId(), callContext); assertTrue(invoice2.getBalance().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice2.getPaidAmount().compareTo(new BigDecimal("249.95")) == 0); assertTrue(invoice2.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice2.getPayments().size(), 1); assertTrue(invoice2.getPayments().get(0).isSuccess());
assertEquals(parentInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getStatus(), InvoiceStatus.DRAFT); assertTrue(parentInvoice.isParentInvoice()); assertEquals(parentInvoice.getBalance().compareTo(BigDecimal.ZERO), 0); assertEquals(parentInvoice.getInvoiceItems().get(0).getAmount().compareTo(BigDecimal.valueOf(29.95)), 0); assertEquals(parentInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getStatus(), InvoiceStatus.DRAFT); assertTrue(parentInvoice.isParentInvoice()); assertEquals(parentInvoice.getBalance().compareTo(BigDecimal.ZERO), 0); assertListenerStatus(); parentInvoice = invoiceUserApi.getInvoice(parentInvoice.getId(), callContext); assertEquals(parentInvoice.getStatus(), InvoiceStatus.COMMITTED); assertEquals(parentInvoice.getBalance().compareTo(BigDecimal.ZERO), 0);
private InvoiceItem createTaxInvoiceItem(final Invoice invoice) { return new TaxInvoiceItem(invoice.getId(), invoice.getAccountId(), null, "Tax Item", clock.getUTCNow().toLocalDate(), BigDecimal.ONE, invoice.getCurrency()); } }
@Test(groups = "fast") public void testWithSingleMonthlyEvent() throws InvoiceApiException, CatalogApiException { final BillingEventSet events = new MockBillingEventSet(); final SubscriptionBase sub = createSubscription(); final LocalDate startDate = invoiceUtil.buildDate(2011, 9, 1); final Plan plan = new MockPlan(); final BigDecimal rate1 = TEN; final PlanPhase phase = createMockMonthlyPlanPhase(rate1); final BillingEvent event = createBillingEvent(sub.getId(), sub.getBundleId(), startDate, plan, phase, 1); events.add(event); final LocalDate targetDate = invoiceUtil.buildDate(2011, 10, 3); final InvoiceWithMetadata invoiceWithMetadata = generator.generateInvoice(account, events, null, null, targetDate, Currency.USD, internalCallContext); final Invoice invoice = invoiceWithMetadata.getInvoice(); assertNotNull(invoice); assertEquals(invoice.getNumberOfItems(), 2); assertEquals(invoice.getBalance(), KillBillMoney.of(TWENTY, invoice.getCurrency())); assertEquals(invoice.getInvoiceItems().get(0).getSubscriptionId(), sub.getId()); assertEquals(invoice.getInvoiceItems().get(0).getInvoiceItemType(), InvoiceItemType.RECURRING); assertEquals(invoice.getInvoiceItems().get(0).getStartDate(), new LocalDate(2011, 9, 1)); assertEquals(invoice.getInvoiceItems().get(0).getEndDate(), new LocalDate(2011, 10, 1)); assertEquals(invoice.getInvoiceItems().get(1).getInvoiceItemType(), InvoiceItemType.RECURRING); assertEquals(invoice.getInvoiceItems().get(1).getStartDate(), new LocalDate(2011, 10, 1)); assertEquals(invoice.getInvoiceItems().get(1).getEndDate(), new LocalDate(2011, 11, 1)); }
assertEquals(childInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getStatus(), InvoiceStatus.COMMITTED); assertTrue(parentInvoice.isParentInvoice()); assertEquals(parentInvoice.getChargedAmount().compareTo(BigDecimal.valueOf(249.95)), 0); assertEquals(childInvoice.getNumberOfItems(), 1); assertEquals(childInvoice.getChargedAmount().compareTo(BigDecimal.valueOf(249.95)), 0); assertEquals(childInvoice.getInvoiceItems().get(0).getInvoiceItemType(), InvoiceItemType.RECURRING); assertEquals(childInvoice.getNumberOfItems(), 2); assertEquals(childInvoice.getInvoiceItems().get(0).getInvoiceItemType(), InvoiceItemType.REPAIR_ADJ); assertEquals(childInvoice.getInvoiceItems().get(0).getAmount().compareTo(BigDecimal.valueOf(-241.62)), 0); assertEquals(childInvoice.getInvoiceItems().get(1).getInvoiceItemType(), InvoiceItemType.CBA_ADJ); assertEquals(childInvoice.getInvoiceItems().get(1).getAmount().compareTo(BigDecimal.valueOf(241.62)), 0); assertEquals(parentInvoice.getNumberOfItems(), 1); assertEquals(parentInvoice.getStatus(), InvoiceStatus.COMMITTED); assertTrue(parentInvoice.isParentInvoice()); assertEquals(parentInvoice.getChargedAmount().compareTo(BigDecimal.valueOf(249.95)), 0);
@BeforeMethod(groups = "fast") public void setUp() throws Exception { account = TestUtils.buildAccount(Currency.BTC, "US"); invoice1 = TestUtils.buildInvoice(account); invoice1TaxableItem = TestUtils.buildInvoiceItem(invoice1, InvoiceItemType.EXTERNAL_CHARGE, BigDecimal.TEN, null); invoice1TaxItem = PluginInvoiceItem.createTaxItem(invoice1TaxableItem, invoice1.getId(), invoice1TaxableItem.getStartDate(), null, BigDecimal.ONE, "TestNG tax"); invoice1.getInvoiceItems().add(invoice1TaxableItem); invoice1.getInvoiceItems().add(invoice1TaxItem); }
private void testInvoiceGeneration(final UUID accountId, final BillingEventSet events, final List<Invoice> existingInvoices, final LocalDate targetDate, final int expectedNumberOfItems, final BigDecimal expectedAmount) throws InvoiceApiException { final Currency currency = Currency.USD; final InvoiceWithMetadata invoiceWithMetadata = generator.generateInvoice(account, events, existingInvoices, null, targetDate, currency, internalCallContext); final Invoice invoice = invoiceWithMetadata.getInvoice(); assertNotNull(invoice); assertEquals(invoice.getNumberOfItems(), expectedNumberOfItems); existingInvoices.add(invoice); distributeItems(existingInvoices); assertEquals(invoice.getBalance(), KillBillMoney.of(expectedAmount, invoice.getCurrency())); }
@Override public Void apply(@Nullable final Void input) { try { invoiceUserApi.insertInvoiceItemAdjustment(account.getId(), invoice.getId(), invoice.getInvoiceItems().get(itemNb - 1).getId(), invoice.getInvoiceDate(), null, null, null, callContext); } catch (final InvoiceApiException e) { fail(e.toString()); } return null; } }, events);