diff --git a/tests/test_validators.py b/tests/test_validators.py index c57a52194be..4b518e532e0 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -551,10 +551,13 @@ def check_foobar(cls, v: Tuple[int, int]) -> Tuple[int, int]: def test_validation_each_item_recursive(): class Model(BaseModel): - foo_default: List[List[str]] + foo: List[List[str]] foo_recursive: List[List[str]] + bar: Dict[str, Dict[str, Any]] + bar_recursive: Dict[str, Dict[str, Any]] + bar_deep_recursive: Dict[str, Dict[str, Dict[str, Any]]] - @validator('foo_default', each_item=True) + @validator('foo', each_item=True, allow_reuse=True) def double(cls, v): return v * 2 @@ -562,10 +565,35 @@ def double(cls, v): def double_recursive(cls, v): return v * 2 - my_list_of_str = [['a'], ['b'], ['c']] - assert Model(foo_default=my_list_of_str, foo_recursive=my_list_of_str).dict() == { + @validator('bar', each_item=True) + def set_pika(cls, v): + return 'pika' + + @validator('bar_recursive', each_item=True, recursive=True) + def set_recursive_pika(cls, v): + return 'pika' + + @validator('bar_deep_recursive', each_item=True, recursive=True) + def set_deep_recursive_pika(cls, v): + return 'pika' + + my_list = [['a'], ['b'], ['c']] + my_dict = { + 'a1': {'b1': {'c1': 'd1', 'c2': 'd2'}}, + 'a2': {'b2': {'c3': 'd3'}}, + } + assert Model( + foo=my_list, + foo_recursive=my_list, + bar=my_dict, + bar_recursive=my_dict, + bar_deep_recursive=my_dict, + ).dict() == { 'foo_default': [['a', 'a'], ['b', 'b'], ['c', 'c']], 'foo_recursive': [['aa'], ['bb'], ['cc']], + 'bar_default': {'a1': 'pika', 'a2': 'pika'}, + 'bar_recursive': {'a1': {'b1': 'pika'}, 'a2': {'b2': 'pika'}}, + 'bar_deep_recursive': {'a1': {'b1': {'c1': 'pika', 'c2': 'pika'}}, 'a2': {'b2': {'c3': 'pika'}}}, }