/* * Copyright 2010-2013 Ning, Inc. * Copyright 2014-2017 Groupon, Inc * Copyright 2014-2017 The Billing Project, LLC * * The Billing Project licenses this file to you under the Apache License, version 2.0 * (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package org.killbill.billing.account.api.user; import java.util.UUID; import org.joda.time.DateTimeZone; import org.killbill.billing.account.AccountTestSuiteNoDB; import org.killbill.billing.account.api.AccountData; import org.killbill.billing.account.api.AccountEmail; import org.killbill.billing.account.api.DefaultAccount; import org.killbill.billing.account.api.DefaultAccountEmail; import org.killbill.billing.account.dao.AccountDao; import org.killbill.billing.account.dao.AccountModelDao; import org.killbill.billing.account.dao.MockAccountDao; import org.killbill.billing.callcontext.InternalTenantContext; import org.killbill.billing.catalog.api.Currency; import org.killbill.billing.util.callcontext.CallContext; import org.killbill.billing.util.callcontext.CallContextFactory; import org.killbill.billing.util.callcontext.InternalCallContextFactory; import org.killbill.bus.api.PersistentBus; import org.mockito.Mockito; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class TestDefaultAccountUserApiWithMocks extends AccountTestSuiteNoDB { private final CallContextFactory factory = Mockito.mock(CallContextFactory.class); private final InternalCallContextFactory internalFactory = Mockito.mock(InternalCallContextFactory.class); private final CallContext callContext = Mockito.mock(CallContext.class); private final InternalTenantContext tenantContext = Mockito.mock(InternalTenantContext.class); private AccountDao accountDao; private DefaultAccountUserApi accountUserApi; @BeforeMethod(groups = "fast") public void setUp() throws Exception { accountDao = new MockAccountDao(Mockito.mock(PersistentBus.class), clock); accountUserApi = new DefaultAccountUserApi(immutableAccountInternalApi, accountDao, nonEntityDao, controllerDispatcher, internalFactory); } @Test(groups = "fast", description = "Test Account create API") public void testCreateAccount() throws Exception { final UUID id = UUID.randomUUID(); final String externalKey = UUID.randomUUID().toString(); final String email = UUID.randomUUID().toString(); final String name = UUID.randomUUID().toString(); final Integer firstNameLength = Integer.MAX_VALUE; final Currency currency = Currency.BRL; final Integer billCycleDay = Integer.MAX_VALUE; final UUID paymentMethodId = UUID.randomUUID(); final DateTimeZone timeZone = DateTimeZone.UTC; final String locale = UUID.randomUUID().toString(); final String address1 = UUID.randomUUID().toString(); final String address2 = UUID.randomUUID().toString(); final String companyName = UUID.randomUUID().toString(); final String city = UUID.randomUUID().toString(); final String stateOrProvince = UUID.randomUUID().toString(); final String country = UUID.randomUUID().toString(); final String postalCode = UUID.randomUUID().toString(); final String phone = UUID.randomUUID().toString(); final String notes = UUID.randomUUID().toString(); final Boolean isMigrated = true; final Boolean isNotifiedForInvoices = false; final AccountData data = new DefaultAccount(id, externalKey, email, name, firstNameLength, currency, null, false, billCycleDay, paymentMethodId, timeZone, locale, address1, address2, companyName, city, stateOrProvince, country, postalCode, phone, notes, isMigrated, isNotifiedForInvoices); accountUserApi.createAccount(data, callContext); final AccountModelDao account = accountDao.getAccountByKey(externalKey, tenantContext); Assert.assertEquals(account.getExternalKey(), externalKey); Assert.assertEquals(account.getEmail(), email); Assert.assertEquals(account.getName(), name); Assert.assertEquals(account.getFirstNameLength(), firstNameLength); Assert.assertEquals(account.getCurrency(), currency); Assert.assertEquals(account.getBillingCycleDayLocal(), (Integer) billCycleDay); Assert.assertEquals(account.getPaymentMethodId(), paymentMethodId); Assert.assertEquals(account.getTimeZone(), timeZone); Assert.assertEquals(account.getLocale(), locale); Assert.assertEquals(account.getAddress1(), address1); Assert.assertEquals(account.getAddress2(), address2); Assert.assertEquals(account.getCompanyName(), companyName); Assert.assertEquals(account.getCity(), city); Assert.assertEquals(account.getStateOrProvince(), stateOrProvince); Assert.assertEquals(account.getCountry(), country); Assert.assertEquals(account.getPostalCode(), postalCode); Assert.assertEquals(account.getPhone(), phone); Assert.assertEquals(account.getMigrated(), isMigrated); Assert.assertEquals(account.getIsNotifiedForInvoices(), isNotifiedForInvoices); } @Test(groups = "fast", description = "Test ability to add email to Account") public void testAddEmail() throws Exception { final UUID accountId = UUID.randomUUID(); // Verify the initial state Assert.assertEquals(accountDao.getEmailsByAccountId(accountId, tenantContext).size(), 0); // Add the first email final String emailAddress1 = UUID.randomUUID().toString(); final AccountEmail email1 = new DefaultAccountEmail(accountId, emailAddress1); accountUserApi.addEmail(accountId, email1, callContext); Assert.assertEquals(accountDao.getEmailsByAccountId(accountId, tenantContext).size(), 1); // Add a second one final String emailAddress2 = UUID.randomUUID().toString(); final AccountEmail email2 = new DefaultAccountEmail(accountId, emailAddress2); accountUserApi.addEmail(accountId, email2, callContext); Assert.assertEquals(accountDao.getEmailsByAccountId(accountId, tenantContext).size(), 2); // Remove the first second one accountUserApi.removeEmail(accountId, email1, callContext); Assert.assertEquals(accountDao.getEmailsByAccountId(accountId, tenantContext).size(), 1); } }