Skip to content

Commit

Permalink
HV-1442 Fix root cascading metadata for arrays in the programmatic API
Browse files Browse the repository at this point in the history
  • Loading branch information
gsmet authored and gunnarmorling committed Aug 3, 2017
1 parent ba665ed commit eea5426
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 7 deletions.
Expand Up @@ -167,13 +167,7 @@ protected CascadingTypeParameter getCascadingMetaData() {
}
}


boolean isArray = TypeHelper.isArray( configuredType );
CascadingTypeParameter cascadingMetaData = isArray
? CascadingTypeParameter.arrayElement( configuredType, isCascading, typeParametersCascadingMetaData, groupConversions )
: CascadingTypeParameter.annotatedObject( configuredType, isCascading, typeParametersCascadingMetaData, groupConversions );

return cascadingMetaData;
return CascadingTypeParameter.annotatedObject( configuredType, isCascading, typeParametersCascadingMetaData, groupConversions );
}

private static class ContainerElementPathKey {
Expand Down
Expand Up @@ -10,6 +10,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertThat;
import static org.hibernate.validator.testutil.ConstraintViolationAssert.pathWith;
import static org.hibernate.validator.testutil.ConstraintViolationAssert.violationOf;
import static org.hibernate.validator.testutils.ValidatorUtil.getConfiguration;

Expand Down Expand Up @@ -113,6 +114,33 @@ public void testProgrammaticCascadingMethodValidation() {
);
}

@Test
@TestForIssue(jiraKey = "HV-1442")
public void testProgrammaticCascadingOnArray() {
ConstraintMapping newMapping = config.createConstraintMapping();
newMapping
.type( Bean.class )
.property( "property", FIELD )
.constraint( new NotNullDef() )
.type( ArrayHolder.class )
.property( "beans", FIELD )
.valid();
config.addMapping( newMapping );
Validator validator = config.buildValidatorFactory().getValidator();

ArrayHolder arrayHolder = new ArrayHolder( new Bean[]{ new Bean( null ) } );

Set<ConstraintViolation<ArrayHolder>> violations = validator.validate( arrayHolder );

assertThat( violations ).containsOnlyViolations(
violationOf( NotNull.class )
.withPropertyPath( pathWith()
.property( "beans" )
.property( "property", true, null, 0, Object[].class, null )
)
);
}

private static class A {
protected C c;

Expand All @@ -131,4 +159,28 @@ public String getString() {
return string;
}
}

private static class ArrayHolder {

@SuppressWarnings("unused")
private Bean[] beans;

private ArrayHolder(Bean[] beans) {
this.beans = beans;
}
}

private static class Bean {

private String property;

private Bean(String property) {
this.property = property;
}

@SuppressWarnings("unused")
public String getProperty() {
return property;
}
}
}

0 comments on commit eea5426

Please sign in to comment.