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