#!/usr/bin/env python3

"""MODULE: Provides test cases for app/query_normalisation.py."""

from app.query_normalisation import (  # pragma: no cover
    get_public_ip,
    is_ip_address,
    resolve_domain_name,
)


def test_is_ip_address_true() -> None:
    """TEST: Verifies if a given query is a valid IPv4 address."""
    test_query = "1.2.3.4"
    assert is_ip_address(test_query)


def test_is_ip_address_false_ip() -> None:
    """TEST: Verifies that None is returned if an invalid IP is given."""
    test_query = "256.315.16.23"
    assert not is_ip_address(test_query)


def test_is_ip_address_false_fqdn() -> None:
    """TEST: Verifies that None is returned if a domain name is given."""
    test_query = "google.com"
    assert not is_ip_address(test_query)


def test_resolve_domain_name_true() -> None:
    """TEST: Verifies that DNS resolution is working correctly."""
    domain_name = "one.one.one.one"
    expected_results: list[str] = ["1.1.1.1", "1.0.0.1"]  # Could resolve to either IP
    assert str(resolve_domain_name(domain_name)) in expected_results


def test_resolve_domain_name_false() -> None:
    """TEST: Verifiees that a non-existent domain is not resolved."""
    domain_name = "hrrijoresdo.com"
    assert not resolve_domain_name(domain_name)


def test_get_public_ip() -> None:
    """TEST: Verifies that the current public IP is retrieved correctly."""
    public_ip = get_public_ip()
    assert is_ip_address(public_ip)