summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJames Robert <github@jiaaro.com>2016-04-27 12:43:56 -0400
committerSimon Charette <charettes@users.noreply.github.com>2016-04-27 12:43:56 -0400
commit417e083e5521766e73419fb02cac88996ea3b9e7 (patch)
tree5989337094709ed659d395780734b996c8f36ae6 /tests
parent6729b96d8a15048b2295c916c5b881a59d9417a0 (diff)
Fixed #26521 -- Validated CreateModel bases, fields and managers for duplicates.
Diffstat (limited to 'tests')
-rw-r--r--tests/migrations/test_operations.py56
-rw-r--r--tests/migrations/test_optimizer.py22
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,
),
],