/* * 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.configuration.indexedembedded; import java.util.List; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.annotations.IndexedEmbedded; import org.hibernate.search.exception.SearchException; import org.hibernate.search.spi.SearchIntegratorBuilder; import org.hibernate.search.test.util.impl.ExpectedLog4jLog; import org.hibernate.search.spi.SearchIntegrator; import org.hibernate.search.testsupport.TestForIssue; import org.hibernate.search.testsupport.setup.SearchConfigurationForTest; import org.junit.Rule; import org.junit.Test; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** * @author Hardy Ferentschik */ @TestForIssue(jiraKey = "HSEARCH-1312") public class IndexedEmbeddedWithAbstractClassTest { @Rule public ExpectedLog4jLog logged = ExpectedLog4jLog.create(); @Test public void testAbstractClassAnnotatedWithIndexedLogsWarning() { SearchConfigurationForTest configuration = new SearchConfigurationForTest() .addClass( A.class ) .addClass( AbstractA.class ) .addClass( D.class ); logged.expectMessage( "HSEARCH000044", "@Indexed", AbstractA.class.getName() ); SearchIntegrator searchIntegrator = new SearchIntegratorBuilder().configuration( configuration ).buildSearchIntegrator(); searchIntegrator.close(); } @Test public void testInvalidConfiguredPathThrowsException() { try { SearchConfigurationForTest configuration = new SearchConfigurationForTest() .addClass( B.class ) .addClass( AbstractB.class ) .addClass( D.class ); logged.expectMessageMissing( "HSEARCH000044", "@Indexed", AbstractB.class.getName() ); new SearchIntegratorBuilder().configuration( configuration ).buildSearchIntegrator(); fail( "Invalid configuration should throw an exception" ); } catch (SearchException e) { assertTrue( "Invalid exception code", e.getMessage().startsWith( "HSEARCH000216" ) ); } } @Test public void testInvalidConfiguredPathThrowsExceptionAndIndexedAbstractClassLogsWarning() { try { SearchConfigurationForTest configuration = new SearchConfigurationForTest() .addClass( C.class ) .addClass( AbstractC.class ) .addClass( D.class ); logged.expectMessage( "HSEARCH000044", "@Indexed", AbstractC.class.getName() ); new SearchIntegratorBuilder().configuration( configuration ).buildSearchIntegrator(); fail( "Invalid configuration should throw an exception" ); } catch (SearchException e) { assertTrue( "Invalid exception code", e.getMessage().startsWith( "HSEARCH000216" ) ); } } @Indexed public abstract static class AbstractA { @DocumentId long id; @IndexedEmbedded(includePaths = { "foo" }) List<D> list; } @Indexed public static final class A extends AbstractA { } public abstract static class AbstractB { @DocumentId long id; @IndexedEmbedded(includePaths = { "snafu", "fubar" }) List<D> list; } @Indexed public static final class B extends AbstractB { } @Indexed public abstract static class AbstractC { @DocumentId long id; @IndexedEmbedded(includePaths = { "snafu", "fubar" }) List<D> list; } @Indexed public static final class C extends AbstractC { } @Indexed public static class D { @DocumentId long id; @Field String foo; } }