1
0
mirror of https://github.com/django/django.git synced 2025-10-23 21:59:11 +00:00

Refs #22608 -- Made app_label required when optimizing migrations.

This paved the way for the removal of lot of logic when app_label was
not specified.
This commit is contained in:
Simon Charette
2020-04-03 22:57:42 -04:00
committed by Mariusz Felisiak
parent 911545da1d
commit 25bf15c0da
6 changed files with 48 additions and 36 deletions

View File

@@ -23,7 +23,7 @@ class OptimizerTests(SimpleTestCase):
return serializer_factory(value).serialize()[0]
def assertOptimizesTo(self, operations, expected, exact=None, less_than=None, app_label=None):
result, iterations = self.optimize(operations, app_label)
result, iterations = self.optimize(operations, app_label or 'migrations')
result = [self.serialize(f) for f in result]
expected = [self.serialize(f) for f in expected]
self.assertEqual(expected, result)
@@ -39,6 +39,11 @@ class OptimizerTests(SimpleTestCase):
def assertDoesNotOptimize(self, operations, **kwargs):
self.assertOptimizesTo(operations, operations, **kwargs)
def test_none_app_label(self):
optimizer = MigrationOptimizer()
with self.assertRaisesMessage(TypeError, 'app_label must be a str'):
optimizer.optimize([], None)
def test_single(self):
"""
The optimizer does nothing on a single operation,
@@ -212,16 +217,8 @@ class OptimizerTests(SimpleTestCase):
],
[],
)
# This should not work - FK should block it
self.assertDoesNotOptimize(
[
migrations.CreateModel("Foo", [("name", models.CharField(max_length=255))]),
migrations.CreateModel("Bar", [("other", models.ForeignKey("testapp.Foo", models.CASCADE))]),
migrations.DeleteModel("Foo"),
],
)
# The same operations should be optimized if app_label is specified and
# a FK references a model from the other app.
# Operations should be optimized if the FK references a model from the
# other app.
self.assertOptimizesTo(
[
migrations.CreateModel("Foo", [("name", models.CharField(max_length=255))]),
@@ -235,6 +232,13 @@ class OptimizerTests(SimpleTestCase):
)
# But it shouldn't work if a FK references a model with the same
# app_label.
self.assertDoesNotOptimize(
[
migrations.CreateModel('Foo', [('name', models.CharField(max_length=255))]),
migrations.CreateModel('Bar', [('other', models.ForeignKey('Foo', models.CASCADE))]),
migrations.DeleteModel('Foo'),
],
)
self.assertDoesNotOptimize(
[
migrations.CreateModel("Foo", [("name", models.CharField(max_length=255))]),
@@ -244,12 +248,20 @@ class OptimizerTests(SimpleTestCase):
app_label="testapp",
)
# This should not work - bases should block it
self.assertDoesNotOptimize(
[
migrations.CreateModel('Foo', [('name', models.CharField(max_length=255))]),
migrations.CreateModel('Bar', [('size', models.IntegerField())], bases=('Foo',)),
migrations.DeleteModel('Foo'),
],
)
self.assertDoesNotOptimize(
[
migrations.CreateModel("Foo", [("name", models.CharField(max_length=255))]),
migrations.CreateModel("Bar", [("size", models.IntegerField())], bases=("testapp.Foo",)),
migrations.DeleteModel("Foo"),
],
app_label='testapp',
)
# The same operations should be optimized if app_label and none of
# bases belong to that app.
@@ -293,6 +305,7 @@ class OptimizerTests(SimpleTestCase):
('reviewer', models.ForeignKey('test_app.Reviewer', models.CASCADE)),
]),
],
app_label='test_app',
)
def test_create_model_add_field(self):