/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.bridge;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.junit.Before;
import org.junit.Test;
import org.hibernate.search.annotations.Resolution;
import org.hibernate.search.bridge.builtin.StringEncodingDateBridge;
import org.hibernate.search.exception.SearchException;
import org.hibernate.search.testsupport.TestForIssue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* @author Hardy Ferentschik
*/
public class StringEncodingDateBridgeTest {
private static final TimeZone ENCODING_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
private StringEncodingDateBridge bridgeUnderTest;
private Date testDate;
private Document testDocument;
@Before
public void setUp() {
bridgeUnderTest = new StringEncodingDateBridge( Resolution.MILLISECOND );
Calendar calendar = GregorianCalendar.getInstance( ENCODING_TIME_ZONE, Locale.ROOT );
testDate = calendar.getTime();
testDocument = new Document();
StringField stringDateField = new StringField(
"date", DateTools.dateToString( testDate, DateTools.Resolution.MILLISECOND ), Field.Store.NO
);
testDocument.add( stringDateField );
StringField invalidDateField = new StringField(
"invalidDate", "foo", Field.Store.NO
);
testDocument.add( invalidDateField );
}
@Test
@TestForIssue(jiraKey = "HSEARCH-1752")
public void testFieldBridgeGetReturnsDateInstance() {
Object o = bridgeUnderTest.get( "date", testDocument );
assertTrue(
"The date bridge should return Date instance from a Document not " + o.getClass(), o instanceof Date
);
Date actualDate = (Date) o;
assertEquals( "Added and retrieved dates should match", testDate, actualDate );
}
@Test
@TestForIssue(jiraKey = "HSEARCH-1752")
public void testInvalidDateFieldThrowsException() {
try {
bridgeUnderTest.get( "invalidDate", testDocument );
fail( "The field value is not a valid date and conversion should throw an exception" );
}
catch (SearchException e) {
assertTrue( "Unexpected error " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000240" ) );
}
}
}