From 135d705df80c5334299bdb41ddd539772d31c4f5 Mon Sep 17 00:00:00 2001 From: Martin Burchell <martinb@aptivate.org> Date: Wed, 29 Jul 2015 14:41:23 +0100 Subject: [PATCH] Made last_modified on item update when term added --- django/website/data_layer/models.py | 12 ++++++++++++ django/website/data_layer/tests/item_tests.py | 15 +++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/django/website/data_layer/models.py b/django/website/data_layer/models.py index d1d36eb3..68779919 100644 --- a/django/website/data_layer/models.py +++ b/django/website/data_layer/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.dispatch.dispatcher import receiver from django.utils import timezone from taxonomies.models import Term @@ -11,6 +12,10 @@ class DataLayerModel(models.Model): class Meta: abstract = True + def note_external_modification(self): + self.last_modified = timezone.now() + self.save() + class Message(DataLayerModel): body = models.TextField() @@ -45,3 +50,10 @@ class Message(DataLayerModel): # TODO: rename this class Item = Message + + +@receiver(models.signals.m2m_changed, sender=Item.terms.through, + dispatch_uid="data_layer.models.terms_signal_handler") +def terms_signal_handler(sender, **kwargs): + instance = kwargs.get('instance') + instance.note_external_modification() diff --git a/django/website/data_layer/tests/item_tests.py b/django/website/data_layer/tests/item_tests.py index 8549187f..90ab4d95 100644 --- a/django/website/data_layer/tests/item_tests.py +++ b/django/website/data_layer/tests/item_tests.py @@ -4,6 +4,7 @@ from django.utils import timezone from factories import ItemFactory from ..models import Item +from taxonomies.tests.factories import TermFactory import datetime from mock import patch, MagicMock @@ -35,3 +36,17 @@ def test_last_modified_date_updates_on_body_change(): item.save() assert orig_last_modified < last_modified(item) + + +@pytest.mark.django_db +def test_last_modified_date_updates_on_category_change(): + item = ItemFactory() + magic_mock = MagicMock(wraps=timezone.now, + side_effect=now_iter(timezone.now())) + + with patch('django.utils.timezone.now', new=magic_mock): + orig_last_modified = last_modified(item) + term = TermFactory() + item.terms.add(term) + + assert orig_last_modified < last_modified(item) -- GitLab