Skip to content

Commit 7bf22e4

Browse files
committed
LITE-23027 Fixed Date and DateTime fields dumping in previous data
1 parent 46a7ccd commit 7bf22e4

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

dj_cqrs/tracker.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
# Copyright © 2021 Ingram Micro Inc. All rights reserved.
1+
# Copyright © 2022 Ingram Micro Inc. All rights reserved.
2+
3+
from datetime import date, datetime
24

35
from dj_cqrs.constants import ALL_BASIC_FIELDS, FIELDS_TRACKER_FIELD_NAME
46

@@ -25,6 +27,14 @@ def changed(self):
2527
def changed_initial(self):
2628
return {field: None for field in self.fields if self.get_field_value(field) is not None}
2729

30+
def get_field_value(self, field):
31+
value = super().get_field_value(field)
32+
33+
if isinstance(value, (date, datetime)):
34+
value = str(value)
35+
36+
return value
37+
2838

2939
class CQRSTracker(FieldTracker):
3040

tests/test_master/test_mixin.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
# Copyright © 2021 Ingram Micro Inc. All rights reserved.
1+
# Copyright © 2022 Ingram Micro Inc. All rights reserved.
22

3+
from datetime import timedelta
34
from time import sleep
45
from uuid import uuid4
56

@@ -636,6 +637,29 @@ def test_cqrs_tracked_fields_tracking(mocker):
636637
assert tracked_data == {'cqrs_revision': 0, 'char_field': 'Value'}
637638

638639

640+
@pytest.mark.django_db(transaction=True)
641+
def test_cqrs_tracked_fields_date_and_datetime_tracking(mocker):
642+
old_dt = now()
643+
old_d = (old_dt + timedelta(days=1)).date()
644+
645+
models.BasicFieldsModel.objects.create(
646+
int_field=1,
647+
datetime_field=old_dt,
648+
date_field=old_d,
649+
)
650+
651+
publisher_mock = mocker.patch('dj_cqrs.controller.producer.produce')
652+
instance = models.BasicFieldsModel.objects.first()
653+
instance.datetime_field = now()
654+
instance.date_field = now().date()
655+
instance.save()
656+
657+
tracked_data = instance.get_tracked_fields_data()
658+
assert publisher_mock.call_args[0][0].previous_data == tracked_data == {
659+
'cqrs_revision': 0, 'datetime_field': str(old_dt), 'date_field': str(old_d),
660+
}
661+
662+
639663
def test_mptt_cqrs_tracked_fields_model_has_tracker():
640664
instance = models.MPTTWithTrackingModel()
641665
tracker = getattr(instance, FIELDS_TRACKER_FIELD_NAME)

0 commit comments

Comments
 (0)