/* * 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.query.validation; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.apache.lucene.index.Term; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.hibernate.Transaction; import org.hibernate.search.FullTextQuery; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.bridge.util.impl.NumericFieldUtils; import org.hibernate.search.exception.SearchException; import org.hibernate.search.test.SearchTestBase; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** * @author Hardy Ferentschik */ public class QueryValidationTest extends SearchTestBase { private FullTextSession fullTextSession; @Before @Override public void setUp() throws Exception { super.setUp(); Transaction tx = openSession().beginTransaction(); getSession().save( new A() ); tx.commit(); getSession().close(); this.fullTextSession = Search.getFullTextSession( openSession() ); } @After @Override public void tearDown() throws Exception { fullTextSession.close(); super.tearDown(); } @Test public void testTargetStringEncodedFieldWithNumericRangeQueryThrowsException() { Query query = NumericFieldUtils.createNumericRangeQuery( "value", 1, 1, true, true ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, A.class ); try { fullTextQuery.list(); fail(); } catch (SearchException e) { assertTrue( "Unexpected error message: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000232" ) ); } } @Test public void testTargetNumericEncodedFieldWithStringQueryThrowsException() { TermQuery query = new TermQuery( new Term( "value", "bar" ) ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, B.class ); try { fullTextQuery.list(); fail(); } catch (SearchException e) { assertTrue( "Unexpected error message: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000233" ) ); } } @Test public void testTargetingNonIndexedEntityThrowsException() { TermQuery query = new TermQuery( new Term( "foo", "bar" ) ); try { fullTextSession.createFullTextQuery( query, C.class ); } catch (IllegalArgumentException e) { assertTrue( "Unexpected error message: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000234" ) ); } } @Test public void testTargetingNonConfiguredEntityThrowsException() { TermQuery query = new TermQuery( new Term( "foo", "bar" ) ); try { fullTextSession.createFullTextQuery( query, D.class ); } catch (IllegalArgumentException e) { assertTrue( "Unexpected error message: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000332" ) ); } } @Override public Class<?>[] getAnnotatedClasses() { return new Class[] { A.class, B.class, C.class }; } @Entity @Indexed public static class A { @Id @GeneratedValue private long id; @Field private String value; } @Entity @Indexed public static class B { @Id @GeneratedValue private long id; @Field private long value; } @Entity public static class C { @Id @GeneratedValue private long id; } @Entity public static class D { @Id @GeneratedValue private long id; } }