package io.delphiplatform.api.v3.validation;

import com.google.common.collect.Sets;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.lang.annotation.Annotation;

import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;

class ExactMatchesForIntCollectionValidatorTest {

    @Test
    void isValid() {
        ExactMatchesForIntCollectionValidator validator = new ExactMatchesForIntCollectionValidator();
        validator.initialize(getConstraintAnnotation(1, 3, 5));
        ConstraintValidatorContext context = null;
        Assertions.assertTrue(validator.isValid(null, context));
        Assertions.assertTrue(validator.isValid(Sets.newHashSet(), context));
        Assertions.assertTrue(validator.isValid(Sets.newHashSet(1), context));
        Assertions.assertTrue(validator.isValid(Sets.newHashSet(1, 5), context));

        Assertions.assertFalse(validator.isValid(Sets.newHashSet(12), context));
        Assertions.assertFalse(validator.isValid(Sets.newHashSet(1, 15), context));
    }

    private ExactMatchesForIntCollection getConstraintAnnotation(final int... values) {
        return new ExactMatchesForIntCollection() {

            @Override
            public Class<? extends Annotation> annotationType() {
                return ExactMatchesForIntCollection.class;
            }

            @Override
            public String message() {
                return "message";
            }

            @Override
            public Class<?>[] groups() {
                return new Class[0];
            }

            @Override
            public Class<? extends Payload>[] payload() {
                return null;
            }

            @Override
            public int[] anyOf() {
                return values;
            }
        };
    }
}
