blob: 268fdb192d80e0bc7104d6c664300d19f2029dcf [file] [log] [blame]
package de.ids_mannheim.korap.web.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.junit.Test;
import com.fasterxml.jackson.databind.JsonNode;
import com.sun.jersey.api.client.ClientResponse;
import de.ids_mannheim.korap.config.LiteJerseyTest;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.utils.JsonUtils;
public class LiteStatisticControllerTest extends LiteJerseyTest{
@Test
public void testStatisticsWithCq () throws KustvaktException{
ClientResponse response = resource().path(API_VERSION)
.path("statistics")
.queryParam("cq", "textType=Abhandlung & corpusSigle=GOE")
.method("GET", ClientResponse.class);
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
String query = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(query);
assertEquals(2, node.at("/documents").asInt());
assertEquals(138180, node.at("/tokens").asInt());
assertEquals(5687, node.at("/sentences").asInt());
assertEquals(258, node.at("/paragraphs").asInt());
assertTrue(node.at("/warnings").isMissingNode());
}
@Test
public void testStatisticsWithCqAndCorpusQuery () throws KustvaktException{
ClientResponse response = resource().path(API_VERSION)
.path("statistics")
.queryParam("cq", "textType=Abhandlung & corpusSigle=GOE")
.queryParam("corpusQuery", "textType=Autobiographie & corpusSigle=GOE")
.method("GET", ClientResponse.class);
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
String query = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(query);
assertEquals(2, node.at("/documents").asInt());
assertEquals(138180, node.at("/tokens").asInt());
assertEquals(5687, node.at("/sentences").asInt());
assertEquals(258, node.at("/paragraphs").asInt());
assertTrue(node.at("/warnings").isMissingNode());
}
@Test
public void testStatisticsWithCorpusQuery () throws KustvaktException{
ClientResponse response = resource().path(API_VERSION)
.path("statistics")
.queryParam("corpusQuery", "textType=Autobiographie & corpusSigle=GOE")
.method("GET", ClientResponse.class);
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
String query = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(query);
assertEquals(9, node.at("/documents").asInt());
assertEquals(527662, node.at("/tokens").asInt());
assertEquals(19387, node.at("/sentences").asInt());
assertEquals(514, node.at("/paragraphs").asInt());
assertEquals(StatusCodes.DEPRECATED_PARAMETER,
node.at("/warnings/0/0").asInt());
assertEquals("Parameter corpusQuery is deprecated in favor of cq.",
node.at("/warnings/0/1").asText());
}
@Test
public void testEmptyStatistics () throws KustvaktException{
ClientResponse response = resource().path(API_VERSION)
.path("statistics")
.queryParam("corpusQuery", "")
.method("GET", ClientResponse.class);
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
String query = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(query);
assertEquals(11, node.at("/documents").asInt());
assertEquals(665842, node.at("/tokens").asInt());
assertEquals(25074, node.at("/sentences").asInt());
assertEquals(772, node.at("/paragraphs").asInt());
response = resource().path(API_VERSION)
.path("statistics")
.method("GET", ClientResponse.class);
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
query = response.getEntity(String.class);
node = JsonUtils.readTree(query);
assertEquals(11, node.at("/documents").asInt());
assertEquals(665842, node.at("/tokens").asInt());
assertEquals(25074, node.at("/sentences").asInt());
assertEquals(772, node.at("/paragraphs").asInt());
}
@Test
public void testGetStatisticsWithKoralQuery ()
throws IOException, KustvaktException {
ClientResponse response = resource().path(API_VERSION)
.path("statistics")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.post(ClientResponse.class,"{ \"collection\" : {\"@type\": "
+ "\"koral:doc\", \"key\": \"availability\", \"match\": "
+ "\"match:eq\", \"type\": \"type:regex\", \"value\": "
+ "\"CC-BY.*\"} }");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
String ent = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(ent);
assertEquals(2, node.at("/documents").asInt());
assertEquals(72770, node.at("/tokens").asInt());
assertEquals(2985, node.at("/sentences").asInt());
assertEquals(128, node.at("/paragraphs").asInt());
}
@Test
public void testGetStatisticsWithEmptyCollection ()
throws IOException, KustvaktException {
ClientResponse response = resource().path(API_VERSION)
.path("statistics")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.post(ClientResponse.class,"{}");
assertEquals(ClientResponse.Status.BAD_REQUEST.getStatusCode(),
response.getStatus());
String ent = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(ent);
assertEquals(node.at("/errors/0/0").asInt(),
de.ids_mannheim.korap.util.StatusCodes.MISSING_COLLECTION);
assertEquals(node.at("/errors/0/1").asText(),
"Collection is not found");
}
@Test
public void testGetStatisticsWithIncorrectJson ()
throws IOException, KustvaktException {
ClientResponse response = resource().path(API_VERSION)
.path("statistics")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.post(ClientResponse.class,"{ \"collection\" : }");
assertEquals(ClientResponse.Status.BAD_REQUEST.getStatusCode(),
response.getStatus());
String ent = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(ent);
assertEquals(node.at("/errors/0/0").asInt(),
de.ids_mannheim.korap.util.StatusCodes.UNABLE_TO_PARSE_JSON);
assertEquals(node.at("/errors/0/1").asText(),
"Unable to parse JSON");
}
@Test
public void testGetStatisticsWithoutKoralQuery ()
throws IOException, KustvaktException {
ClientResponse response = resource().path(API_VERSION)
.path("statistics").post(ClientResponse.class);
String ent = response.getEntity(String.class);
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
JsonNode node = JsonUtils.readTree(ent);
assertEquals(11, node.at("/documents").asInt());
assertEquals(665842, node.at("/tokens").asInt());
assertEquals(25074, node.at("/sentences").asInt());
assertEquals(772, node.at("/paragraphs").asInt());
}
}