Skip to content

Commit 8f8a4b9

Browse files
committed
Add very basic test to check that custom Serializer class is used
1 parent 866ff51 commit 8f8a4b9

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import sqlalchemy as sa
2+
from sqlalchemy_serializer import SerializerMixin, Serializer
3+
4+
from .models import (
5+
DATETIME,
6+
Base,
7+
)
8+
9+
10+
CUSTOM_DICT_VALUE = {'CustomModelTwo': 'test value'}
11+
12+
13+
class CustomSerializer(Serializer):
14+
def serialize(self, value, **kwargs):
15+
# special case for CustomModelTwo, returning string instead of real work
16+
if isinstance(value, CustomModelTwo):
17+
return CUSTOM_DICT_VALUE
18+
return super().serialize(value, **kwargs)
19+
20+
21+
class CustomSerializerMixin(SerializerMixin):
22+
serializer_class = CustomSerializer
23+
24+
25+
class CustomModelOne(Base, CustomSerializerMixin):
26+
__tablename__ = "custom_model_one"
27+
id = sa.Column(sa.Integer, primary_key=True)
28+
datetime = sa.Column(sa.DateTime, default=DATETIME)
29+
30+
31+
class CustomModelTwo(CustomModelOne):
32+
__tablename__ = "custom_model_two"
33+
34+
35+
36+
def test_custom_serializer(get_instance):
37+
"""
38+
Very basic test to ensure custom serializer is used
39+
"""
40+
# Get instance for CustomModelOne, which should serialize normally
41+
i = get_instance(CustomModelOne)
42+
data = i.to_dict()
43+
# Check model was processed correctly
44+
assert "datetime" in data
45+
assert data["datetime"] == DATETIME.strftime(i.datetime_format)
46+
# Same for CustomModelTwo, which should instead return only a simple dict
47+
i = get_instance(CustomModelTwo)
48+
data = i.to_dict()
49+
assert data == CUSTOM_DICT_VALUE

0 commit comments

Comments
 (0)