package de.danielbasedow.prospecter.core.index;
import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
import de.danielbasedow.prospecter.core.MalformedQueryException;
import de.danielbasedow.prospecter.core.Matcher;
import de.danielbasedow.prospecter.core.document.Document;
import de.danielbasedow.prospecter.core.document.DocumentBuilder;
import de.danielbasedow.prospecter.core.query.Query;
import de.danielbasedow.prospecter.core.schema.Schema;
import de.danielbasedow.prospecter.core.schema.SchemaBuilderJSON;
import de.danielbasedow.prospecter.core.schema.SchemaConfigurationError;
import junit.framework.TestCase;
public class DateTimeIndexTest extends TestCase {
private static String jsonSchema = "{\n" +
" \"fields\": {\n" +
" \"dateTime\": {\n" +
" \"type\": \"DateTime\"\n" +
" }\n" +
" }\n" +
"}";
private static String jsonQuery = "{\n" +
" \"id\": 123456,\n" +
" \"query\": {\n" +
" \"and\": [\n" +
" {\n" +
" \"field\": \"dateTime\",\n" +
" \"condition\": \"gte\",\n" +
" \"value\": \"2014-08-10T19:22:51Z\"\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
private static String jsonQueryWrongDate = "{\n" +
" \"id\": 123456,\n" +
" \"query\": {\n" +
" \"and\": [\n" +
" {\n" +
" \"field\": \"dateTime\",\n" +
" \"condition\": \"gte\",\n" +
" \"value\": \"08-2014-10T19:22:51Z\"\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
public void testSchemaCreation() {
try {
Schema schema = new SchemaBuilderJSON(jsonSchema).getSchema();
assertTrue(((DateTimeIndex) schema.getFieldIndex("dateTime")).getDateFormat() instanceof ISO8601DateFormat);
} catch (SchemaConfigurationError e) {
assertTrue(false);
}
}
public void testQueryParsing() {
try {
Schema schema = new SchemaBuilderJSON(jsonSchema).getSchema();
Query query = schema.getQueryBuilder().buildFromJSON(jsonQuery);
} catch (Exception e) {
assertTrue(false);
}
}
public void testQueryParsingFail() {
try {
Schema schema = new SchemaBuilderJSON(jsonSchema).getSchema();
Query query = schema.getQueryBuilder().buildFromJSON(jsonQueryWrongDate);
assertTrue(false);
} catch (SchemaConfigurationError schemaConfigurationError) {
schemaConfigurationError.printStackTrace();
} catch (MalformedQueryException e) {
assertTrue(true);
}
}
public void testMatching() {
try {
Schema schema = new SchemaBuilderJSON(jsonSchema).getSchema();
Query query = schema.getQueryBuilder().buildFromJSON(jsonQuery);
schema.addQuery(query);
DocumentBuilder builder = schema.getDocumentBuilder();
Matcher matcher;
//EQUAL
Document doc = builder.build("{\"dateTime\": \"2014-08-10T19:22:51Z\"}");
matcher = schema.matchDocument(doc);
assertEquals(1, matcher.getMatchedQueries().size());
//GREATER
doc = builder.build("{\"dateTime\": \"2014-08-10T19:23:00Z\"}");
matcher = schema.matchDocument(doc);
assertEquals(1, matcher.getMatchedQueries().size());
//LESS
doc = builder.build("{\"dateTime\": \"2014-08-10T19:22:50Z\"}"); // one second less
matcher = schema.matchDocument(doc);
assertEquals(0, matcher.getMatchedQueries().size()); //date has to be GREATER or EQUAL the value in query
} catch (Exception e) {
assertTrue(false);
}
}
}