Made assertOptimizesTo() more strict in migrations tests.
A recursive deconstruction is needed because comparing deconstructed
operations doesn't check field attributes. Fixed typo in failing test.
from django.db import migrations, models
from django.db.migrations import operations
from django.db.migrations.optimizer import MigrationOptimizer
+from django.db.migrations.serializer import serializer_factory
from django.test import SimpleTestCase
from .models import EmptyManager, UnicodeModel
@@ -18,10 +19,13 @@ class OptimizerTests(SimpleTestCase):
optimizer = MigrationOptimizer()
return optimizer.optimize(operations, app_label), optimizer._iterations
+ def serialize(self, value):
+ 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 = [repr(f.deconstruct()) for f in result]
- expected = [repr(f.deconstruct()) for f in expected]
+ result = [self.serialize(f) for f in result]
+ expected = [self.serialize(f) for f in expected]
self.assertEqual(expected, result)
if exact is not None and iterations != exact:
raise self.failureException(
@@ -360,7 +364,7 @@ class OptimizerTests(SimpleTestCase):
('url', models.TextField()),
('foo_fk', models.ForeignKey('migrations.Foo', models.CASCADE)),
]),
- migrations.AddField('Foo', 'bar_fk', models.ForeignKey('migrations.Foo', models.CASCADE)),
+ migrations.AddField('Foo', 'bar_fk', models.ForeignKey('migrations.Bar', models.CASCADE)),
],
)
