public AccountData initAccountData(final Clock clock) { final AccountData accountData = new MockAccountBuilder().name(UUIDs.randomUUID().toString().substring(1, 8)) .firstNameLength(6) .email(UUIDs.randomUUID().toString().substring(1, 8)) .phone(UUIDs.randomUUID().toString().substring(1, 8)) .migrated(false) .externalKey(UUIDs.randomUUID().toString()) .billingCycleDayLocal(1) .currency(Currency.USD) .paymentMethodId(UUIDs.randomUUID()) .referenceTime(clock.getUTCNow()) .timeZone(DateTimeZone.forID("Europe/Paris")) .build(); assertNotNull(accountData); return accountData; }
.email(email) .name(name).firstNameLength(firstNameLength) .currency(currency) .billingCycleDayLocal(billCycleDayLocal) .paymentMethodId(paymentMethodId)
this.companyName(data.getCompanyName()); this.country(data.getCountry()); this.currency(data.getCurrency()); this.parentAccountId(data.getParentAccountId()); this.isPaymentDelegatedToParent(data.isPaymentDelegatedToParent());
protected AccountData getAccountData(final int billingDay) { return new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8)) .firstNameLength(6) .email(UUID.randomUUID().toString().substring(1, 8)) .phone(UUID.randomUUID().toString().substring(1, 8)) .migrated(false) .externalKey(UUID.randomUUID().toString().substring(1, 8)) .billingCycleDayLocal(billingDay) .currency(Currency.USD) .paymentMethodId(UUID.randomUUID()) .referenceTime(clock.getUTCNow()) .timeZone(DateTimeZone.UTC) .build(); }
protected AccountData getAccountData(@Nullable final Integer billingDay, final DateTimeZone tz) { final MockAccountBuilder builder = new MockAccountBuilder() .name(UUID.randomUUID().toString().substring(1, 8)) .firstNameLength(6) .email(UUID.randomUUID().toString().substring(1, 8)) .phone(UUID.randomUUID().toString().substring(1, 8)) .migrated(false) .externalKey(UUID.randomUUID().toString().substring(1, 8)) .currency(Currency.USD) .referenceTime(clock.getUTCNow()) .timeZone(tz); if (billingDay != null) { builder.billingCycleDayLocal(billingDay); } return builder.build(); }
protected AccountData getChildAccountData(final int billingDay, final UUID parentAccountId, final boolean isPaymentDelegatedToParent) { return new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8)) .firstNameLength(6) .email(UUID.randomUUID().toString().substring(1, 8)) .phone(UUID.randomUUID().toString().substring(1, 8)) .migrated(false) .externalKey(UUID.randomUUID().toString().substring(1, 8)) .billingCycleDayLocal(billingDay) .currency(Currency.USD) .paymentMethodId(UUID.randomUUID()) .referenceTime(clock.getUTCNow()) .timeZone(DateTimeZone.UTC) .parentAccountId(parentAccountId) .isPaymentDelegatedToParent(isPaymentDelegatedToParent) .build(); }
@BeforeClass(groups = "fast") protected void beforeClass() throws Exception { if (hasFailed()) { return; } super.beforeClass(); final Clock clock = new DefaultClock(); this.account = new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8)) .firstNameLength(6) .email(UUID.randomUUID().toString().substring(1, 8)) .phone(UUID.randomUUID().toString().substring(1, 8)) .migrated(false) .externalKey(UUID.randomUUID().toString().substring(1, 8)) .billingCycleDayLocal(31) .currency(Currency.USD) .paymentMethodId(UUID.randomUUID()) .timeZone(DateTimeZone.UTC) .build(); }
@Test(groups = "slow") public void testOutOfDaylightSavingTransition1() throws Exception { // Transition out of daylight saving is set for Nov 5 // // Because we use 30 days trial, we start a bit before and that way we can check that computation of BCD crossing out of of daylight saving works as expected. // final DateTimeZone tz = DateTimeZone.forID("America/Los_Angeles"); clock.setTime(new DateTime(2017, 11, 1, 00, 30, 0, tz)); final AccountData accountData = new MockAccountBuilder().currency(Currency.USD) .timeZone(tz) .referenceTime(clock.getUTCNow()) .build(); // Create account with non BCD to force junction BCD logic to activate final Account account = createAccountWithNonOsgiPaymentMethod(accountData); createBaseEntitlementAndCheckForCompletion(account.getId(), "bundleKey", "Pistol", ProductCategory.BASE, BillingPeriod.MONTHLY, NextEvent.CREATE, NextEvent.BLOCK, NextEvent.INVOICE); final Account accountWithBCD = accountUserApi.getAccountById(account.getId(), callContext); assertEquals(accountWithBCD.getBillCycleDayLocal().intValue(), 1); busHandler.pushExpectedEvents(NextEvent.PHASE, NextEvent.INVOICE, NextEvent.PAYMENT, NextEvent.INVOICE_PAYMENT); clock.addDays(30); assertListenerStatus(); final List<ExpectedInvoiceItemCheck> expectedInvoices = new ArrayList<ExpectedInvoiceItemCheck>(); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2017, 12, 1), new LocalDate(2018, 1, 1), InvoiceItemType.RECURRING, new BigDecimal("29.95"))); invoiceChecker.checkInvoice(account.getId(), 2, callContext, expectedInvoices); expectedInvoices.clear(); }
public AccountData initAccountData(final Clock clock) { final AccountData accountData = new MockAccountBuilder().name(UUIDs.randomUUID().toString().substring(1, 8)) .firstNameLength(6) .email(UUIDs.randomUUID().toString().substring(1, 8)) .phone(UUIDs.randomUUID().toString().substring(1, 8)) .migrated(false) .externalKey(UUIDs.randomUUID().toString()) .billingCycleDayLocal(1) .currency(Currency.USD) .paymentMethodId(UUIDs.randomUUID()) .referenceTime(clock.getUTCNow()) .timeZone(DateTimeZone.forID("Europe/Paris")) .build(); assertNotNull(accountData); return accountData; }
@Test(groups = "slow") public void testIntoDaylightSavingTransition() throws Exception { // Daylight saving happened on March 12th. // // Because we use 30 days trial, we start a bit before and that way we can check that computation of BCD crossing into daylight saving works as expected. // final DateTimeZone tz = DateTimeZone.forID("America/Los_Angeles"); clock.setTime(new DateTime(2017, 3, 1, 23, 30, 0, tz)); final AccountData accountData = new MockAccountBuilder().currency(Currency.USD) .referenceTime(clock.getUTCNow()) .timeZone(tz) .build(); // Create account with non BCD to force junction BCD logic to activate final Account account = createAccountWithNonOsgiPaymentMethod(accountData); createBaseEntitlementAndCheckForCompletion(account.getId(), "bundleKey", "Pistol", ProductCategory.BASE, BillingPeriod.MONTHLY, NextEvent.CREATE, NextEvent.BLOCK, NextEvent.INVOICE); final Account accountWithBCD = accountUserApi.getAccountById(account.getId(), callContext); assertEquals(accountWithBCD.getBillCycleDayLocal().intValue(), 31); busHandler.pushExpectedEvents(NextEvent.PHASE, NextEvent.INVOICE, NextEvent.PAYMENT, NextEvent.INVOICE_PAYMENT); clock.addDays(30); assertListenerStatus(); final List<ExpectedInvoiceItemCheck> expectedInvoices = new ArrayList<ExpectedInvoiceItemCheck>(); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2017, 3, 31), new LocalDate(2017, 4, 30), InvoiceItemType.RECURRING, new BigDecimal("29.95"))); invoiceChecker.checkInvoice(account.getId(), 2, callContext, expectedInvoices); expectedInvoices.clear(); }
public Account createAccount(final CallContext callContext) throws AccountApiException { final Account accountData = new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8)) .firstNameLength(6) .email(UUID.randomUUID().toString().substring(1, 8)) .phone(UUID.randomUUID().toString().substring(1, 8)) .migrated(false) .externalKey(UUID.randomUUID().toString().substring(1, 8)) .billingCycleDayLocal(31) .currency(accountCurrency) .paymentMethodId(UUID.randomUUID()) .timeZone(DateTimeZone.UTC) .createdDate(clock.getUTCNow()) .build(); final MutableCallContext mutableCallContext = new MutableCallContext(internalCallContext); final Account account; if (isFastTest()) { account = GuicyKillbillTestSuiteNoDB.createMockAccount(accountData, accountUserApi, accountApi, immutableAccountApi, nonEntityDao, clock, internalCallContextFactory, mutableCallContext, internalCallContext); } else { account = accountUserApi.createAccount(accountData, callContext); } GuicyKillbillTestSuite.refreshCallContext(account.getId(), clock, internalCallContextFactory, mutableCallContext, internalCallContext); return account; }
clock.setTime(new DateTime(2016, 11, 5, 23, 30, 0, tz)); final AccountData accountData = new MockAccountBuilder().currency(Currency.USD) .referenceTime(clock.getUTCNow()) .timeZone(tz)
.externalKey(UUID.randomUUID().toString().substring(1, 8)) .billingCycleDayLocal(1) .currency(Currency.USD) .paymentMethodId(UUID.randomUUID()) .referenceTime(clock.getUTCNow())
.externalKey(UUID.randomUUID().toString().substring(1, 8)) .billingCycleDayLocal(1) .currency(Currency.USD) .paymentMethodId(UUID.randomUUID()) .referenceTime(clock.getUTCNow())
.externalKey(UUID.randomUUID().toString().substring(1, 8)) .billingCycleDayLocal(1) .currency(Currency.USD) .paymentMethodId(UUID.randomUUID()) .referenceTime(clock.getUTCNow())
@Test(groups = "slow") public void testIntoDaylightSavingTransition3() throws Exception { final DateTimeZone tz = DateTimeZone.forID("America/Los_Angeles"); clock.setTime(new DateTime(2017, 3, 1, 23, 30, 0, tz)); final AccountData accountData = new MockAccountBuilder().currency(Currency.USD) .timeZone(tz) .referenceTime(clock.getUTCNow()) .build(); // Create account with non BCD to force junction BCD logic to activate final Account account = createAccountWithNonOsgiPaymentMethod(accountData); final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("pistol-monthly-notrial",null); busHandler.pushExpectedEvents(NextEvent.CREATE, NextEvent.BLOCK, NextEvent.INVOICE, NextEvent.INVOICE_PAYMENT, NextEvent.PAYMENT); entitlementApi.createBaseEntitlement(account.getId(), new DefaultEntitlementSpecifier(spec), "bundleExternalKey", null, null, false, true, ImmutableList.<PluginProperty>of(), callContext); assertListenerStatus(); busHandler.pushExpectedEvents(NextEvent.INVOICE, NextEvent.PAYMENT, NextEvent.INVOICE_PAYMENT); // Technically, we should see the invoice at the end of day in the account timezone, but this is not the case, the invoice comes slightly after (30') // clock.setTime(new DateTime(2017, 4, 1, 23, 59, 0, tz)); // // But this is really not very important as long as invoicing is correct clock.addMonths(1); // Add one hour to hit the notification date of 2017-04-02T07:30:00.000Z clock.addDeltaFromReality(3600 * 1000); assertListenerStatus(); }
final AccountData accountData = new MockAccountBuilder().currency(Currency.USD) .timeZone(timeZone)
clock.setTime(new DateTime(2015, 3, 7, 2, 0, 0, tz)); final AccountData accountData = new MockAccountBuilder().currency(Currency.USD) .referenceTime(clock.getUTCNow()) .timeZone(tz)
.email(email) .name(name).firstNameLength(firstNameLength) .currency(currency) .billingCycleDayLocal(billCycleDayLocal) .paymentMethodId(paymentMethodId)
this.companyName(data.getCompanyName()); this.country(data.getCountry()); this.currency(data.getCurrency()); this.parentAccountId(data.getParentAccountId()); this.isPaymentDelegatedToParent(data.isPaymentDelegatedToParent());