diff options
| author | James Robert <github@jiaaro.com> | 2016-04-27 12:43:56 -0400 |
|---|---|---|
| committer | Simon Charette <charettes@users.noreply.github.com> | 2016-04-27 12:43:56 -0400 |
| commit | 417e083e5521766e73419fb02cac88996ea3b9e7 (patch) | |
| tree | 5989337094709ed659d395780734b996c8f36ae6 /tests | |
| parent | 6729b96d8a15048b2295c916c5b881a59d9417a0 (diff) | |
Fixed #26521 -- Validated CreateModel bases, fields and managers for duplicates.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/migrations/test_operations.py | 56 | ||||
| -rw-r--r-- | tests/migrations/test_optimizer.py | 22 |
2 files changed, 66 insertions, 12 deletions
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py index daeb5d500e..2df12fed8f 100644 --- a/tests/migrations/test_operations.py +++ b/tests/migrations/test_operations.py @@ -10,7 +10,7 @@ from django.db.transaction import atomic from django.db.utils import IntegrityError from django.test import override_settings, skipUnlessDBFeature -from .models import FoodManager, FoodQuerySet +from .models import FoodManager, FoodQuerySet, UnicodeModel from .test_base import MigrationTestBase try: @@ -200,6 +200,60 @@ class OperationTests(OperationTestBase): definition = operation.deconstruct() self.assertNotIn('managers', definition[2]) + def test_create_model_with_duplicate_field_name(self): + with self.assertRaisesMessage(ValueError, "Found duplicate field in CreateModel operation."): + migrations.CreateModel( + "Pony", + [ + ("id", models.AutoField(primary_key=True)), + ("pink", models.TextField()), + ("pink", models.IntegerField(default=1)), + ], + ) + + def test_create_model_with_duplicate_base(self): + with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): + migrations.CreateModel( + "Pony", + fields=[], + bases=("test_crmo.Pony", "test_crmo.Pony",), + ) + with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): + migrations.CreateModel( + "Pony", + fields=[], + bases=(UnicodeModel, UnicodeModel,), + ) + with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): + migrations.CreateModel( + "Pony", + fields=[], + bases=("test_crmo.Pony", "test_crmo.pony",), + ) + with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): + migrations.CreateModel( + "Pony", + fields=[], + bases=(UnicodeModel, 'migrations.unicodemodel',), + ) + with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): + migrations.CreateModel( + "Pony", + fields=[], + bases=(UnicodeModel, 'migrations.UnicodeModel',), + ) + + def test_create_model_with_duplicate_manager_name(self): + with self.assertRaisesMessage(ValueError, "Found duplicate manager in CreateModel operation."): + migrations.CreateModel( + "Pony", + fields=[], + managers=[ + ("objects", models.Manager()), + ("objects", models.Manager()), + ], + ) + def test_create_model_with_unique_after(self): """ Tests the CreateModel operation directly followed by an diff --git a/tests/migrations/test_optimizer.py b/tests/migrations/test_optimizer.py index 3a7acc2c89..ce60bb32af 100644 --- a/tests/migrations/test_optimizer.py +++ b/tests/migrations/test_optimizer.py @@ -5,7 +5,7 @@ from django.db.migrations import operations from django.db.migrations.optimizer import MigrationOptimizer from django.test import SimpleTestCase -from .models import CustomModelBase, EmptyManager +from .models import EmptyManager, UnicodeModel class OptimizerTests(SimpleTestCase): @@ -71,7 +71,7 @@ class OptimizerTests(SimpleTestCase): name="Foo", fields=[("name", models.CharField(max_length=255))], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), migrations.RenameModel("Foo", "Bar"), @@ -81,7 +81,7 @@ class OptimizerTests(SimpleTestCase): "Bar", [("name", models.CharField(max_length=255))], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ) ], @@ -237,7 +237,7 @@ class OptimizerTests(SimpleTestCase): name="Foo", fields=[("name", models.CharField(max_length=255))], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), migrations.AddField("Foo", "age", models.IntegerField()), @@ -250,7 +250,7 @@ class OptimizerTests(SimpleTestCase): ("age", models.IntegerField()), ], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), ], @@ -309,7 +309,7 @@ class OptimizerTests(SimpleTestCase): name="Foo", fields=[("name", models.CharField(max_length=255))], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), migrations.AlterField("Foo", "name", models.IntegerField()), @@ -321,7 +321,7 @@ class OptimizerTests(SimpleTestCase): ("name", models.IntegerField()), ], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), ], @@ -338,7 +338,7 @@ class OptimizerTests(SimpleTestCase): name="Foo", fields=[("name", models.CharField(max_length=255))], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), migrations.RenameField("Foo", "name", "title"), @@ -350,7 +350,7 @@ class OptimizerTests(SimpleTestCase): ("title", models.CharField(max_length=255)), ], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), ], @@ -401,7 +401,7 @@ class OptimizerTests(SimpleTestCase): ("age", models.IntegerField()), ], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), migrations.RemoveField("Foo", "age"), @@ -413,7 +413,7 @@ class OptimizerTests(SimpleTestCase): ("name", models.CharField(max_length=255)), ], options={'verbose_name': 'Foo'}, - bases=(CustomModelBase), + bases=(UnicodeModel,), managers=managers, ), ], |
