From 2a9c19981921002b319201d86184fd0fe0e03f2f Mon Sep 17 00:00:00 2001 From: romgar Date: Thu, 24 Nov 2016 21:31:23 +0000 Subject: [PATCH] Remove test duplication related to TestCase inheritance in different files --- .../tests/test_fields/test_field_tracker.py | 142 ++++++++++++++++- model_utils/tests/test_models/__init__.py | 1 - .../tests/test_models/test_model_tracker.py | 150 ------------------ 3 files changed, 141 insertions(+), 152 deletions(-) delete mode 100644 model_utils/tests/test_models/test_model_tracker.py diff --git a/model_utils/tests/test_fields/test_field_tracker.py b/model_utils/tests/test_fields/test_field_tracker.py index 4bd96e1..c215f77 100644 --- a/model_utils/tests/test_fields/test_field_tracker.py +++ b/model_utils/tests/test_fields/test_field_tracker.py @@ -8,7 +8,9 @@ from model_utils import FieldTracker from model_utils.tests.helpers import skipUnless from model_utils.tests.models import ( Tracked, TrackedFK, InheritedTrackedFK, TrackedNotDefault, TrackedNonFieldAttr, TrackedMultiple, - InheritedTracked, TrackedFileField) + InheritedTracked, TrackedFileField, + ModelTracked, ModelTrackedFK, ModelTrackedNotDefault, ModelTrackedMultiple, InheritedModelTracked, +) class FieldTrackerTestCase(TestCase): @@ -591,3 +593,141 @@ class FieldTrackerFileFieldTests(FieldTrackerTestCase): some_file=self.instance.some_file, id=self.instance.id, ) + + +class ModelTrackerTests(FieldTrackerTests): + + tracked_class = ModelTracked + + def test_pre_save_changed(self): + self.assertChanged() + self.instance.name = 'new age' + self.assertChanged() + self.instance.number = 8 + self.assertChanged() + self.instance.name = '' + self.assertChanged() + self.instance.mutable = [1,2,3] + self.assertChanged() + + def test_first_save(self): + self.assertHasChanged(name=True, number=True, mutable=True) + self.assertPrevious(name=None, number=None, mutable=None) + self.assertCurrent(name='', number=None, id=None, mutable=None) + self.assertChanged() + self.instance.name = 'retro' + self.instance.number = 4 + self.instance.mutable = [1,2,3] + self.assertHasChanged(name=True, number=True, mutable=True) + self.assertPrevious(name=None, number=None, mutable=None) + self.assertCurrent(name='retro', number=4, id=None, mutable=[1,2,3]) + self.assertChanged() + # Django 1.4 doesn't have update_fields + if django.VERSION >= (1, 5, 0): + self.instance.save(update_fields=[]) + self.assertHasChanged(name=True, number=True, mutable=True) + self.assertPrevious(name=None, number=None, mutable=None) + self.assertCurrent(name='retro', number=4, id=None, mutable=[1,2,3]) + self.assertChanged() + with self.assertRaises(ValueError): + self.instance.save(update_fields=['number']) + + def test_pre_save_has_changed(self): + self.assertHasChanged(name=True, number=True) + self.instance.name = 'new age' + self.assertHasChanged(name=True, number=True) + self.instance.number = 7 + self.assertHasChanged(name=True, number=True) + + +class ModelTrackedModelCustomTests(FieldTrackedModelCustomTests): + + tracked_class = ModelTrackedNotDefault + + def test_first_save(self): + self.assertHasChanged(name=True, number=True) + self.assertPrevious(name=None, number=None) + self.assertCurrent(name='') + self.assertChanged() + self.instance.name = 'retro' + self.instance.number = 4 + self.assertHasChanged(name=True, number=True) + self.assertPrevious(name=None, number=None) + self.assertCurrent(name='retro') + self.assertChanged() + + def test_pre_save_has_changed(self): + self.assertHasChanged(name=True, number=True) + self.instance.name = 'new age' + self.assertHasChanged(name=True, number=True) + self.instance.number = 7 + self.assertHasChanged(name=True, number=True) + + def test_pre_save_changed(self): + self.assertChanged() + self.instance.name = 'new age' + self.assertChanged() + self.instance.number = 8 + self.assertChanged() + self.instance.name = '' + self.assertChanged() + + +class ModelTrackedModelMultiTests(FieldTrackedModelMultiTests): + + tracked_class = ModelTrackedMultiple + + def test_pre_save_has_changed(self): + self.tracker = self.instance.name_tracker + self.assertHasChanged(name=True, number=True) + self.instance.name = 'new age' + self.assertHasChanged(name=True, number=True) + self.tracker = self.instance.number_tracker + self.assertHasChanged(name=True, number=True) + self.instance.name = 'new age' + self.assertHasChanged(name=True, number=True) + + def test_pre_save_changed(self): + self.tracker = self.instance.name_tracker + self.assertChanged() + self.instance.name = 'new age' + self.assertChanged() + self.instance.number = 8 + self.assertChanged() + self.instance.name = '' + self.assertChanged() + self.tracker = self.instance.number_tracker + self.assertChanged() + self.instance.name = 'new age' + self.assertChanged() + self.instance.number = 8 + self.assertChanged() + + +class ModelTrackerForeignKeyTests(FieldTrackerForeignKeyTests): + + fk_class = ModelTracked + tracked_class = ModelTrackedFK + + def test_custom_without_id(self): + with self.assertNumQueries(2): + self.tracked_class.objects.get() + self.tracker = self.instance.custom_tracker_without_id + self.assertChanged() + self.assertPrevious() + self.assertCurrent(fk=self.old_fk) + self.instance.fk = self.fk_class.objects.create(number=8) + self.assertNotEqual(self.instance.fk, self.old_fk) + self.assertChanged(fk=self.old_fk) + self.assertPrevious(fk=self.old_fk) + self.assertCurrent(fk=self.instance.fk) + + +class InheritedModelTrackerTests(ModelTrackerTests): + + tracked_class = InheritedModelTracked + + def test_child_fields_not_tracked(self): + self.name2 = 'test' + self.assertEqual(self.tracker.previous('name2'), None) + self.assertTrue(self.tracker.has_changed('name2')) diff --git a/model_utils/tests/test_models/__init__.py b/model_utils/tests/test_models/__init__.py index 5065567..6a0970b 100644 --- a/model_utils/tests/test_models/__init__.py +++ b/model_utils/tests/test_models/__init__.py @@ -1,5 +1,4 @@ # Needed for Django 1.4/1.5 test runner -from .test_model_tracker import * from .test_softdeletable_model import * from .test_status_model import * from .test_timeframed_model import * diff --git a/model_utils/tests/test_models/test_model_tracker.py b/model_utils/tests/test_models/test_model_tracker.py deleted file mode 100644 index c9448d1..0000000 --- a/model_utils/tests/test_models/test_model_tracker.py +++ /dev/null @@ -1,150 +0,0 @@ -from __future__ import unicode_literals - -import django - -from model_utils.tests.models import ( - ModelTracked, ModelTrackedFK, ModelTrackedNotDefault, ModelTrackedMultiple, InheritedModelTracked, -) - -from model_utils.tests.test_fields.test_field_tracker import ( - FieldTrackerTests, FieldTrackedModelCustomTests, - FieldTrackedModelMultiTests, FieldTrackerForeignKeyTests -) - - -class ModelTrackerTests(FieldTrackerTests): - - tracked_class = ModelTracked - - def test_pre_save_changed(self): - self.assertChanged() - self.instance.name = 'new age' - self.assertChanged() - self.instance.number = 8 - self.assertChanged() - self.instance.name = '' - self.assertChanged() - self.instance.mutable = [1,2,3] - self.assertChanged() - - def test_first_save(self): - self.assertHasChanged(name=True, number=True, mutable=True) - self.assertPrevious(name=None, number=None, mutable=None) - self.assertCurrent(name='', number=None, id=None, mutable=None) - self.assertChanged() - self.instance.name = 'retro' - self.instance.number = 4 - self.instance.mutable = [1,2,3] - self.assertHasChanged(name=True, number=True, mutable=True) - self.assertPrevious(name=None, number=None, mutable=None) - self.assertCurrent(name='retro', number=4, id=None, mutable=[1,2,3]) - self.assertChanged() - # Django 1.4 doesn't have update_fields - if django.VERSION >= (1, 5, 0): - self.instance.save(update_fields=[]) - self.assertHasChanged(name=True, number=True, mutable=True) - self.assertPrevious(name=None, number=None, mutable=None) - self.assertCurrent(name='retro', number=4, id=None, mutable=[1,2,3]) - self.assertChanged() - with self.assertRaises(ValueError): - self.instance.save(update_fields=['number']) - - def test_pre_save_has_changed(self): - self.assertHasChanged(name=True, number=True) - self.instance.name = 'new age' - self.assertHasChanged(name=True, number=True) - self.instance.number = 7 - self.assertHasChanged(name=True, number=True) - - -class ModelTrackedModelCustomTests(FieldTrackedModelCustomTests): - - tracked_class = ModelTrackedNotDefault - - def test_first_save(self): - self.assertHasChanged(name=True, number=True) - self.assertPrevious(name=None, number=None) - self.assertCurrent(name='') - self.assertChanged() - self.instance.name = 'retro' - self.instance.number = 4 - self.assertHasChanged(name=True, number=True) - self.assertPrevious(name=None, number=None) - self.assertCurrent(name='retro') - self.assertChanged() - - def test_pre_save_has_changed(self): - self.assertHasChanged(name=True, number=True) - self.instance.name = 'new age' - self.assertHasChanged(name=True, number=True) - self.instance.number = 7 - self.assertHasChanged(name=True, number=True) - - def test_pre_save_changed(self): - self.assertChanged() - self.instance.name = 'new age' - self.assertChanged() - self.instance.number = 8 - self.assertChanged() - self.instance.name = '' - self.assertChanged() - - -class ModelTrackedModelMultiTests(FieldTrackedModelMultiTests): - - tracked_class = ModelTrackedMultiple - - def test_pre_save_has_changed(self): - self.tracker = self.instance.name_tracker - self.assertHasChanged(name=True, number=True) - self.instance.name = 'new age' - self.assertHasChanged(name=True, number=True) - self.tracker = self.instance.number_tracker - self.assertHasChanged(name=True, number=True) - self.instance.name = 'new age' - self.assertHasChanged(name=True, number=True) - - def test_pre_save_changed(self): - self.tracker = self.instance.name_tracker - self.assertChanged() - self.instance.name = 'new age' - self.assertChanged() - self.instance.number = 8 - self.assertChanged() - self.instance.name = '' - self.assertChanged() - self.tracker = self.instance.number_tracker - self.assertChanged() - self.instance.name = 'new age' - self.assertChanged() - self.instance.number = 8 - self.assertChanged() - - -class ModelTrackerForeignKeyTests(FieldTrackerForeignKeyTests): - - fk_class = ModelTracked - tracked_class = ModelTrackedFK - - def test_custom_without_id(self): - with self.assertNumQueries(2): - self.tracked_class.objects.get() - self.tracker = self.instance.custom_tracker_without_id - self.assertChanged() - self.assertPrevious() - self.assertCurrent(fk=self.old_fk) - self.instance.fk = self.fk_class.objects.create(number=8) - self.assertNotEqual(self.instance.fk, self.old_fk) - self.assertChanged(fk=self.old_fk) - self.assertPrevious(fk=self.old_fk) - self.assertCurrent(fk=self.instance.fk) - - -class InheritedModelTrackerTests(ModelTrackerTests): - - tracked_class = InheritedModelTracked - - def test_child_fields_not_tracked(self): - self.name2 = 'test' - self.assertEqual(self.tracker.previous('name2'), None) - self.assertTrue(self.tracker.has_changed('name2'))