mirror of
https://github.com/Hopiu/django-model-utils.git
synced 2026-04-21 19:44:43 +00:00
* - add django 3.0 to the test matrix - drop six * add entry in CHANGES * remove context kwarg * fix test with DeferredAttribute * rename StringyDescriptor's name to attname * Fix flake8 * Drop support for Django 1.11 because the API are not compatibles anymore with Django 3.0 * Try to fix tests. * Define model for the field mock. * Simplifies the code. * Properly mock the field. * Typo * Use the new API field name. * Call it attname * Grab the field instance from the model. * Use postgres in travis tests. * Django 2.0.1 minimum is needed. * Update Changelog to tell about breaking Django 1.11. * Update changelog to tell about Django 3.0 support. * @natim review.
92 lines
3.3 KiB
Python
92 lines
3.3 KiB
Python
from datetime import datetime, timedelta
|
|
|
|
from freezegun import freeze_time
|
|
|
|
from django.test import TestCase
|
|
|
|
from tests.models import TimeStamp
|
|
|
|
|
|
class TimeStampedModelTests(TestCase):
|
|
def test_created(self):
|
|
with freeze_time(datetime(2016, 1, 1)):
|
|
t1 = TimeStamp.objects.create()
|
|
self.assertEqual(t1.created, datetime(2016, 1, 1))
|
|
|
|
def test_created_sets_modified(self):
|
|
'''
|
|
Ensure that on creation that modifed is set exactly equal to created.
|
|
'''
|
|
t1 = TimeStamp.objects.create()
|
|
self.assertEqual(t1.created, t1.modified)
|
|
|
|
def test_modified(self):
|
|
with freeze_time(datetime(2016, 1, 1)):
|
|
t1 = TimeStamp.objects.create()
|
|
|
|
with freeze_time(datetime(2016, 1, 2)):
|
|
t1.save()
|
|
|
|
self.assertEqual(t1.modified, datetime(2016, 1, 2))
|
|
|
|
def test_overriding_created_via_object_creation_also_uses_creation_date_for_modified(self):
|
|
"""
|
|
Setting the created date when first creating an object
|
|
should be permissable.
|
|
"""
|
|
different_date = datetime.today() - timedelta(weeks=52)
|
|
t1 = TimeStamp.objects.create(created=different_date)
|
|
self.assertEqual(t1.created, different_date)
|
|
self.assertEqual(t1.modified, different_date)
|
|
|
|
def test_overriding_modified_via_object_creation(self):
|
|
"""
|
|
Setting the modified date explicitly should be possible when
|
|
first creating an object, but not thereafter.
|
|
"""
|
|
different_date = datetime.today() - timedelta(weeks=52)
|
|
t1 = TimeStamp.objects.create(modified=different_date)
|
|
self.assertEqual(t1.modified, different_date)
|
|
self.assertNotEqual(t1.created, different_date)
|
|
|
|
def test_overriding_created_after_object_created(self):
|
|
"""
|
|
The created date may be changed post-create
|
|
"""
|
|
t1 = TimeStamp.objects.create()
|
|
different_date = datetime.today() - timedelta(weeks=52)
|
|
t1.created = different_date
|
|
t1.save()
|
|
self.assertEqual(t1.created, different_date)
|
|
|
|
def test_overriding_modified_after_object_created(self):
|
|
"""
|
|
The modified date should always be updated when the object
|
|
is saved, regardless of attempts to change it.
|
|
"""
|
|
t1 = TimeStamp.objects.create()
|
|
different_date = datetime.today() - timedelta(weeks=52)
|
|
t1.modified = different_date
|
|
t1.save()
|
|
self.assertNotEqual(t1.modified, different_date)
|
|
|
|
def test_overrides_using_save(self):
|
|
"""
|
|
The first time an object is saved, allow modification of both
|
|
created and modified fields.
|
|
After that, only created may be modified manually.
|
|
"""
|
|
t1 = TimeStamp()
|
|
different_date = datetime.today() - timedelta(weeks=52)
|
|
t1.created = different_date
|
|
t1.modified = different_date
|
|
t1.save()
|
|
self.assertEqual(t1.created, different_date)
|
|
self.assertEqual(t1.modified, different_date)
|
|
different_date2 = datetime.today() - timedelta(weeks=26)
|
|
t1.created = different_date2
|
|
t1.modified = different_date2
|
|
t1.save()
|
|
self.assertEqual(t1.created, different_date2)
|
|
self.assertNotEqual(t1.modified, different_date2)
|
|
self.assertNotEqual(t1.modified, different_date)
|