import pytest from app.main import validation_error_handler from app.models import AccountBase, DeleteRequest from fastapi.exceptions import RequestValidationError from pydantic import ValidationError @pytest.mark.parametrize( "instance_id", ["Upper", "has_space", "-leading", "trailing-", "x" * 41], ) def test_invalid_instance_ids(instance_id: str) -> None: with pytest.raises(ValidationError): AccountBase( instance_id=instance_id, display_name="Test", api_id=1, api_hash="0123456789abcdef", ) def test_delete_data_defaults_to_false() -> None: request = DeleteRequest(confirmation="test") assert request.delete_data is False @pytest.mark.asyncio async def test_validation_response_does_not_echo_secret_input() -> None: sensitive_value = "-".join(("very", "private", "string", "session")) error = RequestValidationError( [ { "type": "string_too_short", "loc": ("body", "session_string"), "msg": "String should have at least 32 characters", "input": sensitive_value, } ] ) response = await validation_error_handler(None, error) assert sensitive_value.encode() not in response.body assert b'"input"' not in response.body