import pytest from pydantic import SecretStr, ValidationError from ai_platform.infrastructure.config.settings import Settings from ai_platform.lead_scoring.domain.safe_http_url import safe_http_url DB = "postgresql+asyncpg://test:test@localhost/ai_platform_test" @pytest.mark.parametrize( ("url", "environment", "allowed"), [ ("https://aihub.example/v1", "production", True), ("http://localhost:8317/v1", "development", True), ("http://localhost:8317/v1", "production", False), ("http://remote.example/v1", "development", False), ("https://user:pass@example.com", "production", False), ("https://example.com/v1?token=x", "production", False), ("ftp://example.com", "production", False), (" https://example.com", "production", False), (None, "production", False), ], ) def test_safe_http_url(url, environment, allowed): assert safe_http_url(url, environment) is allowed @pytest.mark.usefixtures("isolated_settings") def test_openai_settings_validate_url_and_key(): ok = Settings( database_url=DB, environment="production", openai_base_url="https://proxy.example/v1", openai_api_key=SecretStr("proxy-key"), ) assert "proxy-key" not in repr(ok) for url, key in ( ("http://localhost:8317", None), (None, SecretStr("key")), ("https://proxy.example/v1", SecretStr("k\r\nX: y")), ): with pytest.raises(ValidationError): Settings( database_url=DB, environment="production", openai_base_url=url, openai_api_key=key )