@Test public void testFieldDescriptorAsWithNullParameterThrowsException() { FieldDescriptor fieldDescriptor = getFieldDescriptor( Snafu.class, "my-snafu" ); try { fieldDescriptor.as( null ); fail( "null is not a valid type" ); } catch (ClassCastException e) { assertTrue( "Wrong exception: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000180" ) ); } }
@Test public void testCastingNonNumericFieldDescriptorToNumericOneThrowsException() { FieldDescriptor fieldDescriptor = getFieldDescriptor( Snafu.class, "my-snafu" ); assertFalse( FieldSettingsDescriptor.Type.NUMERIC.equals( fieldDescriptor.getType() ) ); try { fieldDescriptor.as( NumericFieldSettingsDescriptor.class ); fail( "A basic field descriptor cannot be narrowed to a numeric one" ); } catch (ClassCastException e) { assertTrue( "Wrong exception: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000180" ) ); } }
@Test @TestForIssue(jiraKey = "HSEARCH-1987") public void testSomeOfSeveralFieldsAreNumeric() { Set<FieldDescriptor> fields = sfHolder.getSearchFactory() .getIndexedTypeDescriptor( new PojoIndexedTypeIdentifier( TouristAttraction.class ) ) .getProperty( "rating" ) .getIndexedFields(); assertThat( fields ).extracting( "name" ) .containsExactlyInAnyOrder( "rating", "ratingNumericPrecision1", "ratingNumericPrecision2" ); for ( FieldDescriptor field : fields ) { if ( "ratingNumericPrecision1".equals( field.getName() ) ) { assertThat( field.getType() ).isEqualTo( Type.NUMERIC ); assertThat( field.as( NumericFieldSettingsDescriptor.class ).precisionStep() ).isEqualTo( 1 ); } else if ( "ratingNumericPrecision2".equals( field.getName() ) ) { assertThat( field.getType() ).isEqualTo( Type.NUMERIC ); assertThat( field.as( NumericFieldSettingsDescriptor.class ).precisionStep() ).isEqualTo( 2 ); } else { assertThat( field.getType() ).isEqualTo( Type.BASIC ); } } }
@Test public void testFieldDescriptorExplicitNumericOptions() { FieldDescriptor fieldDescriptor = getFieldDescriptor( Snafu.class, "numericField" ); assertTrue( FieldSettingsDescriptor.Type.NUMERIC.equals( fieldDescriptor.getType() ) ); NumericFieldSettingsDescriptor numericFieldSettingsDescriptor = fieldDescriptor.as( NumericFieldSettingsDescriptor.class ); int expectedPrecisionStep = 16; assertEquals( "the numeric step should be " + expectedPrecisionStep, expectedPrecisionStep, numericFieldSettingsDescriptor.precisionStep() ); NumericEncodingType expectedNumericEncodingType = NumericEncodingType.INTEGER; assertEquals( "the numeric field should be encoded as " + expectedNumericEncodingType, expectedNumericEncodingType, numericFieldSettingsDescriptor.encodingType() ); }
@Test public void testFieldDescriptorByteNumericFieldBridge() { FieldDescriptor fieldDescriptor = getFieldDescriptor( Snafu.class, "numericByteField" ); assertNotNull( fieldDescriptor.getFieldBridge() ); assertTrue( fieldDescriptor.getFieldBridge() instanceof NumericFieldBridge ); assertTrue( FieldSettingsDescriptor.Type.NUMERIC.equals( fieldDescriptor.getType() ) ); NumericFieldSettingsDescriptor numericFieldSettingsDescriptor = fieldDescriptor.as( NumericFieldSettingsDescriptor.class ); int expectedPrecisionStep = 4; assertEquals( "the numeric step should be " + expectedPrecisionStep, expectedPrecisionStep, numericFieldSettingsDescriptor.precisionStep() ); NumericEncodingType expectedNumericEncodingType = NumericEncodingType.INTEGER; assertEquals( "the short numeric field should be encoded as " + expectedNumericEncodingType, expectedNumericEncodingType, numericFieldSettingsDescriptor.encodingType() ); }
@Test public void testFieldDescriptorShortNumericFieldBridge() { FieldDescriptor fieldDescriptor = getFieldDescriptor( Snafu.class, "numericShortField" ); assertNotNull( fieldDescriptor.getFieldBridge() ); assertTrue( fieldDescriptor.getFieldBridge() instanceof NumericFieldBridge ); assertTrue( FieldSettingsDescriptor.Type.NUMERIC.equals( fieldDescriptor.getType() ) ); NumericFieldSettingsDescriptor numericFieldSettingsDescriptor = fieldDescriptor.as( NumericFieldSettingsDescriptor.class ); int expectedPrecisionStep = 8; assertEquals( "the numeric step should be " + expectedPrecisionStep, expectedPrecisionStep, numericFieldSettingsDescriptor.precisionStep() ); NumericEncodingType expectedNumericEncodingType = NumericEncodingType.INTEGER; assertEquals( "the short numeric field should be encoded as " + expectedNumericEncodingType, expectedNumericEncodingType, numericFieldSettingsDescriptor.encodingType() ); }