@Override public Account createAccount(final AccountData data, final CallContext context) throws AccountApiException { final Account result = new MockAccountBuilder(data).build(); accounts.add(result); return result; }
private void createAccountAndRefreshTimeAwareContext(final DateTimeZone dateTimeZone, final DateTime referenceDateTime) throws AccountApiException { final Account accountData = new MockAccountBuilder().externalKey(UUID.randomUUID().toString()) .timeZone(dateTimeZone) .createdDate(referenceDateTime) .build(); GuicyKillbillTestSuiteNoDB.createMockAccount(accountData, accountUserApi, accountInternalApi, immutableAccountInternalApi, nonEntityDao, clock, internalCallContextFactory, callContext, internalCallContext); } }
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; }
private void refreshCallContext(final DateTime effectiveDateTime, final DateTimeZone timeZone) { final Account account = new MockAccountBuilder().timeZone(timeZone) .createdDate(effectiveDateTime) .referenceTime(effectiveDateTime) .build(); internalCallContext.setFixedOffsetTimeZone(AccountDateTimeUtils.getFixedOffsetTimeZone(account)); internalCallContext.setReferenceTime(account.getReferenceTime()); } }
Assert.assertEquals(history1.getLocale(), createdAccount.getLocale()); final AccountData accountData = new MockAccountBuilder(new DefaultAccount(account)).migrated(false) .locale("FR-CA") .build(); Assert.assertEquals(history2.getLocale(), retrievedAccount.getLocale()); final AccountData accountData2 = new MockAccountBuilder(new DefaultAccount(updatedAccount)).locale("en_US") .build(); final AccountModelDao updatedAccount2 = new AccountModelDao(account.getId(), accountData2);
final String phone, final String notes) { final Account result = new MockAccountBuilder(id) .externalKey(externalKey) .email(email)
@Override public Account createAccount(final AccountData data, final CallContext context) throws AccountApiException { final Account result = new MockAccountBuilder(data).build(); accounts.add(result); return result; }
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(); }
private void createAccountAndRefreshTimeAwareContext(final DateTimeZone dateTimeZone, final DateTime referenceDateTime) throws AccountApiException { final Account accountData = new MockAccountBuilder().externalKey(UUID.randomUUID().toString()) .timeZone(dateTimeZone) .createdDate(referenceDateTime) .build(); GuicyKillbillTestSuiteNoDB.createMockAccount(accountData, accountUserApi, accountInternalApi, immutableAccountInternalApi, nonEntityDao, clock, internalCallContextFactory, callContext, internalCallContext); } }
private void createAccount(final DateTimeZone dateTimeZone, final DateTime referenceDateTime) throws AccountApiException { final Account accountData = new MockAccountBuilder().externalKey(UUID.randomUUID().toString()) .timeZone(dateTimeZone) .referenceTime(referenceDateTime) .createdDate(referenceDateTime) .build(); GuicyKillbillTestSuiteNoDB.createMockAccount(accountData, accountUserApi, accountInternalApi, immutableAccountInternalApi, nonEntityDao, clock, internalCallContextFactory, callContext, internalCallContext); } }
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 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(); }
@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; }
public UUID addTestPaymentMethod(final String pluginName, final Account account, final PaymentMethodPlugin paymentMethodInfo, final Iterable<PluginProperty> pluginProperties) throws Exception { final boolean setDefault = paymentMethodInfo.isDefaultPaymentMethod(); final UUID paymentMethodId = paymentApi.addPaymentMethod(account, paymentMethodInfo.getExternalPaymentMethodId(), pluginName, setDefault, paymentMethodInfo, pluginProperties, context); if (isFastTest() && setDefault) { final Account account1 = new MockAccountBuilder(account).paymentMethodId(paymentMethodId).build(); accountApi.updateAccount(account1, context); } return paymentMethodId; }
private void refreshCallContext(final DateTime effectiveDateTime, final DateTimeZone timeZone) { final Account account = new MockAccountBuilder().timeZone(timeZone) .createdDate(effectiveDateTime) .referenceTime(effectiveDateTime) .build(); internalCallContext.setFixedOffsetTimeZone(AccountDateTimeUtils.getFixedOffsetTimeZone(account)); internalCallContext.setReferenceTime(account.getReferenceTime()); } }
@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(); }