import pydantic from campaigns.core.exceptions import FieldError, ValidationError class Schema(pydantic.BaseModel): field1: str field2: str def test_validation_error_from_pydantic() -> None: error: ValidationError | None = None try: Schema.parse_obj({}) except pydantic.ValidationError as exc: error = ValidationError.from_pydantic_error(exc) assert error assert error.has_errors() assert set(error.errors) == { FieldError( field="field1", message="field required", code="value_error.missing", ), FieldError( field="field2", message="field required", code="value_error.missing", ), } def test_validation_error_add_error() -> None: error = ValidationError() error.add_error( { "field": "field1", "message": "invalid field", }, code="wrong_value", ) error.add_error( FieldError( field="field2", message="field required", code="value_error.missing", ) ) assert error.has_errors() assert set(error.errors) == { FieldError( field="field1", message="invalid field", code="wrong_value", ), FieldError( field="field2", message="field required", code="value_error.missing", ), }