import pytest
from django.core.exceptions import ValidationError

from users.views.admin.domains import DomainValidator

VALID_DOMAINS = [
    "takahe.social",
    "subdomain.takahe.social",
    "another.subdomain.takahe.social",
    "jointakahe.org",
    "xn--c6h.com",
    "takahe.xn--social",
    "example.com",
    "www.example.com",
    "example.co.uk",
]

INVALID_DOMAINS = [
    "example.c",
    "example,com",
    "example,com.com",
    "example",
    ".com",
    "example.com/example",
    "-example.com",
    "example-.com",
    "example.com-",
    "https://example.com",
]


@pytest.mark.parametrize("domain", VALID_DOMAINS)
def test_domain_validation_accepts_valid_domains(domain):
    """
    Tests that the domain validator works in positive cases
    """
    DomainValidator()(domain)


@pytest.mark.parametrize("domain", INVALID_DOMAINS)
def test_domain_validation_raises_exception_for_invalid_domains(domain):
    """
    Tests that the domain validator works in negative cases
    """
    with pytest.raises(ValidationError):
        DomainValidator()(domain)