diff --git a/easy-random-bean-validation/src/main/java/org/jeasy/random/validation/BeanValidationRandomizerRegistry.java b/easy-random-bean-validation/src/main/java/org/jeasy/random/validation/BeanValidationRandomizerRegistry.java index a3c801438..7853dbfa7 100644 --- a/easy-random-bean-validation/src/main/java/org/jeasy/random/validation/BeanValidationRandomizerRegistry.java +++ b/easy-random-bean-validation/src/main/java/org/jeasy/random/validation/BeanValidationRandomizerRegistry.java @@ -44,7 +44,7 @@ @Priority(-2) public class BeanValidationRandomizerRegistry implements RandomizerRegistry { - private Map, BeanValidationAnnotationHandler> annotationHandlers = new HashMap<>(); + protected Map, BeanValidationAnnotationHandler> annotationHandlers = new HashMap<>(); @Override public void init(EasyRandomParameters parameters) { diff --git a/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/BeanValidationTest.java b/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/BeanValidationTest.java index 6b96328c6..4d0fe32a6 100644 --- a/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/BeanValidationTest.java +++ b/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/BeanValidationTest.java @@ -34,6 +34,7 @@ import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; +import javax.validation.constraints.Digits; import org.jeasy.random.EasyRandom; import org.jeasy.random.EasyRandomParameters; @@ -219,4 +220,24 @@ void generatedBeanShouldBeValidUsingBeanValidationAPI() { assertThat(violations).isEmpty(); } + @Test + void customRegistryTest() { + // given + class Salary { + @Digits(integer = 2, fraction = 2) // OSS developer salary.. :-) + private BigDecimal amount; + } + + EasyRandomParameters parameters = new EasyRandomParameters() + .randomizerRegistry(new MyCustomBeanValidationRandomizerRegistry()); + EasyRandom easyRandom = new EasyRandom(parameters); + + // when + Salary salary = easyRandom.nextObject(Salary.class); + + // then + assertThat(salary).isNotNull(); + assertThat(salary.amount).isLessThanOrEqualTo(new BigDecimal("99.99")); + } + } diff --git a/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/MyCustomBeanValidationRandomizerRegistry.java b/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/MyCustomBeanValidationRandomizerRegistry.java new file mode 100644 index 000000000..5f00b0d99 --- /dev/null +++ b/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/MyCustomBeanValidationRandomizerRegistry.java @@ -0,0 +1,37 @@ +/* + * The MIT License + * + * Copyright (c) 2020, Mahmoud Ben Hassine (mahmoud.benhassine@icloud.com) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.jeasy.random.validation; + +import javax.validation.constraints.Digits; + +import org.jeasy.random.EasyRandomParameters; + +public class MyCustomBeanValidationRandomizerRegistry extends BeanValidationRandomizerRegistry { + + @Override + public void init(EasyRandomParameters parameters) { + super.init(parameters); + annotationHandlers.put(Digits.class, new MyCustomDigitsAnnotationHandler()); + } +} diff --git a/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/MyCustomDigitsAnnotationHandler.java b/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/MyCustomDigitsAnnotationHandler.java new file mode 100644 index 000000000..6c1c7736a --- /dev/null +++ b/easy-random-bean-validation/src/test/java/org/jeasy/random/validation/MyCustomDigitsAnnotationHandler.java @@ -0,0 +1,40 @@ +/* + * The MIT License + * + * Copyright (c) 2020, Mahmoud Ben Hassine (mahmoud.benhassine@icloud.com) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.jeasy.random.validation; + +import java.lang.reflect.Field; + +import org.jeasy.random.api.Randomizer; +import org.jeasy.random.randomizers.number.BigDecimalRandomizer; + +public class MyCustomDigitsAnnotationHandler implements BeanValidationAnnotationHandler { + + @Override + public Randomizer getRandomizer(Field field) { + // `@Digits` is applicable to several types (see its javadoc) + // for this test, just assuming the field is a BigDecimal + return new BigDecimalRandomizer(Integer.valueOf(2)); + } + +}