org.terasoluna.tourreservation.app.reservetour.ReserveTourControllerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.terasoluna.tourreservation.app.reservetour.ReserveTourControllerTest.java

Source

/*
 * 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
    }
}