diff --git a/django/website/data_layer/models.py b/django/website/data_layer/models.py index 68779919e4345a5b6d7873d8fe6466a746181001..3970173f99762c40bfa29d193dfdcaa5b540f9fa 100644 --- a/django/website/data_layer/models.py +++ b/django/website/data_layer/models.py @@ -13,7 +13,7 @@ class DataLayerModel(models.Model): abstract = True def note_external_modification(self): - self.last_modified = timezone.now() + # This will set the last_modified field self.save() @@ -55,5 +55,6 @@ 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() + if kwargs.get('action') == 'post_add': + 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 90ab4d95704b24deb4a866ee62519aafe63bddf6..665588e20f544151bf81277ccc492aa9fb5e93f6 100644 --- a/django/website/data_layer/tests/item_tests.py +++ b/django/website/data_layer/tests/item_tests.py @@ -17,13 +17,23 @@ def last_modified(item): # Ensure value of "now" always increases by amount sufficient # to show up as a change, even if db resolution for datetime # is one second. +def time_granularity(): + return datetime.timedelta(hours=1) + + def now_iter(start): t = start while True: - t += datetime.timedelta(hours=1) + t += time_granularity() yield t +def num_updates(old_time, new_time): + elapsed_time = new_time - old_time + + return elapsed_time.seconds / time_granularity().seconds + + @pytest.mark.django_db def test_last_modified_date_updates_on_body_change(): item = ItemFactory() @@ -35,7 +45,7 @@ def test_last_modified_date_updates_on_body_change(): item.body = 'replacement text' item.save() - assert orig_last_modified < last_modified(item) + assert num_updates(orig_last_modified, last_modified(item)) == 1 @pytest.mark.django_db @@ -49,4 +59,4 @@ def test_last_modified_date_updates_on_category_change(): term = TermFactory() item.terms.add(term) - assert orig_last_modified < last_modified(item) + assert num_updates(orig_last_modified, last_modified(item)) == 1