/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.query;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.MutableDateTime;
import org.joda.time.ReadableDateTime;
import org.junit.Test;
import com.enonic.cms.core.search.builder.IndexFieldNameConstants;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
public class QueryFieldAndValueTest
extends IndexFieldNameConstants
{
@Test
public void testEmptyValue()
{
QueryFieldAndValue queryFieldAndValue = new QueryFieldAndValue( "test", null );
assertEquals( "test", queryFieldAndValue.getFieldName() );
assertEquals( "", queryFieldAndValue.getValue() );
assertEquals( "", queryFieldAndValue.getValueForIdQuery() );
}
@Test
public void testWildcardPathGeneration()
{
QueryFieldAndValue queryFieldAndValue = new QueryFieldAndValue( "data/*", 35 );
assertEquals( "_all_userdata.number", queryFieldAndValue.getFieldName() );
assertEquals( 35.0, queryFieldAndValue.getValue() );
queryFieldAndValue = new QueryFieldAndValue( "data/*", "35" );
assertEquals( "_all_userdata", queryFieldAndValue.getFieldName() );
assertEquals( "35", queryFieldAndValue.getValue() );
queryFieldAndValue = new QueryFieldAndValue( "*", 35 );
assertEquals( "_all_userdata.number", queryFieldAndValue.getFieldName() );
queryFieldAndValue = new QueryFieldAndValue( "*", new DateTime( 2010, 8, 1, 10, 00 ) );
assertEquals( "_all_userdata.date", queryFieldAndValue.getFieldName() );
assertEquals( toUTCTimeZone( new DateTime( 2010, 8, 1, 10, 00 ) ), queryFieldAndValue.getValue() );
}
private ReadableDateTime toUTCTimeZone( final ReadableDateTime dateTime )
{
if ( DateTimeZone.UTC.equals( dateTime.getZone() ) )
{
return dateTime;
}
final MutableDateTime dateInUTC = dateTime.toMutableDateTime();
dateInUTC.setZone( DateTimeZone.UTC );
return dateInUTC.toDateTime();
}
@Test
public void testNumericPathGeneration()
{
QueryFieldAndValue queryFieldAndValue = new QueryFieldAndValue( "data_person_age", 35 );
assertEquals( "data_person_age.number", queryFieldAndValue.getFieldName() );
assertTrue( queryFieldAndValue.getValue() instanceof Number );
queryFieldAndValue = new QueryFieldAndValue( "data_person_age", "35" );
assertEquals( "data_person_age", queryFieldAndValue.getFieldName() );
queryFieldAndValue = new QueryFieldAndValue( "person_age", 35 );
assertEquals( "person_age.number", queryFieldAndValue.getFieldName() );
assertTrue( queryFieldAndValue.getValue() instanceof Number );
}
@Test
public void testDatePathGeneration()
{
DateTime validDateTime = new DateTime( 2010, 8, 1, 10, 00, 00, 00 );
QueryFieldAndValue queryFieldAndValue = new QueryFieldAndValue( "data_person_birthdate", validDateTime );
assertEquals( "data_person_birthdate.date", queryFieldAndValue.getFieldName() );
assertTrue( queryFieldAndValue.getValue() instanceof ReadableDateTime );
queryFieldAndValue = new QueryFieldAndValue( "data_person_birthdate", validDateTime.toString() );
assertEquals( "data_person_birthdate", queryFieldAndValue.getFieldName() );
queryFieldAndValue = new QueryFieldAndValue( "person_birthdate", validDateTime );
assertEquals( "person_birthdate.date", queryFieldAndValue.getFieldName() );
queryFieldAndValue = new QueryFieldAndValue( PUBLISH_FROM_FIELDNAME, validDateTime );
assertEquals( PUBLISH_FROM_FIELDNAME + ".date", queryFieldAndValue.getFieldName() );
assertTrue( queryFieldAndValue.getValue() instanceof ReadableDateTime );
queryFieldAndValue = new QueryFieldAndValue( PUBLISH_FROM_FIELDNAME, null );
assertEquals( PUBLISH_FROM_FIELDNAME + ".date", queryFieldAndValue.getFieldName() );
}
}