import pytest from dataclasses import dataclass from core.global_symbols import NotInit, NotFound, Removed from sdp.sheerkaDataProvider import Event from sdp.sheerkaSerializer import Serializer, JsonSerializer, SerializerContext, CustomTypeSerializer from datetime import datetime import core.utils @dataclass() class Obj: key: str = "" prop1: str = "" def from_dict(self, json_object): self.prop1 = json_object["prop1"] self.key = json_object["key"] return self def to_dict(self): return self.__dict__ def test_i_can_serialize_an_event(): event = Event("test", user_id="user", date=datetime.fromisoformat("2019-10-21T10:20:30.999")) serializer = Serializer() stream = serializer.serialize(event, None) loaded = serializer.deserialize(stream, None) assert event.version == loaded.version assert event.user_id == loaded.user_id assert event.date == loaded.date assert event.message == loaded.message def test_i_can_serialize_an_object(): obj = Obj("10", "value") serializer = Serializer() serializer.register(JsonSerializer("tests.sdp.test_sheerkaSerializer.Obj")) context = SerializerContext("kodjo", "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b") stream = serializer.serialize(obj, context) loaded = serializer.deserialize(stream, context) assert getattr(loaded, Serializer.HISTORY)[Serializer.USERNAME] == "kodjo" assert getattr(loaded, Serializer.HISTORY)[Serializer.MODIFICATION_DATE] != "" assert getattr(loaded, Serializer.HISTORY)[Serializer.PARENTS] == [] assert loaded.key == "10" assert loaded.prop1 == "value" @pytest.mark.parametrize("custom_type", [ NotInit, NotFound, Removed ]) def test_i_can_serialize_custom_type(custom_type): serializer = Serializer() serializer.register(CustomTypeSerializer()) context = SerializerContext("kodjo", "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b") stream = serializer.serialize(custom_type, context) loaded = serializer.deserialize(stream, context) assert loaded == custom_type @pytest.mark.parametrize("obj, expected", [ (Obj("10", "value"), "tests.sdp.test_sheerkaSerializer.Obj") ]) def test_get_full_qualified_name(obj, expected): assert expected == core.utils.get_full_qualified_name(obj)