/* * 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.elasticsearch.test; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.MonthDay; import java.time.OffsetDateTime; import java.time.OffsetTime; import java.time.Year; import java.time.YearMonth; import java.time.ZonedDateTime; import java.util.Calendar; import java.util.Date; import javax.persistence.Entity; import javax.persistence.Id; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.elasticsearch.impl.ElasticsearchIndexManager; import org.hibernate.search.exception.SearchException; import org.hibernate.search.test.SearchInitializationTestBase; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; /** * Tests for {@link ElasticsearchIndexManager}'s indexNullAs type checking. * * @author Yoann Rodiere */ public class ElasticsearchIndexNullAsTypeCheckingIT extends SearchInitializationTestBase { @Rule public ExpectedException thrown = ExpectedException.none(); @Test public void indexNullAs_invalid_integer() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Integer" ); init( IntegerFailureTestEntity.class ); } @Indexed @Entity public static class IntegerFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "12.1") Integer myField; } @Test public void indexNullAs_invalid_long() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Long" ); init( LongFailureTestEntity.class ); } @Indexed @Entity public static class LongFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "12.1") Long myField; } @Test public void indexNullAs_invalid_float() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Float" ); init( FloatFailureTestEntity.class ); } @Indexed @Entity public static class FloatFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "foo") Float myField; } @Test public void indexNullAs_invalid_double() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Double" ); init( DoubleFailureTestEntity.class ); } @Indexed @Entity public static class DoubleFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "foo") Double myField; } @Test public void indexNullAs_invalid_boolean() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Boolean" ); init( BooleanFailureTestEntity.class ); } @Indexed @Entity public static class BooleanFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "foo") boolean myField; } @Test public void indexNullAs_invalid_date() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Date" ); thrown.expectMessage( "ISO-8601" ); init( DateFailureTestEntity.class ); } @Indexed @Entity public static class DateFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "01/01/2013") // Expected format is ISO-8601 (yyyy-MM-dd'T'HH:mm:ssZ) Date myField; } @Test public void indexNullAs_invalid_calendar() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Calendar" ); thrown.expectMessage( "ISO-8601" ); init( CalendarFailureTestEntity.class ); } @Indexed @Entity public static class CalendarFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "01/01/2013") // Expected format is ISO-8601 (yyyy-MM-dd'T'HH:mm:ssZ) Calendar myField; } @Test public void indexNullAs_invalid_duration() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Long" ); // Durations are indexed as longs init( DurationFailureTestEntity.class ); } @Indexed @Entity public static class DurationFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "PT13M") // Expected format is a number of nanoseconds Duration myField; } @Test public void indexNullAs_invalid_instant() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Instant" ); thrown.expectMessage( "ISO-8601" ); init( InstantFailureTestEntity.class ); } @Indexed @Entity public static class InstantFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "01/01/2013") // Expected format is ISO-8601 (yyyy-MM-dd'T'HH:mm:ssZ) Instant myField; } @Test public void indexNullAs_invalid_localDateTime() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "LocalDateTime" ); thrown.expectMessage( "ISO-8601" ); init( LocalDateTimeFailureTestEntity.class ); } @Indexed @Entity public static class LocalDateTimeFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "2013-12-01T18:25:00+01:00") // Expected format is ISO-8601 (yyyy-MM-dd'T'HH:mm:ss) LocalDateTime myField; } @Test public void indexNullAs_invalid_localDate() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "LocalDate" ); thrown.expectMessage( "ISO-8601" ); init( LocalDateFailureTestEntity.class ); } @Indexed @Entity public static class LocalDateFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "2013-12-01T18:25:00") // Expected format is ISO-8601 (yyyy-MM-dd) LocalDate myField; } @Test public void indexNullAs_invalid_localTime() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "LocalTime" ); thrown.expectMessage( "ISO-8601" ); init( LocalTimeFailureTestEntity.class ); } @Indexed @Entity public static class LocalTimeFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "18:25:00+01:00") // Expected format is ISO-8601 (HH:mm:ss) LocalTime myField; } @Test public void indexNullAs_invalid_offsetDateTime() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "OffsetDateTime" ); thrown.expectMessage( "ISO-8601" ); init( OffsetDateTimeFailureTestEntity.class ); } @Indexed @Entity public static class OffsetDateTimeFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "2013-12-01T18:25:00[UTC]") // Expected format is ISO-8601 (yyyy-MM-dd'T'HH:mm:ssZ) OffsetDateTime myField; } @Test public void indexNullAs_invalid_offsetTime() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "OffsetTime" ); thrown.expectMessage( "ISO-8601" ); init( OffsetTimeFailureTestEntity.class ); } @Indexed @Entity public static class OffsetTimeFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "18:25:00[UTC]") // Expected format is ISO-8601 (HH:mm:ssZ) OffsetTime myField; } @Test public void indexNullAs_invalid_zonedDateTime() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "ZonedDateTime" ); thrown.expectMessage( "ISO-8601" ); init( ZonedDateTimeFailureTestEntity.class ); } @Indexed @Entity public static class ZonedDateTimeFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "2013-02-15T18:25:00+01:00") // Expected format is ISO-8601 (yyyy-MM-dd'T'HH:mm:ss[ZZZ]) ZonedDateTime myField; } @Test public void indexNullAs_invalid_year() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "Year" ); thrown.expectMessage( "ISO-8601" ); init( YearFailureTestEntity.class ); } @Indexed @Entity public static class YearFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "2013-02") // Expected format is ISO-8601 (for instance 2014) Year myField; } @Test public void indexNullAs_invalid_yearMonth() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "YearMonth" ); thrown.expectMessage( "ISO-8601" ); init( YearMonthFailureTestEntity.class ); } @Indexed @Entity public static class YearMonthFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "02/2013") // Expected format is ISO-8601 (yyyy-MM) YearMonth myField; } @Test public void indexNullAs_invalid_monthDay() { thrown.expect( SearchException.class ); thrown.expectMessage( "HSEARCH000325" ); thrown.expectMessage( "myField" ); thrown.expectMessage( "MonthDay" ); thrown.expectMessage( "ISO-8601" ); init( MonthDayFailureTestEntity.class ); } @Indexed @Entity public static class MonthDayFailureTestEntity { @DocumentId @Id Long id; @Field(indexNullAs = "12-31") // Expected format is ISO-8601 (--MM-dd) MonthDay myField; } }