test_serializers.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import datetime
  2. from typing import Any, Dict, Type
  3. import pytest
  4. from reflex.utils import serializers
  5. @pytest.mark.parametrize(
  6. "type_,expected",
  7. [
  8. (str, True),
  9. (dict, True),
  10. (Dict[int, int], True),
  11. ],
  12. )
  13. def test_has_serializer(type_: Type, expected: bool):
  14. """Test that has_serializer returns the correct value.
  15. Args:
  16. type_: The type to check.
  17. expected: The expected result.
  18. """
  19. assert serializers.has_serializer(type_) == expected
  20. @pytest.mark.parametrize(
  21. "type_,expected",
  22. [
  23. (str, serializers.serialize_str),
  24. (dict, serializers.serialize_dict),
  25. (Dict[int, int], serializers.serialize_dict),
  26. (datetime.datetime, serializers.serialize_datetime),
  27. (datetime.date, serializers.serialize_datetime),
  28. (datetime.time, serializers.serialize_datetime),
  29. (datetime.timedelta, serializers.serialize_datetime),
  30. ],
  31. )
  32. def test_get_serializer(type_: Type, expected: serializers.Serializer):
  33. """Test that get_serializer returns the correct value.
  34. Args:
  35. type_: The type to check.
  36. expected: The expected result.
  37. """
  38. assert serializers.get_serializer(type_) == expected
  39. def test_add_serializer():
  40. """Test that adding a serializer works."""
  41. def serialize_test(value: int) -> str:
  42. """Serialize an int to a string.
  43. Args:
  44. value: The value to serialize.
  45. Returns:
  46. The serialized value.
  47. """
  48. return str(value)
  49. # Initially there should be no serializer for int.
  50. assert not serializers.has_serializer(int)
  51. assert serializers.serialize(5) is None
  52. # Register the serializer.
  53. assert serializers.serializer(serialize_test) == serialize_test
  54. # There should now be a serializer for int.
  55. assert serializers.has_serializer(int)
  56. assert serializers.get_serializer(int) == serialize_test
  57. assert serializers.serialize(5) == "5"
  58. # Remove the serializer.
  59. serializers.SERIALIZERS.pop(int)
  60. @pytest.mark.parametrize(
  61. "value,expected",
  62. [
  63. ("test", "test"),
  64. (datetime.datetime(2021, 1, 1, 1, 1, 1, 1), "2021-01-01 01:01:01.000001"),
  65. (datetime.date(2021, 1, 1), "2021-01-01"),
  66. (datetime.time(1, 1, 1, 1), "01:01:01.000001"),
  67. (datetime.timedelta(1, 1, 1), "1 day, 0:00:01.000001"),
  68. (5, None),
  69. (None, None),
  70. ([], None),
  71. ],
  72. )
  73. def test_serialize(value: Any, expected: str):
  74. """Test that serialize returns the correct value.
  75. Args:
  76. value: The value to serialize.
  77. expected: The expected result.
  78. """
  79. assert serializers.serialize(value) == expected