/*
* 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.builtin;
import java.util.Date;
import org.apache.lucene.search.Query;
import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Store;
import org.hibernate.search.annotations.FieldBridge;
import org.hibernate.search.backend.spi.Work;
import org.hibernate.search.backend.spi.WorkType;
import org.hibernate.search.bridge.builtin.NumericEncodingDateBridge;
import org.hibernate.search.bridge.util.impl.NumericFieldUtils;
import org.hibernate.search.engine.integration.impl.ExtendedSearchIntegrator;
import org.hibernate.search.testsupport.TestForIssue;
import org.hibernate.search.testsupport.junit.SearchFactoryHolder;
import org.hibernate.search.testsupport.setup.TransactionContextForTest;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
/**
* Verifies the "null marker" is stored in the index when we wrap another
* {@link FieldBridge} with a {@link org.hibernate.search.bridge.builtin.impl.NullEncodingTwoWayFieldBridge}
*
* @author Sanne Grinovero
*/
@TestForIssue(jiraKey = "HSEARCH-1825")
public class NullEncodingTwoWayFieldBridgeTest {
@Rule
public SearchFactoryHolder sfHolder = new SearchFactoryHolder( Sample.class )
.withProperty( org.hibernate.search.cfg.Environment.DEFAULT_NULL_TOKEN, "-1" );
@Test
public void testIndexingWithNullEncodingFieldBridge() {
ExtendedSearchIntegrator searchFactory = sfHolder.getSearchFactory();
Sample entity = new Sample();
entity.id = 1;
entity.description = "null date";
entity.deletionDate = null; // should trigger the marker token
Work work = new Work( entity, entity.id, WorkType.ADD, false );
TransactionContextForTest tc = new TransactionContextForTest();
searchFactory.getWorker().performWork( work, tc );
tc.end();
Query termQuery = NumericFieldUtils.createExactMatchQuery( "deletionDate", Long.parseLong( "-1" ) );
int queryResultSize = searchFactory
.createHSQuery( termQuery, Sample.class )
.queryResultSize();
Assert.assertEquals( 1, queryResultSize );
}
@Indexed
static class Sample {
@DocumentId
long id;
@Field
String description;
@Field(store = Store.YES, index = Index.YES, analyze = Analyze.NO, indexNullAs = Field.DEFAULT_NULL_TOKEN,
bridge = @FieldBridge(impl = NumericEncodingDateBridge.class, params =
{ @org.hibernate.search.annotations.Parameter(name = "resolution", value = "MINUTE") }))
private Date deletionDate;
}
}