io.liveoak.container.ParamsServerTest.java Source code

Java tutorial

Introduction

Here is the source code for io.liveoak.container.ParamsServerTest.java

Source

/*
 * Copyright 2014 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Eclipse Public License version 1.0, available at http://www.eclipse.org/legal/epl-v10.html
 */
package io.liveoak.container;

import java.util.HashSet;
import java.util.List;

import io.liveoak.spi.state.ResourceState;
import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicHeader;
import org.junit.Test;

import static org.fest.assertions.Assertions.assertThat;

/**
 * @author <a href="mailto:marko.strukelj@gmail.com">Marko Strukelj</a>
 */
public class ParamsServerTest extends BasicServerTest {

    @Test
    public void testServer() throws Exception {

        Header header = new BasicHeader("Accept", "application/json");

        HttpGet getRequest = null;
        HttpPost postRequest = null;
        HttpPut putRequest = null;
        CloseableHttpResponse response = null;

        // create people collection with direct PUT
        System.err.println("CREATE /people collection");

        putRequest = new HttpPut("http://localhost:8080/testApp/memory/people");
        putRequest.setEntity(new StringEntity("{ \"type\": \"collection\" }"));
        putRequest.setHeader("Content-Type", "application/json");
        response = this.httpClient.execute(putRequest);
        System.err.println("response: " + response);
        assertThat(response).isNotNull();
        assertThat(response.getStatusLine().getStatusCode()).isEqualTo(201);

        response.close();

        System.err.println("PREPARE 2 people ...");
        // Post a person

        postRequest = new HttpPost("http://localhost:8080/testApp/memory/people");
        postRequest.setEntity(new StringEntity("{ \"name\": \"bob\" }"));
        postRequest.setHeader("Content-Type", "application/json");

        response = httpClient.execute(postRequest);
        assertThat(response).isNotNull();
        assertThat(response.getStatusLine().getStatusCode()).isEqualTo(201);

        ResourceState bobState = decode(response);
        assertThat(bobState).isNotNull();

        assertThat(bobState.id()).isNotNull();
        assertThat(bobState.getProperty("name")).isEqualTo("bob");

        response.close();

        postRequest = new HttpPost("http://localhost:8080/testApp/memory/people");
        postRequest.setEntity(new StringEntity("{ \"name\": \"krusty\" }"));
        postRequest.setHeader("Content-Type", "application/json");

        response = httpClient.execute(postRequest);
        assertThat(response).isNotNull();
        assertThat(response.getStatusLine().getStatusCode()).isEqualTo(201);

        ResourceState krustyState = (ResourceState) decode(response);
        assertThat(krustyState).isNotNull();

        //assertThat(krustyState.getProperty(LiveOak.ID)).isNotNull();
        assertThat(krustyState.id()).isNotNull();
        assertThat(krustyState.getProperty("name")).isEqualTo("krusty");

        response.close();

        System.err.println("TEST #1");
        // test pagination

        // now that we have two people we can do paging requests

        // Retrieve first people resource, ensuring only the first one is returned
        // Assumption: unsorted GET on collection returns items in the order they were added to collection
        getRequest = new HttpGet("http://localhost:8080/testApp/memory/people?limit=1");
        getRequest.addHeader(header);
        response = httpClient.execute(getRequest);

        assertThat(response).isNotNull();
        assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);

        ResourceState state = decode(response);
        assertThat(state).isNotNull();
        List<ResourceState> members = state.members();

        assertThat(members.size()).isEqualTo(1);

        ResourceState memberState = members.get(0);
        assertThat(memberState).isInstanceOf(ResourceState.class);

        ResourceState member = (ResourceState) memberState;
        assertThat(member.id()).isEqualTo(bobState.id());

        response.close();

        // Retrieve second people resource, ensuring only the second one is returned
        // Assumption: unsorted GET on collection returns items in the order they were added to collection
        getRequest = new HttpGet("http://localhost:8080/testApp/memory/people?offset=1&limit=1");
        getRequest.addHeader(header);
        response = httpClient.execute(getRequest);

        assertThat(response).isNotNull();
        assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);

        state = decode(response);
        assertThat(state).isNotNull();

        members = state.members();
        assertThat(members.size()).isEqualTo(1);

        memberState = members.get(0);
        assertThat(memberState).isInstanceOf(ResourceState.class);

        member = (ResourceState) memberState;
        assertThat(member.id()).isEqualTo(krustyState.id());

        response.close();

        // Retrieve the people resource with a limit of 0 (eg do not return any members)
        getRequest = new HttpGet("http://localhost:8080/testApp/memory/people?limit=0");
        getRequest.addHeader(header);
        response = httpClient.execute(getRequest);

        assertThat(response).isNotNull();
        assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);

        state = decode(response);
        assertThat(state).isNotNull();

        members = state.members();
        assertThat(members.size()).isEqualTo(0);

        response.close();

        System.err.println("TEST #2");
        // test specifying fields to return

        getRequest = new HttpGet("http://localhost:8080/testApp/memory/people/" + krustyState.id() + "?fields=id");
        getRequest.addHeader(header);
        response = httpClient.execute(getRequest);

        assertThat(response).isNotNull();
        assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);

        state = decode(response);
        assertThat(state).isNotNull();
        assertThat(state).isInstanceOf(ResourceState.class);

        HashSet fields = new HashSet();
        /*
        ((CollectionResourceState) state).members().forEach((f) -> {
        fields.add(f.id());
        });
        */
        // TODO: uncomment when _self, and id encoding takes ReturnFields into account
        //assertThat(fields.size()).isEqualTo(1);
        //assertThat(fields.contains("id")).isTrue();
        //assertThat(fields.contains("name")).isFalse();
    }
}