From fdd3af34d9a47f869a77cf369c627e8ba38174b3 Mon Sep 17 00:00:00 2001 From: Arseniy Panfilov Date: Wed, 30 Sep 2020 20:09:02 -0400 Subject: [PATCH] failing tests with different types of arguments for 'updated_fields' --- requirements-test.txt | 1 + tests/models.py | 2 +- tests/test_models/test_timestamped_model.py | 81 ++++++++++++++------- tox.ini | 4 +- 4 files changed, 60 insertions(+), 28 deletions(-) diff --git a/requirements-test.txt b/requirements-test.txt index f442121..663d0a8 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -2,3 +2,4 @@ pytest==6.0.2 pytest-django==3.10.0 psycopg2-binary==2.8.6 pytest-cov==2.10.1 +parameterized==0.7.4 diff --git a/tests/models.py b/tests/models.py index 5d07e52..0145c0d 100644 --- a/tests/models.py +++ b/tests/models.py @@ -89,7 +89,7 @@ class InheritanceManagerTestChild4(InheritanceManagerTestParent): class TimeStamp(TimeStampedModel): - pass + test_field = models.PositiveSmallIntegerField(default=0) class TimeFrame(TimeFramedModel): diff --git a/tests/test_models/test_timestamped_model.py b/tests/test_models/test_timestamped_model.py index 86c6166..4b56c18 100644 --- a/tests/test_models/test_timestamped_model.py +++ b/tests/test_models/test_timestamped_model.py @@ -1,8 +1,8 @@ from datetime import datetime, timedelta -from freezegun import freeze_time - from django.test import TestCase +from freezegun import freeze_time +from parameterized import parameterized from tests.models import TimeStamp @@ -90,31 +90,62 @@ class TimeStampedModelTests(TestCase): self.assertEqual(t1.created, different_date2) self.assertNotEqual(t1.modified, different_date2) self.assertNotEqual(t1.modified, different_date) - - def test_save_with_update_fields_overrides_modified_provided(self): - ''' + + @parameterized.expand([ + ('list', ['modified']), + ('tuple', ('modified',)), + ('set', {'modified'}), + ]) + def test_save_with_update_fields_overrides_modified_provided_within_a(self, _, update_fields): + """ Tests if the save method updated modified field accordingly when update_fields is used as an argument and modified is provided - ''' - with freeze_time(datetime(2020,1,1)): + """ + with freeze_time(datetime(2020, 1, 1)): t1 = TimeStamp.objects.create() - - with freeze_time(datetime(2020,1,2)): - t1.save(update_fields=['modified']) - - self.assertEqual(t1.modified, datetime(2020,1,2)) - - def test_save_with_update_fields_overrides_modified_not_provided(self): - ''' - Tests if the save method updated modified field - accordingly when update_fields is used as an argument - and modified is not provided - ''' - with freeze_time(datetime(2020,1,1)): + + with freeze_time(datetime(2020, 1, 2)): + t1.save(update_fields=update_fields) + + self.assertEqual(t1.modified, datetime(2020, 1, 2)) + + @parameterized.expand([ + ('list', ['test_field']), + ('tuple', ('test_field',)), + ('set', {'test_field'}), + ]) + def test_save_with_update_fields_updates_modified_even_when_it_is_not_included_in_a(self, _, update_fields): + with freeze_time(datetime(2020, 1, 1)): t1 = TimeStamp.objects.create() - - with freeze_time(datetime(2020,1,2)): - t1.save(update_fields=[]) - - self.assertEqual(t1.modified, datetime(2020,1,2)) + + with freeze_time(datetime(2020, 1, 2)): + t1.save(update_fields=update_fields) + + self.assertEqual(t1.modified, datetime(2020, 1, 2)) + + @parameterized.expand([ + ('list', []), + ('tuple', ()), + ('set', {}), + ]) + def test_save_is_skipped_for_empty_update_fields_iterable(self, _, update_fields): + with freeze_time(datetime(2020, 1, 1)): + t1 = TimeStamp.objects.create() + + with freeze_time(datetime(2020, 1, 2)): + t1.test_field = 1 + t1.save(update_fields=update_fields) + + t1.refresh_from_db() + self.assertEqual(t1.test_field, 0) + self.assertEqual(t1.modified, datetime(2020, 1, 1)) + + def test_save_updates_modified_value_when_update_fields_explicitly_set_to_none(self): + with freeze_time(datetime(2020, 1, 1)): + t1 = TimeStamp.objects.create() + + with freeze_time(datetime(2020, 1, 2)): + t1.save(update_fields=None) + + self.assertEqual(t1.modified, datetime(2020, 1, 2)) diff --git a/tox.ini b/tox.ini index ad62638..394c01c 100644 --- a/tox.ini +++ b/tox.ini @@ -5,13 +5,13 @@ envlist = [testenv] deps = + freezegun==0.3.12 + -rrequirements-test.txt django22: Django==2.2.* django21: Django==2.1.* django30: Django==3.0.* django31: Django==3.1.* djangotrunk: https://github.com/django/django/archive/master.tar.gz - freezegun == 0.3.12 - -rrequirements-test.txt ignore_outcome = djangotrunk: True passenv =