Coverage for tests/library/test_serializer.py: 100%

21 statements  

« prev     ^ index     » next       coverage.py v7.17.3, created at 2026-11-13 05:19 +0000

1from typing import Any 1abcdefghijklmnopqrst

2 

3from fast_depends import Depends, Provider, inject 1abcdefghijklmnopqrst

4from fast_depends.library.serializer import OptionItem, Serializer, SerializerProto 1abcdefghijklmnopqrst

5 

6 

7class EchoSerializer(Serializer): 1abcdefghijklmnopqrst

8 """The smallest possible `Serializer`: everything else is inherited.""" 

9 

10 def __call__(self, call_kwargs: dict[str, Any]) -> dict[str, Any]: 1abcdefghijklmnopqrst

11 return call_kwargs 1abcdefghijklmnopqrst

12 

13 

14class EchoSerializerFactory(SerializerProto): 1abcdefghijklmnopqrst

15 def __call__( 1abcdefghijklmnopqrst

16 self, 

17 *, 

18 name: str, 

19 options: list[OptionItem], 

20 response_type: Any, 

21 ) -> EchoSerializer: 

22 return EchoSerializer( 1abcdefghijklmnopqrst

23 name=name, 

24 options=options, 

25 response_type=response_type, 

26 ) 

27 

28 

29def test_default_encode_uses_stdlib_json() -> None: 1abcdefghijklmnopqrst

30 assert EchoSerializerFactory.encode({"a": 1}) == b'{"a": 1}' 1abcdefghijklmnopqrst

31 

32 

33def test_default_get_aliases_is_empty() -> None: 1abcdefghijklmnopqrst

34 serializer = EchoSerializer(name="func", options=[], response_type=None) 1abcdefghijklmnopqrst

35 assert serializer.get_aliases() == () 1abcdefghijklmnopqrst

36 

37 

38def test_minimal_serializer_is_usable() -> None: 1abcdefghijklmnopqrst

39 def dep() -> int: 1abcdefghijklmnopqrst

40 return 1 1abcdefghijklmnopqrst

41 

42 @inject( 1abcdefghijklmnopqrst

43 serializer_cls=EchoSerializerFactory(), 

44 dependency_provider=Provider(), 

45 cast_result=True, 

46 ) 

47 def func(a: int, *, b: str = "b", d: int = Depends(dep)) -> str: 1abcdefghijklmnopqrst

48 return f"{a}-{b}-{d}" 1abcdefghijklmnopqrst

49 

50 # nothing is casted - the serializer echoes its input back 

51 assert func("1") == "1-b-1" 1abcdefghijklmnopqrst