io.restassured.module.mockmvc.ResultHandlerTest.java Source code

Java tutorial

Introduction

Here is the source code for io.restassured.module.mockmvc.ResultHandlerTest.java

Source

/*
 * Copyright 2016 the original author or authors.
 *
 * 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 io.restassured.module.mockmvc;

import io.restassured.http.Header;
import io.restassured.module.mockmvc.http.HeaderController;
import org.apache.commons.lang3.mutable.MutableObject;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultHandler;

import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;

// @formatter:off
public class ResultHandlerTest {

    @BeforeClass
    public static void configureMockMvcInstance() {
        RestAssuredMockMvc.standaloneSetup(new HeaderController());
    }

    @AfterClass
    public static void restRestAssured() {
        RestAssuredMockMvc.reset();
    }

    @Test
    public void supports_using_result_handlers_using_the_response_dsl() {
        MutableObject<Boolean> mutableObject = new MutableObject<Boolean>(false);

        RestAssuredMockMvc.given().header(new Header("headerName", "John Doe")).when().get("/header").then()
                .apply(print(), customResultHandler(mutableObject)).statusCode(200)
                .body("headerName", equalTo("John Doe"));

        assertThat(mutableObject.getValue(), is(true));
    }

    @Test
    public void merges_result_handlers_using_the_dsl() {
        MutableObject<Boolean> mutableObject1 = new MutableObject<Boolean>(false);
        MutableObject<Boolean> mutableObject2 = new MutableObject<Boolean>(false);

        RestAssuredMockMvc.given().header(new Header("headerName", "John Doe")).when().get("/header").then()
                .apply(customResultHandler(mutableObject1)).apply(customResultHandler(mutableObject2))
                .statusCode(200).body("headerName", equalTo("John Doe"));

        assertThat(mutableObject1.getValue(), is(true));
        assertThat(mutableObject2.getValue(), is(true));
    }

    @Test
    public void supports_defining_result_handlers_statically() {
        MutableObject<Boolean> mutableObject1 = new MutableObject<Boolean>(false);
        MutableObject<Boolean> mutableObject2 = new MutableObject<Boolean>(false);
        RestAssuredMockMvc.resultHandlers(customResultHandler(mutableObject1), customResultHandler(mutableObject2));

        RestAssuredMockMvc.given().header(new Header("headerName", "John Doe")).when().get("/header").then()
                .statusCode(200).body("headerName", equalTo("John Doe"));

        assertThat(mutableObject1.getValue(), is(true));
        assertThat(mutableObject2.getValue(), is(true));
    }

    @Test
    public void merges_statically_defined_result_handlers_with_dsl_defined_using_response_spec() {
        MutableObject<Boolean> mutableObject1 = new MutableObject<Boolean>(false);
        MutableObject<Boolean> mutableObject2 = new MutableObject<Boolean>(false);
        RestAssuredMockMvc.resultHandlers(customResultHandler(mutableObject1));

        RestAssuredMockMvc.given().header(new Header("headerName", "John Doe")).when().get("/header").then()
                .apply(customResultHandler(mutableObject2)).statusCode(200).body("headerName", equalTo("John Doe"));

        assertThat(mutableObject1.getValue(), is(true));
        assertThat(mutableObject2.getValue(), is(true));
    }

    // @formatter:on

    private ResultHandler customResultHandler(final MutableObject<Boolean> mutableObject) {
        return new ResultHandler() {
            public void handle(MvcResult result) throws Exception {
                mutableObject.setValue(true);
            }
        };
    }
}