Files
2024-02-15 17:01:50 +00:00

81 lines
2.3 KiB
Python

from sentry.api.serializers import Serializer, serialize
from sentry.testutils.cases import TestCase
from sentry.testutils.silo import control_silo_test
class Foo:
pass
class FooSerializer(Serializer):
def serialize(self, *args, **kwargs):
return "lol"
class VariadicSerializer(Serializer):
def serialize(self, obj, attrs, user, kw):
return {"kw": kw}
class FailingChildSerializer(Serializer):
def serialize(self, obj, attrs, user, **kwargs):
raise Exception
class ParentSerializer(Serializer):
def get_attrs(self, item_list, user, **kwargs):
return {item: {"child_data": Foo()} for item in item_list}
def serialize(self, obj, attrs, user, **kwargs):
return {
"parent": "something",
"child": serialize(attrs["child_data"], serializer=FailingChildSerializer()),
}
@control_silo_test
class BaseSerializerTest(TestCase):
def test_serialize(self):
assert serialize([]) == []
assert serialize(None) is None
user = self.create_user()
# We don't want to assert on the value, just that it serialized
assert isinstance(serialize(user), dict)
# explicitly passed serializer
foo_serializer = FooSerializer()
assert serialize(user, serializer=foo_serializer) == "lol"
foo = Foo()
assert serialize(foo) is foo, "should return the object when unknown"
assert serialize(foo, serializer=foo_serializer) == "lol"
rv = serialize([user])
assert isinstance(rv, list)
assert len(rv) == 1
rv = serialize([user, None])
assert isinstance(rv, list)
assert len(rv) == 2
assert rv[1] is None
rv = serialize([None, user])
assert isinstance(rv, list)
assert len(rv) == 2
assert rv[0] is None
assert isinstance(rv[1], dict)
def test_serialize_additional_kwargs(self):
foo = Foo()
user = self.create_user()
result = serialize(foo, user, VariadicSerializer(), kw="keyword")
assert result["kw"] == "keyword"
def test_child_serializer_failure(self):
foo = Foo()
result = serialize(foo, serializer=ParentSerializer())
assert result["parent"] == "something"
assert result["child"] is None