2929import org .mockito .junit .MockitoJUnitRunner ;
3030import software .amazon .awssdk .enhanced .dynamodb .AttributeConverter ;
3131import software .amazon .awssdk .enhanced .dynamodb .AttributeConverterProvider ;
32+ import software .amazon .awssdk .enhanced .dynamodb .AttributeValueType ;
3233import software .amazon .awssdk .enhanced .dynamodb .EnhancedType ;
3334import software .amazon .awssdk .enhanced .dynamodb .internal .mapper .ResolvedImmutableAttribute ;
3435import software .amazon .awssdk .services .dynamodb .model .AttributeValue ;
@@ -229,4 +230,43 @@ public void resolve_uses_customConverter() {
229230
230231 assertThat (resultAttributeValue .s ()).isEqualTo ("test-string-custom" );
231232 }
233+
234+ @ Test
235+ public void getAttributeValue_getterThrowsRuntimeException_propagatesException () {
236+ ImmutableAttribute <SimpleItem , SimpleItem , String > staticAttribute =
237+ ImmutableAttribute .builder (SimpleItem .class , SimpleItem .class , String .class )
238+ .name ("test-attribute" )
239+ .getter (item -> { throw new RuntimeException ("getter failed" ); })
240+ .setter (SimpleItem ::setAString )
241+ .build ();
242+
243+ ResolvedImmutableAttribute <SimpleItem , SimpleItem , String > resolvedAttribute =
244+ staticAttribute .resolve (AttributeConverterProvider .defaultProvider ());
245+
246+ Function <SimpleItem , AttributeValue > attributeValueFunction = resolvedAttribute .attributeGetterMethod ();
247+ SimpleItem item = new SimpleItem ("test" );
248+
249+ assertThatThrownBy (() -> attributeValueFunction .apply (item ))
250+ .isInstanceOf (RuntimeException .class )
251+ .hasMessage ("getter failed" );
252+ }
253+
254+ @ Test
255+ public void getAttributeValue_nullFromGetter_returnsNullAttributeValue () {
256+ ImmutableAttribute <SimpleItem , SimpleItem , String > staticAttribute =
257+ ImmutableAttribute .builder (SimpleItem .class , SimpleItem .class , String .class )
258+ .name ("test-attribute" )
259+ .getter (item -> null )
260+ .setter (SimpleItem ::setAString )
261+ .build ();
262+
263+ ResolvedImmutableAttribute <SimpleItem , SimpleItem , String > resolvedAttribute =
264+ staticAttribute .resolve (AttributeConverterProvider .defaultProvider ());
265+
266+ Function <SimpleItem , AttributeValue > attributeValueFunction = resolvedAttribute .attributeGetterMethod ();
267+ SimpleItem item = new SimpleItem ("test" );
268+ AttributeValue result = attributeValueFunction .apply (item );
269+
270+ assertThat (result .nul ()).isTrue ();
271+ }
232272}
0 commit comments