Skip to content

Commit

Permalink
Add more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Fatal1ty committed Jan 14, 2021
1 parent c86eaeb commit 85d01dc
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 27 deletions.
63 changes: 63 additions & 0 deletions tests/test_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,66 @@ def __post_serialize__(self, d: Dict[Any, Any]) -> Dict[Any, Any]:

instance = DataClass(x=123)
assert instance.to_dict() == {"X": 123}


def test_hook_stub_is_not_called(mocker):
pre_deserialize_hook = mocker.patch.object(
DataClassDictMixin, "__pre_deserialize__"
)
post_deserialize_hook = mocker.patch.object(
DataClassDictMixin, "__post_deserialize__"
)
pre_serialize_hook = mocker.patch.object(
DataClassDictMixin, "__pre_serialize__"
)
post_serialize_hook = mocker.patch.object(
DataClassDictMixin, "__post_serialize__"
)

@dataclass
class A(DataClassDictMixin):
a: int

obj = A.from_dict({"a": 1})
obj.to_dict()

pre_deserialize_hook.assert_not_called()
post_deserialize_hook.assert_not_called()
pre_serialize_hook.assert_not_called()
post_serialize_hook.assert_not_called()


def test_hook_in_parent_class(mocker):
class A:
@classmethod
def __pre_deserialize__(cls, d):
return d

@classmethod
def __post_deserialize__(cls, obj):
return obj

def __pre_serialize__(self):
return self

def __post_serialize__(self, d):
return d

@dataclass
class B(A, DataClassDictMixin):
a: int

pre_deserialize_hook = mocker.patch.object(A, "__pre_deserialize__")
post_deserialize_hook = mocker.patch.object(A, "__post_deserialize__")
pre_serialize_hook = mocker.patch.object(
A, "__pre_serialize__", return_value=B(a=1)
)
post_serialize_hook = mocker.patch.object(A, "__post_serialize__")

B.from_dict({"a": 1})
B(a=1).to_dict()

pre_deserialize_hook.assert_called_once()
post_deserialize_hook.assert_called_once()
pre_serialize_hook.assert_called_once()
post_serialize_hook.assert_called_once()
27 changes: 0 additions & 27 deletions tests/test_meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,30 +77,3 @@ def foobar(self):
assert get_class_that_define_method("foo", B) == A
assert get_class_that_define_method("bar", B) == A
assert get_class_that_define_method("foobar", B) == B


def test_hook_stub_is_not_called(mocker):
pre_deserialize_hook = mocker.patch.object(
DataClassDictMixin, "__pre_deserialize__"
)
post_deserialize_hook = mocker.patch.object(
DataClassDictMixin, "__post_deserialize__"
)
pre_serialize_hook = mocker.patch.object(
DataClassDictMixin, "__pre_serialize__"
)
post_serialize_hook = mocker.patch.object(
DataClassDictMixin, "__post_serialize__"
)

@dataclass
class A(DataClassDictMixin):
a: int

obj = A.from_dict({"a": 1})
obj.to_dict()

pre_deserialize_hook.assert_not_called()
post_deserialize_hook.assert_not_called()
pre_serialize_hook.assert_not_called()
post_serialize_hook.assert_not_called()

0 comments on commit 85d01dc

Please sign in to comment.