"""Tests for malformed proxy env var and base URL validation.

Salvaged from PR #6403 by MestreY0d4-Uninter — validates that the agent
surfaces clear errors instead of cryptic httpx ``Invalid port`` exceptions
when proxy env vars or custom endpoint URLs are malformed.
"""
from __future__ import annotations

import os

import pytest

from agent.auxiliary_client import _validate_base_url, _validate_proxy_env_urls


# -- proxy env validation ------------------------------------------------


def test_proxy_env_accepts_normal_values(monkeypatch):
    monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:6153")
    monkeypatch.setenv("HTTPS_PROXY", "https://proxy.example.com:8443")
    monkeypatch.setenv("ALL_PROXY", "socks5://127.0.0.1:1080")
    _validate_proxy_env_urls()  # should not raise


def test_proxy_env_accepts_empty(monkeypatch):
    monkeypatch.delenv("HTTP_PROXY", raising=False)
    monkeypatch.delenv("HTTPS_PROXY", raising=False)
    monkeypatch.delenv("ALL_PROXY", raising=False)
    monkeypatch.delenv("http_proxy", raising=False)
    monkeypatch.delenv("https_proxy", raising=False)
    monkeypatch.delenv("all_proxy", raising=False)
    _validate_proxy_env_urls()  # should not raise


def test_proxy_env_normalizes_socks_alias(monkeypatch):
    monkeypatch.setenv("ALL_PROXY", "socks://127.0.0.1:1080/")
    _validate_proxy_env_urls()
    assert os.environ["ALL_PROXY"] == "socks5://127.0.0.1:1080/"


@pytest.mark.parametrize("key", [
    "HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY",
    "http_proxy", "https_proxy", "all_proxy",
])
def test_proxy_env_rejects_malformed_port(monkeypatch, key):
    monkeypatch.setenv(key, "http://127.0.0.1:6153export")
    with pytest.raises(RuntimeError, match=rf"Malformed proxy environment variable {key}=.*6153export"):
        _validate_proxy_env_urls()


# -- base URL validation -------------------------------------------------


@pytest.mark.parametrize("url", [
    "https://api.example.com/v1",
    "http://127.0.0.1:6153/v1",
    "acp://copilot",
    "",
    None,
])
def test_base_url_accepts_valid(url):
    _validate_base_url(url)  # should not raise


def test_base_url_rejects_malformed_port():
    with pytest.raises(RuntimeError, match="Malformed custom endpoint URL"):
        _validate_base_url("http://127.0.0.1:6153export")
