/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.test.internal.metadata.aggregated;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Collections;
import java.util.Set;
import javax.validation.ConstraintDeclarationException;
import javax.validation.Valid;
import javax.validation.groups.ConvertGroup;
import javax.validation.groups.Default;
import org.hibernate.validator.internal.engine.DefaultParameterNameProvider;
import org.hibernate.validator.internal.engine.MethodValidationConfiguration;
import org.hibernate.validator.internal.engine.cascading.ValueExtractorManager;
import org.hibernate.validator.internal.metadata.BeanMetaDataManager;
import org.hibernate.validator.internal.metadata.aggregated.PropertyMetaData;
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.provider.MetaDataProvider;
import org.hibernate.validator.internal.util.ExecutableHelper;
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;
import org.hibernate.validator.internal.util.TypeResolutionHelper;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* @author Gunnar Morling
*/
public class PropertyMetaDataTest {
private BeanMetaDataManager beanMetaDataManager;
@BeforeMethod
public void setupBeanMetaDataManager() {
beanMetaDataManager = new BeanMetaDataManager(
new ConstraintHelper(),
new ExecutableHelper( new TypeResolutionHelper() ),
new TypeResolutionHelper(),
new ExecutableParameterNameProvider( new DefaultParameterNameProvider() ),
new ValueExtractorManager( Collections.emptySet() ),
Collections.<MetaDataProvider>emptyList(),
new MethodValidationConfiguration.Builder().build()
);
}
@Test
public void locallyDefinedGroupConversion() {
PropertyMetaData property = beanMetaDataManager.getBeanMetaData( User1.class ).getMetaDataFor( "addresses" );
assertThat( property.getCascadables().iterator().next().getCascadingMetaData().convertGroup( Default.class ) ).isEqualTo( BasicPostal.class );
}
@Test
public void groupConversionDefinedInHierarchy() {
PropertyMetaData property = beanMetaDataManager.getBeanMetaData( User2.class ).getMetaDataFor( "addresses" );
assertThat( property.getCascadables().iterator().next().getCascadingMetaData().convertGroup( Default.class ) ).isEqualTo( BasicPostal.class );
}
@Test(expectedExceptions = ConstraintDeclarationException.class, expectedExceptionsMessageRegExp = "HV000124.*")
public void groupConversionInHierarchyWithSameFrom() {
beanMetaDataManager.getBeanMetaData( User3.class ).getMetaDataFor( "addresses" );
}
public interface Complete extends Default {
}
public interface BasicPostal {
}
public interface FullPostal extends BasicPostal {
}
private static class Address {
}
private static class User1 {
@Valid
@ConvertGroup(from = Default.class, to = BasicPostal.class)
public Set<Address> getAddresses() {
return null;
}
}
private static class User2 extends User1 {
@Override
public Set<Address> getAddresses() {
return super.getAddresses();
}
}
private static class User3 extends User1 {
@Override
@Valid
@ConvertGroup.List({
@ConvertGroup(from = Default.class, to = BasicPostal.class),
@ConvertGroup(from = Default.class, to = Complete.class)
})
public Set<Address> getAddresses() {
return super.getAddresses();
}
}
}