/* * 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.engine.groups.sequence; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.GroupSequence; import javax.validation.Validator; import javax.validation.constraints.NotNull; import org.hibernate.validator.test.internal.engine.groups.sequence.SequenceOfSequencesTest.AllConstraints.BasicConstraints; import org.hibernate.validator.test.internal.engine.groups.sequence.SequenceOfSequencesTest.AllConstraints.BasicConstraints.OverlyBasicConstraints; import org.hibernate.validator.test.internal.engine.groups.sequence.SequenceOfSequencesTest.AllConstraints.BasicConstraints.SomewhatBasicConstraints; import org.hibernate.validator.test.internal.engine.groups.sequence.SequenceOfSequencesTest.AllConstraints.ComplexConstraints; import org.hibernate.validator.test.internal.engine.groups.sequence.SequenceOfSequencesTest.AllConstraints.ComplexConstraints.ImmenselyComplexConstraints; import org.hibernate.validator.test.internal.engine.groups.sequence.SequenceOfSequencesTest.AllConstraints.ComplexConstraints.SomewhatComplexConstraints; import org.hibernate.validator.testutil.TestForIssue; import org.hibernate.validator.testutils.ValidatorUtil; import org.testng.annotations.Test; import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertCorrectPropertyPaths; /** * Sequences may comprise other sequences. * * @author Gunnar Moring */ public class SequenceOfSequencesTest { /** * A sequence of sequences is passed to the validate() call. */ @Test public void groupSequenceOfGroupSequences() { Validator validator = ValidatorUtil.getValidator(); PlushAlligator alligator = new PlushAlligator(); Set<ConstraintViolation<PlushAlligator>> violations = validator.validate( alligator, AllConstraints.class ); assertCorrectPropertyPaths( violations, "name" ); alligator.name = "Ruben"; violations = validator.validate( alligator, AllConstraints.class ); assertCorrectPropertyPaths( violations, "highestEducationalDegree" ); alligator.highestEducationalDegree = "PhD"; violations = validator.validate( alligator, AllConstraints.class ); assertCorrectPropertyPaths( violations, "length" ); alligator.length = 540; violations = validator.validate( alligator, AllConstraints.class ); assertCorrectPropertyPaths( violations, "age" ); } /** * A sequence of sequences is used as the default group sequence. */ @Test @TestForIssue(jiraKey = "HV-1055") public void defaultGroupSequenceContainsOtherGroupSequences() { Validator validator = ValidatorUtil.getValidator(); PlushCrocodile crocodile = new PlushCrocodile(); Set<ConstraintViolation<PlushCrocodile>> violations = validator.validate( crocodile ); assertCorrectPropertyPaths( violations, "name" ); crocodile.name = "Ruben"; violations = validator.validate( crocodile, AllConstraints.class ); assertCorrectPropertyPaths( violations, "highestEducationalDegree" ); crocodile.highestEducationalDegree = "PhD"; violations = validator.validate( crocodile, AllConstraints.class ); assertCorrectPropertyPaths( violations, "length" ); crocodile.length = 540; violations = validator.validate( crocodile, AllConstraints.class ); assertCorrectPropertyPaths( violations, "age" ); } public static class PlushAlligator { @NotNull(groups = OverlyBasicConstraints.class) public String name; @NotNull(groups = SomewhatBasicConstraints.class) public String highestEducationalDegree; @NotNull(groups = SomewhatComplexConstraints.class) public Integer length; @NotNull(groups = ImmenselyComplexConstraints.class) public Integer age; } @GroupSequence({ AllConstraints.class, PlushCrocodile.class }) public static class PlushCrocodile { @NotNull(groups = OverlyBasicConstraints.class) public String name; @NotNull(groups = SomewhatBasicConstraints.class) public String highestEducationalDegree; @NotNull(groups = SomewhatComplexConstraints.class) public Integer length; @NotNull(groups = ImmenselyComplexConstraints.class) public Integer age; } @GroupSequence({ BasicConstraints.class, ComplexConstraints.class }) public interface AllConstraints { @GroupSequence({ OverlyBasicConstraints.class, SomewhatBasicConstraints.class }) public interface BasicConstraints { public interface OverlyBasicConstraints { } public interface SomewhatBasicConstraints { } } @GroupSequence({ SomewhatComplexConstraints.class, ImmenselyComplexConstraints.class }) public interface ComplexConstraints { public interface SomewhatComplexConstraints { } public interface ImmenselyComplexConstraints { } } } }