package controllers;
import dao.SetupDao;
import model.World;
import ninja.NinjaDocTester;
import org.doctester.testbrowser.Request;
import org.doctester.testbrowser.Response;
import org.hamcrest.CoreMatchers;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Before;
public class HelloDbControllerTest extends NinjaDocTester {
String URL_DB = "/db";
String URL_QUERIES = "/queries";
String URL_UPDATE = "/update";
@Before
public void setupClass() {
getInjector().getInstance(SetupDao.class).generateWorldsForTest();
}
@Test
public void testSingleGet() {
Response response = makeRequest(
Request
.GET()
.url(testServerUrl().path(URL_DB))
.contentTypeApplicationJson());
// Just make sure that we get back a World Json.
assertThat(response.payloadAs(World.class), notNullValue());
}
@Test
public void multipleQueries() {
assertThatMutipleGetWorksFor(1);
assertThatMutipleGetWorksFor(5);
assertThatMutipleGetWorksFor(10);
assertThatMutipleGetWorksFor(15);
assertThatMutipleGetWorksFor(20);
}
private void assertThatMutipleGetWorksFor(int numberOfQueries) {
Response response = makeRequest(
Request
.GET()
.url(
testServerUrl()
.path(URL_QUERIES)
.addQueryParameter("queries", numberOfQueries + ""))
.contentTypeApplicationJson());
// Just make sure that we get back an array
assertThat(response.payloadAs(World[].class).length, is(numberOfQueries));
}
@Test
public void testUpdates() {
assertThatUpdateWorks(1);
assertThatUpdateWorks(5);
assertThatUpdateWorks(10);
assertThatUpdateWorks(15);
assertThatUpdateWorks(20);
}
private void assertThatUpdateWorks(int numberOfQueries) {
Response response = makeRequest(
Request.GET()
.url(
testServerUrl()
.path(URL_UPDATE)
.addQueryParameter("queries", numberOfQueries + ""))
.contentTypeApplicationJson());
assertThat(response.payloadAs(World[].class).length, is(numberOfQueries));
}
}