Java tutorial
/* * Copyright (C) 2013-2015 terasoluna.org * * 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. */ package org.terasoluna.tourreservation.app.reservetour; import static org.hamcrest.core.IsNull.notNullValue; import static org.hamcrest.core.IsNull.nullValue; import static org.junit.Assert.fail; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.flash; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; import org.junit.Before; import org.junit.Test; import org.springframework.security.web.bind.support.AuthenticationPrincipalArgumentResolver; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.terasoluna.gfw.common.exception.BusinessException; import org.terasoluna.tourreservation.domain.model.Customer; import org.terasoluna.tourreservation.domain.service.reserve.ReserveTourOutput; import org.terasoluna.tourreservation.domain.service.userdetails.ReservationUserDetails; public class ReserveTourControllerTest { ReservationUserDetails userDetails; MockMvc mockMvc; ReserveTourHelper reserveTourHelper; ReserveTourController reserveTourController; @Before public void setupForm() { // instantiate the controller to test reserveTourController = new ReserveTourController(); // other members instantiation and assignment userDetails = new ReservationUserDetails(new Customer("xxxx")); reserveTourHelper = mock(ReserveTourHelper.class); reserveTourController.reserveTourHelper = reserveTourHelper; // build mockMvc = MockMvcBuilders.standaloneSetup(reserveTourController) .setCustomArgumentResolvers(new AuthenticationPrincipalArgumentResolver()).build(); } @Test public void testReserveFormSuccess() { // Prepare get request MockHttpServletRequestBuilder getRequest = MockMvcRequestBuilders.get("/reservetour/read"); // Set mock behavior for helper method when(reserveTourHelper.findTourDetail((ReservationUserDetails) anyObject(), (ReserveTourForm) anyObject())) .thenReturn(new TourDetailOutput()); try { ResultActions results = mockMvc.perform(getRequest); results.andExpect(status().isOk()); results.andExpect(view().name("reservetour/reserveForm")); results.andExpect(model().attribute("output", notNullValue())); return; } catch (Exception e) { e.printStackTrace(); } fail(); // FAIL when exception is thrown } @Test public void testReserveTourConfirmSuccess() { // Prepare POST request MockHttpServletRequestBuilder postRequest = MockMvcRequestBuilders.post("/reservetour/reserve") .param("confirm", ""); // Set mock behavior for helper method when(reserveTourHelper.findTourDetail((ReservationUserDetails) anyObject(), (ReserveTourForm) anyObject())) .thenReturn(new TourDetailOutput()); // Set form data postRequest.param("tourCode", "2"); postRequest.param("adultCount", "2"); postRequest.param("childCount", "2"); try { ResultActions results = mockMvc.perform(postRequest); results.andExpect(status().isOk()); results.andExpect(model().hasNoErrors()); results.andExpect(model().attribute("output", notNullValue())); results.andExpect(view().name("reservetour/reserveConfirm")); return; } catch (Exception e) { e.printStackTrace(); } fail(); // FAIL when exception is thrown } @Test public void testReserveTourConfirmFail() { // Prepare POST request MockHttpServletRequestBuilder postRequest = MockMvcRequestBuilders.post("/reservetour/reserve") .param("confirm", ""); // Set mock behavior for helper method when(reserveTourHelper.findTourDetail((ReservationUserDetails) anyObject(), (ReserveTourForm) anyObject())) .thenReturn(new TourDetailOutput()); // Do not Set any form data so that form validation will fail // Just perform the request try { ResultActions results = mockMvc.perform(postRequest); results.andExpect(status().isOk()); results.andExpect(view().name("reservetour/reserveForm")); results.andExpect(model().hasErrors()); results.andExpect(model().attributeErrorCount("reserveTourForm", 3)); results.andExpect(model().attribute("output", nullValue())); return; } catch (Exception e) { e.printStackTrace(); } fail(); // FAIL when exception is thrown } @Test public void testReserveTourReserveSuccess() { // Prepare POST request MockHttpServletRequestBuilder postRequest = MockMvcRequestBuilders.post("/reservetour/reserve"); // Set mock behavior for helper method when(reserveTourHelper.reserve((ReservationUserDetails) anyObject(), (ReserveTourForm) anyObject())) .thenReturn(new ReserveTourOutput()); // Set form data to session ReserveTourForm reserveTourForm = new ReserveTourForm(); reserveTourForm.setTourCode("1"); reserveTourForm.setAdultCount(1); reserveTourForm.setChildCount(1); postRequest.param("tourCode", "2"); postRequest.param("adultCount", "2"); postRequest.param("childCount", "2"); try { ResultActions results = mockMvc.perform(postRequest); results.andExpect(status().isFound()); results.andExpect(model().hasNoErrors()); results.andExpect(flash().attribute("output", notNullValue())); results.andExpect(view().name("redirect:/reservetour/reserve?complete")); return; } catch (Exception e) { e.printStackTrace(); } fail(); // FAIL when exception is thrown } @Test public void testReserveTourReserveFailByBusinessException() { // Prepare POST request MockHttpServletRequestBuilder postRequest = MockMvcRequestBuilders.post("/reservetour/reserve"); // Set mock behavior for helper method when(reserveTourHelper.reserve((ReservationUserDetails) anyObject(), (ReserveTourForm) anyObject())) .thenThrow(new BusinessException("")); when(reserveTourHelper.findTourDetail((ReservationUserDetails) anyObject(), (ReserveTourForm) anyObject())) .thenReturn(new TourDetailOutput()); // Set form data postRequest.param("tourCode", "2"); postRequest.param("adultCount", "2"); postRequest.param("childCount", "2"); try { ResultActions results = mockMvc.perform(postRequest); results.andExpect(status().isOk()); results.andExpect(model().hasNoErrors()); results.andExpect(model().attribute("output", notNullValue())); results.andExpect(model().attribute("resultMessages", notNullValue())); results.andExpect(view().name("reservetour/reserveForm")); return; } catch (Exception e) { e.printStackTrace(); } fail(); // FAIL when exception is thrown } @Test public void testReserveComplete() { // Prepare get request MockHttpServletRequestBuilder getRequest = MockMvcRequestBuilders.get("/reservetour/reserve") .param("complete", ""); // No Logic testing here // this will just test the request mapping part try { ResultActions results = mockMvc.perform(getRequest); results.andExpect(status().isOk()); results.andExpect(view().name("reservetour/reserveComplete")); return; } catch (Exception e) { e.printStackTrace(); } fail(); // FAIL when exception is thrown } @Test public void testReserveRedo() { // Prepare get request MockHttpServletRequestBuilder postRequest = MockMvcRequestBuilders.post("/reservetour/reserve") .param("redo", ""); // No Logic testing here // this will just test the request mapping part try { ResultActions results = mockMvc.perform(postRequest); results.andExpect(status().isOk()); results.andExpect(view().name("reservetour/reserveForm")); return; } catch (Exception e) { e.printStackTrace(); } fail(); // FAIL when exception is thrown } }