/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.index;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import org.joda.time.DateTime;
import org.junit.Test;
import com.google.common.collect.Sets;
import com.enonic.cms.core.search.builder.ContentIndexDataElement;
import com.enonic.cms.core.search.builder.ContentIndexDataElementFactory;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.fail;
import static org.junit.Assert.*;
public class ContentIndexDataElementFactoryTest
{
@Test
public void testNullValue()
{
ContentIndexDataElement contentIndexDataElement = ContentIndexDataElementFactory.create( "date-test", null );
assertNull( contentIndexDataElement.getOrderBy() );
assertEquals( 0, contentIndexDataElement.getStringValues().size() );
assertEquals( 0, contentIndexDataElement.getDateTimeValues().size() );
assertEquals( 0, contentIndexDataElement.getNumericValues().size() );
}
@Test
public void testSetWithNullValue()
{
final HashSet<Object> values = Sets.newHashSet();
values.add( null );
ContentIndexDataElement contentIndexDataElement = ContentIndexDataElementFactory.create( "date-test", values );
assertNull( contentIndexDataElement.getOrderBy() );
assertEquals( 0, contentIndexDataElement.getStringValues().size() );
assertEquals( 0, contentIndexDataElement.getDateTimeValues().size() );
assertEquals( 0, contentIndexDataElement.getNumericValues().size() );
}
@Test
public void testCreateStringElement()
{
ContentIndexDataElement contentIndexDataElement =
ContentIndexDataElementFactory.create( "date-test", Sets.newHashSet( (Object) "test" ) );
contentIndexDataElement.setFieldBaseName( "date-test" );
contentIndexDataElement.addStringValue( "test" );
assertNotNull( contentIndexDataElement.getOrderBy() );
assertEquals( 1, contentIndexDataElement.getStringValues().size() );
}
@Test
public void testCreateDateElement()
{
final Date time = Calendar.getInstance().getTime();
ContentIndexDataElement contentIndexDataElement =
ContentIndexDataElementFactory.create( "date-test", Sets.newHashSet( (Object) time ) );
assertNotNull( contentIndexDataElement.getOrderBy() );
assertEquals( 1, contentIndexDataElement.getStringValues().size() );
assertEquals( 1, contentIndexDataElement.getDateTimeValues().size() );
assertEquals( 0, contentIndexDataElement.getNumericValues().size() );
}
@Test
public void testCreateNumberElement()
{
ContentIndexDataElement contentIndexDataElement =
ContentIndexDataElementFactory.create( "number-test", Sets.newHashSet( (Object) new Double( 1 ) ) );
assertNotNull( contentIndexDataElement.getOrderBy() );
assertEquals( 1, contentIndexDataElement.getStringValues().size() );
assertEquals( 1, contentIndexDataElement.getNumericValues().size() );
assertEquals( 0, contentIndexDataElement.getDateTimeValues().size() );
}
@Test
public void testEmptyValue()
{
ContentIndexDataElement contentIndexDataElement = ContentIndexDataElementFactory.create( "date-test", null );
assertNull( contentIndexDataElement.getOrderBy() );
assertEquals( 0, contentIndexDataElement.getStringValues().size() );
assertEquals( 0, contentIndexDataElement.getNumericValues().size() );
assertEquals( 0, contentIndexDataElement.getDateTimeValues().size() );
}
@Test
public void testStringSet()
{
ContentIndexDataElement contentIndexDataElement =
ContentIndexDataElementFactory.create( "string-test", Sets.newHashSet( (Object) "test1", "test2" ) );
assertNotNull( contentIndexDataElement.getOrderBy() );
assertEquals( 2, contentIndexDataElement.getStringValues().size() );
assertEquals( 0, contentIndexDataElement.getNumericValues().size() );
assertEquals( 0, contentIndexDataElement.getDateTimeValues().size() );
}
@Test
public void testNumberSet()
{
ContentIndexDataElement contentIndexDataElement =
ContentIndexDataElementFactory.create( "number-test", Sets.newHashSet( (Object) "1", "2" ) );
assertNotNull( contentIndexDataElement.getOrderBy() );
assertEquals( 2, contentIndexDataElement.getStringValues().size() );
assertEquals( 2, contentIndexDataElement.getNumericValues().size() );
assertEquals( 0, contentIndexDataElement.getDateTimeValues().size() );
}
@Test
public void testNumberSetWithEquals()
{
ContentIndexDataElement contentIndexDataElement =
ContentIndexDataElementFactory.create( "number-test", Sets.newHashSet( (Object) "1", "1" ) );
assertNotNull( contentIndexDataElement.getOrderBy() );
assertEquals( 1, contentIndexDataElement.getStringValues().size() );
assertEquals( 1, contentIndexDataElement.getNumericValues().size() );
assertEquals( 0, contentIndexDataElement.getDateTimeValues().size() );
}
@Test
public void testDateSet()
{
final Calendar now = Calendar.getInstance();
final Date time = now.getTime();
now.add( 1, 1 );
final Date otherTime = now.getTime();
ContentIndexDataElement contentIndexDataElement =
ContentIndexDataElementFactory.create( "date-test", Sets.newHashSet( (Object) time, otherTime ) );
assertNotNull( contentIndexDataElement.getOrderBy() );
assertEquals( 2, contentIndexDataElement.getStringValues().size() );
assertEquals( 0, contentIndexDataElement.getNumericValues().size() );
assertEquals( 2, contentIndexDataElement.getDateTimeValues().size() );
}
@Test
public void testValidStringFormatForDateAsSet()
{
final SimpleDateFormat expectedFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm" );
final DateTime dateTime = new DateTime( 1975, 8, 1, 12, 0 );
ContentIndexDataElement contentIndexDataElement =
ContentIndexDataElementFactory.create( "date-test", Sets.newHashSet( (Object) dateTime.toDate() ) );
assertNotNull( contentIndexDataElement.getOrderBy() );
assertEquals( 1, contentIndexDataElement.getStringValues().size() );
assertEquals( 0, contentIndexDataElement.getNumericValues().size() );
assertEquals( 1, contentIndexDataElement.getDateTimeValues().size() );
final String dateStringValue = contentIndexDataElement.getStringValues().iterator().next();
try
{
expectedFormat.parse( dateStringValue );
}
catch ( Exception e )
{
fail(
"incorrect date format in string-representation of date: " + dateStringValue + ", expected: " + expectedFormat.toString() );
}
}
}