Skip to content

Commit feca77e

Browse files
committed
add tool to check if parameter validation is enabled
1 parent 5ca5371 commit feca77e

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

src/main/java/it/aboutbits/springboot/testing/validation/core/BaseValidationAssert.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
package it.aboutbits.springboot.testing.validation.core;
22

33
import it.aboutbits.springboot.toolbox.type.CustomType;
4+
import jakarta.validation.Valid;
45
import lombok.AccessLevel;
56
import lombok.Getter;
67
import lombok.NonNull;
78
import lombok.RequiredArgsConstructor;
89
import lombok.Setter;
910
import org.apache.logging.log4j.util.TriConsumer;
11+
import org.springframework.validation.annotation.Validated;
1012

13+
import java.util.Arrays;
1114
import java.util.HashSet;
1215
import java.util.Set;
1316
import java.util.function.BiConsumer;
1417
import java.util.function.Consumer;
1518

19+
import static org.assertj.core.api.Assertions.assertThat;
20+
1621
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
1722
public abstract class BaseValidationAssert<R extends BaseRuleBuilder<?>> {
1823
@Getter(AccessLevel.PROTECTED)
@@ -46,6 +51,43 @@ public <P> CallBuilder<R, P> of(@NonNull P parameterUnderTest) {
4651
return new CallBuilder<>(this);
4752
}
4853

54+
@SuppressWarnings("unused")
55+
public AnnotationChecker calling(
56+
@NonNull Class<?> classUnderTest,
57+
@NonNull String methodName,
58+
@NonNull Class<?>... methodParameterTypes
59+
) {
60+
return new AnnotationChecker(classUnderTest, methodName, methodParameterTypes);
61+
}
62+
63+
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
64+
public static final class AnnotationChecker {
65+
private final Class<?> classUnderTest;
66+
private final String methodName;
67+
private final Class<?>[] methodParameterTypes;
68+
69+
public void isEnabled() {
70+
assertThat(classUnderTest.isAnnotationPresent(Validated.class)).isTrue();
71+
72+
try {
73+
var method = classUnderTest.getMethod(methodName, methodParameterTypes);
74+
var parameter = method.getParameters()[method.getParameterCount() - 1];
75+
assertThat(parameter.isAnnotationPresent(Valid.class)).isTrue();
76+
} catch (NoSuchMethodException e) {
77+
throw new AssertionError(
78+
"Method \"%s(%s)\" not found in class \"%s\"".formatted(
79+
methodName,
80+
String.join(
81+
", ",
82+
Arrays.stream(methodParameterTypes).map(Class::getCanonicalName).toList()
83+
),
84+
classUnderTest.getCanonicalName()
85+
), e
86+
);
87+
}
88+
}
89+
}
90+
4991
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
5092
public static final class CallBuilder<R extends BaseRuleBuilder<?>, P> {
5193
private final BaseValidationAssert<R> parent;

0 commit comments

Comments
 (0)