diff --git a/api/funkwhale_api/moderation/models.py b/api/funkwhale_api/moderation/models.py index ccc891e79..74fa4fd1b 100644 --- a/api/funkwhale_api/moderation/models.py +++ b/api/funkwhale_api/moderation/models.py @@ -6,13 +6,14 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.contrib.postgres.fields import JSONField from django.db import models +from django.db.models.signals import pre_save +from django.dispatch import receiver from django.urls import reverse from django.utils import timezone from funkwhale_api.federation import models as federation_models from funkwhale_api.federation import utils as federation_utils - class InstancePolicyQuerySet(models.QuerySet): def active(self): return self.filter(is_active=True) @@ -160,3 +161,11 @@ class Report(federation_models.FederationMixin): self.fid = self.get_federation_id() return super().save(**kwargs) + + +@receiver(pre_save, sender=Report) +def set_handled_date(sender, instance, **kwargs): + if instance.is_handled is True and not instance.handled_date: + instance.handled_date = timezone.now() + elif not instance.is_handled: + instance.handled_date = None \ No newline at end of file diff --git a/api/tests/moderation/test_models.py b/api/tests/moderation/test_models.py new file mode 100644 index 000000000..8c1de981f --- /dev/null +++ b/api/tests/moderation/test_models.py @@ -0,0 +1,22 @@ +def test_setting_report_handled_to_true_sets_handled_date(factories, now): + target = factories["music.Artist"]() + report = factories["moderation.Report"](target=target) + + assert report.is_handled is False + assert report.handled_date is None + + report.is_handled = True + report.save() + + assert report.handled_date == now + + +def test_setting_report_handled_to_false_sets_handled_date_to_null(factories, now): + target = factories["music.Artist"]() + report = factories["moderation.Report"]( + target=target, is_handled=True, handled_date=now + ) + report.is_handled = False + report.save() + + assert report.handled_date is None