/*
* 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.junit.Test;
import com.enonic.cms.core.content.index.queryexpression.Expression;
import com.enonic.cms.core.content.index.queryexpression.FieldExpr;
import com.enonic.cms.core.content.index.queryexpression.ValueExpr;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
public class QueryValueResolverTest
{
@Test
public void testToValue_string()
{
Expression expression = new ValueExpr( "100.0" );
final QueryValue actual = QueryValueFactory.resolveQueryValues( expression )[0];
assertEquals( "100.0", actual.getStringValueNormalized() );
}
@Test
public void testToValue_int()
{
Expression expression = new ValueExpr( 100.0 );
final QueryValue actual = QueryValueFactory.resolveQueryValues( expression )[0];
assertEquals( 100.0, actual.getNumericValue() );
}
@Test
public void testToValues_else()
{
Expression expression = new FieldExpr( "" );
assertNotNull( QueryValueFactory.resolveQueryValues( expression ) );
final int length = QueryValueFactory.resolveQueryValues( expression ).length;
assertEquals( 0, length );
}
@Test
public void testDateValue()
{
Expression expression = new ValueExpr( new DateTime( 2012, 02, 14, 11, 5, 0, DateTimeZone.UTC ) );
final QueryValue[] queryValues = QueryValueFactory.resolveQueryValues( expression );
final QueryValue actual = QueryValueFactory.resolveQueryValues( expression )[0];
assertTrue( actual.isDateTime() );
// one hour behind because of timezone normalization
assertDateTimeEquals( "2012-02-14T11:05:00.000Z", actual.getDateTime().toString() );
}
@Test
public void testDateAsStringValue()
{
Expression expression = new ValueExpr( "2012-02-14T12:05:00.000Z" );
final QueryValue[] queryValues = QueryValueFactory.resolveQueryValues( expression );
final QueryValue actual = QueryValueFactory.resolveQueryValues( expression )[0];
assertFalse( actual.isDateTime() );
}
private void assertDateTimeEquals( final String expectedDateTime, final String actualDateTime )
{
DateTime expected = DateTime.parse( expectedDateTime );
DateTime actual = DateTime.parse( actualDateTime );
// move to same time-zone if necessary
if ( !actual.getZone().equals( expected.getZone() ) )
{
MutableDateTime actualUpdatedZone = actual.toMutableDateTime();
actualUpdatedZone.setZone( expected.getZone() );
actual = actualUpdatedZone.toDateTime();
}
assertEquals( expected, actual );
}
}