com.buildria.mocking.StubSpecTest.java Source code

Java tutorial

Introduction

Here is the source code for com.buildria.mocking.StubSpecTest.java

Source

/**
 * The MIT License (MIT)
 *
 * Copyright (c) 2015 Seiji Sogabe
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
package com.buildria.mocking;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.io.Resources;
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.http.ContentType;
import com.jayway.restassured.response.Response;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static com.buildria.mocking.Mocking.verifyWhen;
import static com.buildria.mocking.Mocking.when;
import static com.buildria.mocking.http.MockingHttpStatus.SC_200_OK;
import static com.jayway.restassured.RestAssured.given;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;

public class StubSpecTest {

    @Rule
    public Mocking mocking = new Mocking();

    @Rule
    public TestNameRule testNameRule = new TestNameRule();

    @Before
    public void setUp() throws Exception {
        RestAssured.port = mocking.getPort();
    }

    @Test
    public void testOneUri() throws Exception {
        Person p = new Person("hoge", 19);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(p);

        when("/api/p").then().withStatusCode(SC_200_OK).withRawBody(json, Charset.defaultCharset())
                .withContentType("application/json; charset=UTF-8");

        given().accept(ContentType.JSON).when().get("/api/p").then().statusCode(200).contentType(ContentType.JSON)
                .body("name", is("hoge")).body("old", is(19));

    }

    @Test
    public void testTwoUri() throws Exception {
        Person p = new Person("hoge", 19);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(p);

        when("/api/p").then().withStatusCode(SC_200_OK).withRawBody(json, Charset.defaultCharset())
                .withHeader("X-header", "restmock1").withContentType("application/json; charset=UTF-8");

        when("/api/q").then().withStatusCode(SC_200_OK).withRawBody(json).withHeader("X-header", "restmock2")
                .withContentType("application/json; charset=UTF-8");

        given().accept(ContentType.JSON).when().post("/api/p").then().statusCode(SC_200_OK)
                .contentType(ContentType.JSON).header("X-header", "restmock1").body("name", is("hoge"))
                .body("old", is(19));

        given().log().all().accept(ContentType.JSON).when().get("/api/q").then().statusCode(SC_200_OK)
                .contentType(ContentType.JSON).header("X-header", "restmock2").body("name", is("hoge"))
                .body("old", is(19));
    }

    @Test
    public void testByteBody() throws Exception {
        Person p = new Person("hoge", 19);
        ObjectMapper mapper = new ObjectMapper();
        byte[] json = mapper.writeValueAsString(p).getBytes(StandardCharsets.UTF_8);

        when("/api/p").then().withStatusCode(SC_200_OK).withRawBody(json)
                .withContentType("application/json; charset=UTF-8");

        given().accept(ContentType.JSON).when().get("/api/p").then().statusCode(200).contentType(ContentType.JSON)
                .body("name", is("hoge")).body("old", is(19));
    }

    @Test
    public void testURIBody() throws Exception {
        when("/api/p").then().withStatusCode(SC_200_OK)
                .withRawBody(Resources.getResource("com/buildria/mocking/person.json"))
                .withContentType("application/json; charset=UTF-8");

        given().accept(ContentType.JSON).when().get("/api/p").then().statusCode(200).contentType(ContentType.JSON)
                .body("name", is("hoge")).body("old", is(19));
    }

    @Test
    public void testStreamBody() throws Exception {
        when("/api/p").then().withStatusCode(SC_200_OK)
                .withRawBody(Resources.getResource("com/buildria/mocking/person.json").openStream())
                .withContentType("application/json; charset=UTF-8");

        given().accept(ContentType.JSON).when().get("/api/p").then().statusCode(200).contentType(ContentType.JSON)
                .body("name", is("hoge")).body("old", is(19));

    }

    @Test
    public void testRequestBodyMultibytes() throws Exception {
        Person p = new Person("\u3042\u3044\u3046\u3048\u304a", 19);

        when("/api/p").then().withStatusCode(SC_200_OK).withBody(p)
                .withContentType("application/xml; charset=UTF-8");

        Response r = given().accept(ContentType.XML).contentType(ContentType.XML).body(p).when().put("/api/p")
                .then().statusCode(200).contentType(ContentType.XML)
                .body("person.name", is("\u3042\u3044\u3046\u3048\u304a")).body("person.old", is("19")).extract()
                .response();

        LOG.debug("### body: {}", r.getBody().asString());

        verifyWhen("/api/p").withPut().then().withAccept(containsString("application/xml"))
                .withContentType(containsString("application/xml"))
                .withBody("person.name", is("\u3042\u3044\u3046\u3048\u304a")).withBody("person.old", is("19"));

    }

    @Test
    public void testRequestXmlBody() throws Exception {
        Person p = new Person("?????", 19);

        when("/api/p").then().withStatusCode(SC_200_OK).withBody(p)
                .withContentType("application/xml; charset=UTF-8");

        given().accept(ContentType.XML).when().put("/api/p").then().statusCode(200).contentType(ContentType.XML)
                .body("persson.name", is("?????")).body("person.old", is("19"));
    }

    @Test
    public void testQueryParam() throws Exception {
        Person p = new Person("hoge", 19);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(p);

        when("/api/p").then().withStatusCode(SC_200_OK).withRawBody(json, Charset.defaultCharset())
                .withContentType("application/json; charset=UTF-8");

        given().accept(ContentType.JSON).queryParam("name", "value 1").when().get("/api/p").then().statusCode(200)
                .contentType(ContentType.JSON).body("name", is("hoge")).body("old", is(19));

        verifyWhen("/api/p").withGet().then().withAccept(containsString("application/json")).withQueryParam("name",
                "value 1");
    }

    @Test
    public void testQueryParam2() throws Exception {
        Person p = new Person("hoge", 19);

        when("/api/p").then().withStatusCode(SC_200_OK).withBody(p)
                .withContentType("application/json; charset=UTF-8");

        given().accept(ContentType.JSON).queryParam("name", "value 1").when().get("/api/p").then().statusCode(200)
                .contentType(ContentType.JSON).body("name", is("hoge")).body("old", is(19));

        verifyWhen("/api/p").withGet().then().withAccept(containsString("application/json")).withQueryParam("name",
                "value 1");
    }

    @Test
    public void testQueryParams() throws Exception {
        Person p = new Person("hoge", 19);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(p);

        when("/api/p").then().withStatusCode(SC_200_OK).withRawBody(json, Charset.defaultCharset())
                .withContentType("application/json; charset=UTF-8");

        given().accept(ContentType.JSON).queryParam("name", "value 1").queryParam("name", "value 2").when()
                .get("/api/p").then().statusCode(200).contentType(ContentType.JSON).body("name", is("hoge"))
                .body("old", is(19));

        verifyWhen("/api/p").withGet().then().withAccept(containsString("application/json"))
                .withQueryParam("name", "value 1").withQueryParam("name", "value 2");
    }

    @XmlRootElement(name = "person")
    @XmlType
    private static class Person {

        private String name;

        private int old;

        public Person() {
            //
        }

        public Person(String name, int old) {
            this.name = name;
            this.old = old;
        }

        @XmlElement
        public String getName() {
            return name;
        }

        @XmlElement
        public int getOld() {
            return old;
        }

    }

    private static final Logger LOG = LoggerFactory.getLogger(StubSpecTest.class);
}