package io.konik.validation; import io.konik.validator.annotation.Basic; import io.konik.validator.annotation.Comfort; import io.konik.validator.annotation.Extended; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import javax.validation.groups.Default; import java.util.Arrays; import java.util.Collection; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.runners.Parameterized.Parameter; import static org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class MonetarySummationValidatorBelongsToProfileTest { private static final List<Class> BASIC = Arrays.asList(new Class[]{Default.class}); private static final List<Class> COMFORT = Arrays.asList(new Class[]{Default.class, Comfort.class}); private static final List<Class> EXTENDED = Arrays.asList(new Class[]{Default.class, Comfort.class, Extended.class}); @Parameters(name = "Check if method {1} of class {0} belongs to {2}") public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ { A.class, "getName", BASIC, false}, { A.class, "getName", COMFORT, true}, { A.class, "getName", EXTENDED, true}, { B.class, "getName", BASIC, false}, { B.class, "getName", COMFORT, false}, { B.class, "getName", EXTENDED, true}, { C.class, "getName", BASIC, true}, { C.class, "getName", COMFORT, true}, { C.class, "getName", EXTENDED, true}, { D.class, "getName", BASIC, true}, { D.class, "getName", COMFORT, true}, { D.class, "getName", EXTENDED, true} }); } @Parameter public Class<?> clazz; @Parameter(1) public String methodName; @Parameter(2) public List<Class<?>> validationGroups; @Parameter(3) public boolean expectedResult; @Test public void runParameterizedTest() { //when: boolean result = MonetarySummationValidator.belongsToProfile(clazz, methodName, validationGroups); //then: assertThat(result).isEqualTo(expectedResult); } public static class A { private String name; @Comfort public String getName() { return name; } } public static class B { private String name; @Extended public String getName() { return name; } } public static class C { private String name; @Basic public String getName() { return name; } } public static class D { private String name; public String getName() { return name; } } }