/*
* Licensed to STRATIO (C) under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership. The STRATIO (C) licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.stratio.cassandra.lucene.search.condition;
import com.stratio.cassandra.lucene.IndexException;
import com.stratio.cassandra.lucene.schema.Schema;
import com.stratio.cassandra.lucene.schema.mapping.builder.MapperBuilder;
import com.stratio.cassandra.lucene.search.condition.builder.BitemporalConditionBuilder;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
import org.junit.Test;
import static com.stratio.cassandra.lucene.schema.SchemaBuilders.*;
import static com.stratio.cassandra.lucene.search.SearchBuilders.bitemporal;
import static com.stratio.cassandra.lucene.search.condition.Condition.DEFAULT_BOOST;
import static org.junit.Assert.*;
/**
* @author Eduardo Alonso {@literal <eduardoalonso@stratio.com>}
*/
public class BitemporalConditionTest extends AbstractConditionTest {
private static final String TIMESTAMP_PATTERN = "timestamp";
@Test
public void testBuildLong() {
BitemporalCondition condition = new BitemporalConditionBuilder("field").boost(0.7)
.ttFrom(1L)
.ttTo(2L)
.vtFrom(3L)
.vtTo(4L)
.build();
assertNotNull("Condition is not built", condition);
assertEquals("Boost is not set", 0.7f, condition.boost, 0);
assertEquals("Field is not set", "field", condition.field);
assertEquals("tt_from is not set", 1l, condition.ttFrom);
assertEquals("tt_to is not set", 2l, condition.ttTo);
assertEquals("vt_from is not set", 3l, condition.vtFrom);
assertEquals("vt_to is not set", 4l, condition.vtTo);
}
@Test
public void testBuildString() {
BitemporalCondition condition = new BitemporalConditionBuilder("field").boost(0.7)
.ttFrom("2015/03/20 11:45:32.333")
.ttTo("2013/03/20 11:45:32.333")
.vtFrom("2012/03/20 11:45:32.333")
.vtTo("2011/03/20 11:45:32.333")
.build();
assertNotNull("Condition is not built", condition);
assertEquals("Boost is not set", 0.7f, condition.boost, 0);
assertEquals("Field is not set", "field", condition.field);
assertEquals("tt_from is not set", "2015/03/20 11:45:32.333", condition.ttFrom);
assertEquals("tt_to is not set", "2013/03/20 11:45:32.333", condition.ttTo);
assertEquals("vt_from is not set", "2012/03/20 11:45:32.333", condition.vtFrom);
assertEquals("vt_to is not set", "2011/03/20 11:45:32.333", condition.vtTo);
}
@Test
public void testBuildDefaults() {
BitemporalCondition condition = new BitemporalConditionBuilder("field").build();
assertNotNull("Condition is not built", condition);
assertEquals("Boost is not set to default", DEFAULT_BOOST, condition.boost, 0);
assertEquals("Field is not set", "field", condition.field);
assertNull("tt_from is not set to default", condition.ttFrom);
assertNull("tt_to is not set to default", condition.ttTo);
assertNull("vt_from is not set to default", condition.vtFrom);
assertNull("vt_to is not set to default", condition.vtTo);
}
@Test
public void testJsonSerialization() {
BitemporalConditionBuilder builder = new BitemporalConditionBuilder("field").boost(0.7f);
testJsonSerialization(builder, "{type:\"bitemporal\",field:\"field\",boost:0.7}");
}
@Test
public void testJsonSerializationDefaults() {
BitemporalConditionBuilder builder = new BitemporalConditionBuilder("field");
testJsonSerialization(builder, "{type:\"bitemporal\",field:\"field\"}");
}
@Test
public void testQuery() {
MapperBuilder<?, ?> mapperBuilder = bitemporalMapper("vtFrom", "vtTo", "ttFrom", "ttTo").pattern(
TIMESTAMP_PATTERN);
Schema schema = schema().mapper("name", mapperBuilder).build();
BitemporalCondition condition = new BitemporalCondition(0.5f, "name", 1, 2, 3, 4);
Query query = condition.query(schema);
assertNotNull("Query is not built", query);
assertTrue("Query type is wrong", query instanceof BooleanQuery);
}
@Test(expected = IndexException.class)
public void testQueryWithoutValidMapper() {
Schema schema = schema().mapper("name", uuidMapper()).build();
BitemporalCondition condition = new BitemporalCondition(null, "name", 1, 2, 3, 4);
condition.query(schema);
}
@Test
public void testToString() {
BitemporalCondition condition = bitemporal("name").vtFrom(1).vtTo(2).ttFrom(3).ttTo(4).boost(0.3).build();
assertEquals("Method #toString is wrong",
"BitemporalCondition{boost=0.3, field=name, vtFrom=1, vtTo=2, ttFrom=3, ttTo=4}",
condition.toString());
}
}