summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/migrations/test_autodetector.py3
-rw-r--r--tests/migrations/test_commands.py52
-rw-r--r--tests/migrations/test_migrations/0001_initial.py2
-rw-r--r--tests/migrations/test_migrations_fake_split_initial/0001_initial.py33
-rw-r--r--tests/migrations/test_migrations_fake_split_initial/0002_second.py24
-rw-r--r--tests/migrations/test_migrations_fake_split_initial/__init__.py0
-rw-r--r--tests/migrations/test_migrations_initial_false/0001_not_initial.py33
-rw-r--r--tests/migrations/test_migrations_initial_false/__init__.py0
8 files changed, 147 insertions, 0 deletions
diff --git a/tests/migrations/test_autodetector.py b/tests/migrations/test_autodetector.py
index c7c775ae30..7afce3d20b 100644
--- a/tests/migrations/test_autodetector.py
+++ b/tests/migrations/test_autodetector.py
@@ -877,6 +877,9 @@ class AutodetectorTests(TestCase):
self.assertOperationTypes(changes, 'otherapp', 1, ["AddField"])
self.assertMigrationDependencies(changes, 'otherapp', 0, [])
self.assertMigrationDependencies(changes, 'otherapp', 1, [("otherapp", "auto_1"), ("testapp", "auto_1")])
+ # both split migrations should be `initial`
+ self.assertTrue(changes['otherapp'][0].initial)
+ self.assertTrue(changes['otherapp'][1].initial)
def test_same_app_circular_fk_dependency(self):
"""
diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py
index d1bef38716..f50a1820ae 100644
--- a/tests/migrations/test_commands.py
+++ b/tests/migrations/test_commands.py
@@ -50,6 +50,30 @@ class MigrateTests(MigrationTestBase):
self.assertTableNotExists("migrations_tribble")
self.assertTableNotExists("migrations_book")
+ @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_initial_false"})
+ def test_migrate_initial_false(self):
+ """
+ `Migration.initial = False` skips fake-initial detection.
+ """
+ # Make sure no tables are created
+ self.assertTableNotExists("migrations_author")
+ self.assertTableNotExists("migrations_tribble")
+ # Run the migrations to 0001 only
+ call_command("migrate", "migrations", "0001", verbosity=0)
+ # Fake rollback
+ call_command("migrate", "migrations", "zero", fake=True, verbosity=0)
+ # Make sure fake-initial detection does not run
+ with self.assertRaises(DatabaseError):
+ call_command("migrate", "migrations", "0001", fake_initial=True, verbosity=0)
+
+ call_command("migrate", "migrations", "0001", fake=True, verbosity=0)
+ # Real rollback
+ call_command("migrate", "migrations", "zero", verbosity=0)
+ # Make sure it's all gone
+ self.assertTableNotExists("migrations_author")
+ self.assertTableNotExists("migrations_tribble")
+ self.assertTableNotExists("migrations_book")
+
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
def test_migrate_fake_initial(self):
"""
@@ -109,6 +133,24 @@ class MigrateTests(MigrationTestBase):
self.assertTableNotExists("migrations_tribble")
self.assertTableNotExists("migrations_book")
+ @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_fake_split_initial"})
+ def test_migrate_fake_split_initial(self):
+ """
+ Split initial migrations can be faked with --fake-initial.
+ """
+ call_command("migrate", "migrations", "0002", verbosity=0)
+ call_command("migrate", "migrations", "zero", fake=True, verbosity=0)
+ out = six.StringIO()
+ with mock.patch('django.core.management.color.supports_color', lambda *args: False):
+ call_command("migrate", "migrations", "0002", fake_initial=True, stdout=out, verbosity=1)
+ value = out.getvalue().lower()
+ self.assertIn("migrations.0001_initial... faked", value)
+ self.assertIn("migrations.0002_second... faked", value)
+ # Fake an apply
+ call_command("migrate", "migrations", fake=True, verbosity=0)
+ # Unmigrate everything
+ call_command("migrate", "migrations", "zero", verbosity=0)
+
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_conflict"})
def test_migrate_conflict_exit(self):
"""
@@ -409,6 +451,7 @@ class MakeMigrationsTests(MigrationTestBase):
content = fp.read()
self.assertIn('# -*- coding: utf-8 -*-', content)
self.assertIn('migrations.CreateModel', content)
+ self.assertIn('initial = True', content)
if six.PY3:
self.assertIn('úñí©óðé µóðéø', content) # Meta.verbose_name
@@ -882,6 +925,15 @@ class SquashMigrationsTests(MigrationTestBase):
squashed_migration_file = os.path.join(migration_dir, "0001_squashed_0002_second.py")
self.assertTrue(os.path.exists(squashed_migration_file))
+ def test_squashmigrations_initial_attribute(self):
+ with self.temporary_migration_module(module="migrations.test_migrations") as migration_dir:
+ call_command("squashmigrations", "migrations", "0002", interactive=False, verbosity=0)
+
+ squashed_migration_file = os.path.join(migration_dir, "0001_squashed_0002_second.py")
+ with codecs.open(squashed_migration_file, "r", encoding="utf-8") as fp:
+ content = fp.read()
+ self.assertIn("initial = True", content)
+
def test_squashmigrations_optimizes(self):
"""
Tests that squashmigrations optimizes operations.
diff --git a/tests/migrations/test_migrations/0001_initial.py b/tests/migrations/test_migrations/0001_initial.py
index 9286d0f02b..7a18c10c0d 100644
--- a/tests/migrations/test_migrations/0001_initial.py
+++ b/tests/migrations/test_migrations/0001_initial.py
@@ -6,6 +6,8 @@ from django.db import migrations, models
class Migration(migrations.Migration):
+ initial = True
+
operations = [
migrations.CreateModel(
diff --git a/tests/migrations/test_migrations_fake_split_initial/0001_initial.py b/tests/migrations/test_migrations_fake_split_initial/0001_initial.py
new file mode 100644
index 0000000000..1f42af2fb8
--- /dev/null
+++ b/tests/migrations/test_migrations_fake_split_initial/0001_initial.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ operations = [
+ migrations.CreateModel(
+ "Author",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("name", models.CharField(max_length=255)),
+ ("slug", models.SlugField(null=True)),
+ ("age", models.IntegerField(default=0)),
+ ("silly_field", models.BooleanField(default=False)),
+ ],
+ ),
+ migrations.CreateModel(
+ "Tribble",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("fluffy", models.BooleanField(default=True)),
+ ],
+ ),
+ migrations.AlterUniqueTogether(
+ name='author',
+ unique_together=set([('name', 'slug')]),
+ ),
+ ]
diff --git a/tests/migrations/test_migrations_fake_split_initial/0002_second.py b/tests/migrations/test_migrations_fake_split_initial/0002_second.py
new file mode 100644
index 0000000000..786b77a654
--- /dev/null
+++ b/tests/migrations/test_migrations_fake_split_initial/0002_second.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ("migrations", "0001_initial"),
+ ]
+
+ operations = [
+ migrations.AddField("Author", "rating", models.IntegerField(default=0)),
+ migrations.CreateModel(
+ "Book",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("author", models.ForeignKey("migrations.Author", null=True)),
+ ],
+ ),
+ ]
diff --git a/tests/migrations/test_migrations_fake_split_initial/__init__.py b/tests/migrations/test_migrations_fake_split_initial/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/test_migrations_fake_split_initial/__init__.py
diff --git a/tests/migrations/test_migrations_initial_false/0001_not_initial.py b/tests/migrations/test_migrations_initial_false/0001_not_initial.py
new file mode 100644
index 0000000000..9345321776
--- /dev/null
+++ b/tests/migrations/test_migrations_initial_false/0001_not_initial.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = False
+
+ operations = [
+ migrations.CreateModel(
+ "Author",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("name", models.CharField(max_length=255)),
+ ("slug", models.SlugField(null=True)),
+ ("age", models.IntegerField(default=0)),
+ ("silly_field", models.BooleanField(default=False)),
+ ],
+ ),
+ migrations.CreateModel(
+ "Tribble",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ("fluffy", models.BooleanField(default=True)),
+ ],
+ ),
+ migrations.AlterUniqueTogether(
+ name='author',
+ unique_together=set([('name', 'slug')]),
+ ),
+ ]
diff --git a/tests/migrations/test_migrations_initial_false/__init__.py b/tests/migrations/test_migrations_initial_false/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/test_migrations_initial_false/__init__.py