|
@@ -1,8 +1,10 @@
|
|
|
import datetime
|
|
|
+from enum import Enum
|
|
|
from typing import Any, Dict, List, Type
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
+from reflex.base import Base
|
|
|
from reflex.utils import serializers
|
|
|
from reflex.vars import Var
|
|
|
|
|
@@ -93,6 +95,31 @@ def test_add_serializer():
|
|
|
assert not serializers.has_serializer(Foo)
|
|
|
|
|
|
|
|
|
+class StrEnum(str, Enum):
|
|
|
+ """An enum also inheriting from str."""
|
|
|
+
|
|
|
+ FOO = "foo"
|
|
|
+ BAR = "bar"
|
|
|
+
|
|
|
+
|
|
|
+class EnumWithPrefix(Enum):
|
|
|
+ """An enum with a serializer adding a prefix."""
|
|
|
+
|
|
|
+ FOO = "foo"
|
|
|
+ BAR = "bar"
|
|
|
+
|
|
|
+
|
|
|
+@serializers.serializer
|
|
|
+def serialize_EnumWithPrefix(enum: EnumWithPrefix) -> str:
|
|
|
+ return "prefix_" + enum.value
|
|
|
+
|
|
|
+
|
|
|
+class BaseSubclass(Base):
|
|
|
+ """A class inheriting from Base for testing."""
|
|
|
+
|
|
|
+ ts: datetime.timedelta = datetime.timedelta(1, 1, 1)
|
|
|
+
|
|
|
+
|
|
|
@pytest.mark.parametrize(
|
|
|
"value,expected",
|
|
|
[
|
|
@@ -104,6 +131,23 @@ def test_add_serializer():
|
|
|
(None, "null"),
|
|
|
([1, 2, 3], "[1, 2, 3]"),
|
|
|
([1, "2", 3.0], '[1, "2", 3.0]'),
|
|
|
+ ([{"key": 1}, {"key": 2}], '[{"key": 1}, {"key": 2}]'),
|
|
|
+ (StrEnum.FOO, "foo"),
|
|
|
+ ([StrEnum.FOO, StrEnum.BAR], '["foo", "bar"]'),
|
|
|
+ (
|
|
|
+ {"key1": [1, 2, 3], "key2": [StrEnum.FOO, StrEnum.BAR]},
|
|
|
+ '{"key1": [1, 2, 3], "key2": ["foo", "bar"]}',
|
|
|
+ ),
|
|
|
+ (EnumWithPrefix.FOO, "prefix_foo"),
|
|
|
+ ([EnumWithPrefix.FOO, EnumWithPrefix.BAR], '["prefix_foo", "prefix_bar"]'),
|
|
|
+ (
|
|
|
+ {"key1": EnumWithPrefix.FOO, "key2": EnumWithPrefix.BAR},
|
|
|
+ '{"key1": "prefix_foo", "key2": "prefix_bar"}',
|
|
|
+ ),
|
|
|
+ (
|
|
|
+ BaseSubclass(ts=datetime.timedelta(1, 1, 1)),
|
|
|
+ '{"ts": "1 day, 0:00:01.000001"}',
|
|
|
+ ),
|
|
|
(
|
|
|
[1, Var.create_safe("hi"), Var.create_safe("bye", _var_is_local=False)],
|
|
|
'[1, "hi", bye]',
|
|
@@ -121,6 +165,10 @@ def test_add_serializer():
|
|
|
(datetime.date(2021, 1, 1), "2021-01-01"),
|
|
|
(datetime.time(1, 1, 1, 1), "01:01:01.000001"),
|
|
|
(datetime.timedelta(1, 1, 1), "1 day, 0:00:01.000001"),
|
|
|
+ (
|
|
|
+ [datetime.timedelta(1, 1, 1), datetime.timedelta(1, 1, 2)],
|
|
|
+ '["1 day, 0:00:01.000001", "1 day, 0:00:01.000002"]',
|
|
|
+ ),
|
|
|
],
|
|
|
)
|
|
|
def test_serialize(value: Any, expected: str):
|