Files
gh-christianlouis-dmarq/backend/app/tests/test_domain_validator.py
T
2026-05-18 16:44:06 +02:00

64 lines
2.1 KiB
Python

import socket
from unittest.mock import patch
from app.utils.domain_validator import (
DomainValidationError,
validate_domain,
validate_domain_config,
)
class TestValidateDomain:
def test_valid_domain_without_dns_check(self):
assert validate_domain("example.com", check_dns=False) == (True, None, None)
def test_domain_longer_than_253_characters_is_rejected(self):
domain = f"{'a' * 250}.com"
valid, message, code = validate_domain(domain, check_dns=False)
assert valid is False
assert "too long" in message
assert code == DomainValidationError.TOO_LONG
def test_dns_resolution_failure_is_reported(self):
with patch("app.utils.domain_validator.socket.gethostbyname", side_effect=socket.gaierror):
valid, message, code = validate_domain("example.com", check_dns=True)
assert valid is False
assert "could not be resolved" in message
assert code == DomainValidationError.DNS_RESOLUTION_FAILED
class TestValidateDomainConfig:
def test_valid_config(self):
result = validate_domain_config(
{"name": "example.com", "description": "Primary reporting domain"}
)
assert result == {"valid": True, "errors": {}}
def test_missing_name_is_invalid(self):
result = validate_domain_config({"description": "No name"})
assert result["valid"] is False
assert result["errors"]["name"] == "Domain name is required"
def test_invalid_domain_name_is_reported(self):
result = validate_domain_config({"name": "bad domain"})
assert result["valid"] is False
assert "whitespace" in result["errors"]["name"]
def test_unsafe_description_is_rejected(self):
result = validate_domain_config({"name": "example.com", "description": "<script></script>"})
assert result["valid"] is False
assert "unsafe HTML" in result["errors"]["description"]
def test_description_length_limit(self):
result = validate_domain_config({"name": "example.com", "description": "a" * 501})
assert result["valid"] is False
assert "too long" in result["errors"]["description"]