75 lines
1.7 KiB
Python
75 lines
1.7 KiB
Python
import pytest
|
|
|
|
from aiohttp_pydantic.injectors import (
|
|
Group,
|
|
_get_group_signature,
|
|
_unpack_group_in_signature,
|
|
DuplicateNames,
|
|
)
|
|
|
|
|
|
def test_get_group_signature_with_a2b2():
|
|
class A(Group):
|
|
a: int = 1
|
|
|
|
class B(Group):
|
|
b: str = "b"
|
|
|
|
class B2(B):
|
|
b: str = "b2" # Overwrite default value
|
|
|
|
class A2(A):
|
|
a: int # Remove default value
|
|
|
|
class A2B2(A2, B2):
|
|
ab2: float
|
|
|
|
assert ({"ab2": float, "a": int, "b": str}, {"b": "b2"}) == _get_group_signature(
|
|
A2B2
|
|
)
|
|
|
|
|
|
def test_unpack_group_in_signature():
|
|
class PaginationGroup(Group):
|
|
page: int
|
|
page_size: int = 20
|
|
|
|
args = {"pagination": PaginationGroup, "name": str, "age": int}
|
|
|
|
default = {"age": 18}
|
|
|
|
_unpack_group_in_signature(args, default)
|
|
|
|
assert args == {"page": int, "page_size": int, "name": str, "age": int}
|
|
|
|
assert default == {"age": 18, "page_size": 20}
|
|
|
|
|
|
def test_unpack_group_in_signature_with_duplicate_error():
|
|
class PaginationGroup(Group):
|
|
page: int
|
|
page_size: int = 20
|
|
|
|
args = {"pagination": PaginationGroup, "page": int, "age": int}
|
|
|
|
with pytest.raises(DuplicateNames) as e_info:
|
|
_unpack_group_in_signature(args, {})
|
|
|
|
assert e_info.value.group is PaginationGroup
|
|
assert e_info.value.attr_name == "page"
|
|
|
|
|
|
def test_unpack_group_in_signature_with_parameters_overwrite():
|
|
class PaginationGroup(Group):
|
|
page: int = 0
|
|
page_size: int = 20
|
|
|
|
args = {"page": PaginationGroup, "age": int}
|
|
|
|
default = {}
|
|
_unpack_group_in_signature(args, default)
|
|
|
|
assert args == {"page": int, "page_size": int, "age": int}
|
|
|
|
assert default == {"page": 0, "page_size": 20}
|