Coverage for tests / test_validation.py: 100%

16 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-06-10 09:40 +0000

1import pytest 1ijklmnop

2from pydantic.error_wrappers import ValidationError 1ijklmnop

3from sqlmodel import SQLModel 1ijklmnop

4 

5 

6def test_validation_pydantic_v2(clear_sqlmodel): 1ijklmnop

7 """Test validation of implicit and explicit None values. 

8 

9 # For consistency with pydantic, validators are not to be called on 

10 # arguments that are not explicitly provided. 

11 

12 https://github.com/tiangolo/sqlmodel/issues/230 

13 https://github.com/samuelcolvin/pydantic/issues/1223 

14 

15 """ 

16 from pydantic import field_validator 1abcdefgh

17 

18 class Hero(SQLModel): 1abcdefgh

19 name: str | None = None 1abcdefgh

20 secret_name: str | None = None 1abcdefgh

21 age: int | None = None 1abcdefgh

22 

23 @field_validator("name", "secret_name", "age") 1abcdefgh

24 def reject_none(cls, v): 1abcdefgh

25 assert v is not None 1abcdefgh

26 return v 1abcdefgh

27 

28 Hero.model_validate({"age": 25}) 1abcdefgh

29 

30 with pytest.raises(ValidationError): 1abcdefgh

31 Hero.model_validate({"name": None, "age": 25}) 1abcdefgh