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