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 ExactMatchesValidatorTest {

    @Test
    void isValidSimple() {
        ExactMatchesValidator validator = new ExactMatchesValidator();
        validator.initialize(getConstraintAnnotation("streams", "playlists"));
        ConstraintValidatorContext context = null;
        Assertions.assertTrue(validator.isValid(null, context));
        Assertions.assertTrue(validator.isValid(Sets.newHashSet(), context));
        Assertions.assertTrue(validator.isValid(Sets.newHashSet("streams"), context));
        Assertions.assertTrue(validator.isValid(Sets.newHashSet("streams", "playlists"), context));
        Assertions.assertTrue(validator.isValid(Sets.newHashSet("streams", "playlists"), context));

        Assertions.assertFalse(validator.isValid(Sets.newHashSet("charts"), context));
        Assertions.assertFalse(validator.isValid(Sets.newHashSet("charts", "playlists"), context));
    }

    private ExactMatches getConstraintAnnotation(final String... strings) {
        return new ExactMatches() {

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

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

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

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

            @Override
            public String[] anyOf() {
                return strings;
            }
        };
    }
}
