From 4fb844a25e099b1a93b169e0792b4e17a2328c11 Mon Sep 17 00:00:00 2001 From: Roberto Cortez Date: Fri, 14 Apr 2023 10:47:23 +0100 Subject: [PATCH] Validate mapping super types --- .../config/ConfigMappingInterface.java | 2 +- .../BeanValidationConfigValidator.java | 6 ++++ .../config/validator/ValidateConfigTest.java | 28 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/implementation/src/main/java/io/smallrye/config/ConfigMappingInterface.java b/implementation/src/main/java/io/smallrye/config/ConfigMappingInterface.java index c99461572..889a36c15 100644 --- a/implementation/src/main/java/io/smallrye/config/ConfigMappingInterface.java +++ b/implementation/src/main/java/io/smallrye/config/ConfigMappingInterface.java @@ -101,7 +101,7 @@ int getSuperTypeCount() { return superTypes.length; } - ConfigMappingInterface[] getSuperTypes() { + public ConfigMappingInterface[] getSuperTypes() { return superTypes; } diff --git a/validator/src/main/java/io/smallrye/config/validator/BeanValidationConfigValidator.java b/validator/src/main/java/io/smallrye/config/validator/BeanValidationConfigValidator.java index 6bee8921b..c558c9bd0 100644 --- a/validator/src/main/java/io/smallrye/config/validator/BeanValidationConfigValidator.java +++ b/validator/src/main/java/io/smallrye/config/validator/BeanValidationConfigValidator.java @@ -53,6 +53,12 @@ default void validateMappingInterface( final Object mappingObject, final List problems) { + for (ConfigMappingInterface superType : mappingInterface.getSuperTypes()) { + for (Property property : superType.getProperties()) { + validateProperty(property, currentPath, namingStrategy, mappingObject, false, problems); + } + } + for (Property property : mappingInterface.getProperties()) { validateProperty(property, currentPath, namingStrategy, mappingObject, false, problems); } diff --git a/validator/src/test/java/io/smallrye/config/validator/ValidateConfigTest.java b/validator/src/test/java/io/smallrye/config/validator/ValidateConfigTest.java index a71687be8..4317525b3 100644 --- a/validator/src/test/java/io/smallrye/config/validator/ValidateConfigTest.java +++ b/validator/src/test/java/io/smallrye/config/validator/ValidateConfigTest.java @@ -347,6 +347,34 @@ interface Nested { } } + @Test + void hierarchy() { + SmallRyeConfig config = new SmallRyeConfigBuilder() + .withValidator(new BeanValidationConfigValidatorImpl()) + .withMapping(Child.class) + .withSources(config("validator.child.number", "1")) + .build(); + + ConfigValidationException validationException = assertThrows(ConfigValidationException.class, + () -> config.getConfigMapping(Child.class)); + List validations = new ArrayList<>(); + for (int i = 0; i < validationException.getProblemCount(); i++) { + validations.add(validationException.getProblem(i).getMessage()); + } + assertEquals(1, validations.size()); + assertTrue(validations.contains("validator.child.number must be greater than or equal to 10")); + } + + public interface Parent { + @Min(10) + Integer number(); + } + + @ConfigMapping(prefix = "validator.child") + public interface Child extends Parent { + + } + private static void assertValidationsEqual(List validations, String... expectedProblemMessages) { List remainingActual = new ArrayList<>(validations); List remainingExpected = Stream.of(expectedProblemMessages).collect(Collectors.toList());