/* * #%L * BroadleafCommerce Integration * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * Licensed 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. * #L% */ package org.broadleafcommerce.profile.web.core.controller; import org.broadleafcommerce.profile.core.domain.Customer; import org.broadleafcommerce.profile.core.domain.CustomerPhone; import org.broadleafcommerce.profile.core.service.CustomerPhoneService; import org.broadleafcommerce.profile.core.service.CustomerService; import org.broadleafcommerce.profile.web.controller.CustomerPhoneController; import org.broadleafcommerce.profile.web.core.controller.dataprovider.CustomerPhoneControllerTestDataProvider; import org.broadleafcommerce.profile.web.core.model.PhoneNameForm; import org.broadleafcommerce.profile.web.core.security.CustomerStateRequestProcessor; import org.broadleafcommerce.test.BaseTest; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.annotation.Rollback; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.BindingResult; import org.testng.annotations.Test; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; public class CustomerPhoneControllerTest extends BaseTest { @Resource private CustomerPhoneController customerPhoneController; @Resource private CustomerPhoneService customerPhoneService; @Resource private CustomerService customerService; private final List<Long> createdCustomerPhoneIds = new ArrayList<Long>(); private final Long userId = 1L; private MockHttpServletRequest request; private static final String SUCCESS = "customerPhones"; @Test(groups = "createCustomerPhoneFromController", dataProvider = "setupCustomerPhoneControllerData", dataProviderClass = CustomerPhoneControllerTestDataProvider.class, dependsOnGroups = "readCustomer") @Transactional @Rollback(false) public void createCustomerPhoneFromController(PhoneNameForm phoneNameForm) { BindingResult errors = new BeanPropertyBindingResult(phoneNameForm, "phoneNameForm"); Customer customer = customerService.readCustomerById(userId); request = this.getNewServletInstance(); request.setAttribute(CustomerStateRequestProcessor.getCustomerRequestAttributeName(), customer); String view = customerPhoneController.savePhone(phoneNameForm, errors, request, null, null); assert (view.indexOf(SUCCESS) >= 0); List<CustomerPhone> phones = customerPhoneService.readAllCustomerPhonesByCustomerId(1L); boolean inPhoneList = false; Long id = (Long) request.getAttribute("customerPhoneId"); assert (id != null); for (CustomerPhone p : phones) { if ((p.getPhoneName() != null) && p.getPhoneName().equals(phoneNameForm.getPhoneName())) { inPhoneList = true; } } assert (inPhoneList == true); createdCustomerPhoneIds.add(id); } @Test(groups = "makePhoneDefaultOnCustomerPhoneController", dependsOnGroups = "createCustomerPhoneFromController") @Transactional public void makePhoneDefaultOnCustomerPhoneController() { Long nonDefaultPhoneId = null; List<CustomerPhone> phones_1 = customerPhoneService.readAllCustomerPhonesByCustomerId(1L); for (CustomerPhone p : phones_1) { if (!p.getPhone().isDefault()) { nonDefaultPhoneId = p.getId(); break; } } request = this.getNewServletInstance(); String view = customerPhoneController.makePhoneDefault(nonDefaultPhoneId, request); assert (view.indexOf("viewPhone") >= 0); List<CustomerPhone> phones = customerPhoneService.readAllCustomerPhonesByCustomerId(1L); for (CustomerPhone p : phones) { if (p.getId() == nonDefaultPhoneId) { assert (p.getPhone().isDefault()); break; } } } @Test(groups = "readCustomerPhoneFromController", dependsOnGroups = "createCustomerPhoneFromController") @Transactional public void readCustomerPhoneFromController() { List<CustomerPhone> phones_1 = customerPhoneService.readAllCustomerPhonesByCustomerId(1L); int phones_1_size = phones_1.size(); request = this.getNewServletInstance(); String view = customerPhoneController.deletePhone(createdCustomerPhoneIds.get(0), request); assert (view.indexOf("viewPhone") >= 0); List<CustomerPhone> phones_2 = customerPhoneService.readAllCustomerPhonesByCustomerId(1L); assert ((phones_1_size - phones_2.size()) == 1); } @Test(groups = "viewCustomerPhoneFromController") public void viewCustomerPhoneFromController() { PhoneNameForm pnf = new PhoneNameForm(); BindingResult errors = new BeanPropertyBindingResult(pnf, "phoneNameForm"); request = this.getNewServletInstance(); String view = customerPhoneController.viewPhone(null, request, pnf, errors); assert (view.indexOf(SUCCESS) >= 0); assert (request.getAttribute("customerPhoneId") == null); } @Test(groups = "viewExistingCustomerPhoneFromController", dependsOnGroups = "createCustomerPhoneFromController") @Transactional public void viewExistingCustomerPhoneFromController() { List<CustomerPhone> phones_1 = customerPhoneService.readAllCustomerPhonesByCustomerId(1L); PhoneNameForm pnf = new PhoneNameForm(); BindingResult errors = new BeanPropertyBindingResult(pnf, "phoneNameForm"); Customer customer = customerService.readCustomerById(userId); request = this.getNewServletInstance(); request.setAttribute(CustomerStateRequestProcessor.getCustomerRequestAttributeName(), customer); String view = customerPhoneController.viewPhone(phones_1.get(0).getId(), request, pnf, errors); assert (view.indexOf(SUCCESS) >= 0); assert (request.getAttribute("customerPhoneId").equals(phones_1.get(0).getId())); } private MockHttpServletRequest getNewServletInstance() { MockHttpServletRequest request = new MockHttpServletRequest(); request.getSession().setAttribute("customer_session", userId); //set customer on session return request; } }