summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2014-06-12 10:21:26 -0700
committerAndrew Godwin <andrew@aeracode.org>2014-06-12 10:22:43 -0700
commit7b17350a1bfa527358e722baf962a5f9cfb838ea (patch)
treecdeb5835ddac84c6089dae28b52cbbab1d870140 /tests
parent9980f67154ed3b10493e159d62c72ab6394769fe (diff)
Fixed #22823 (and partly #22563) - FKs from unmigrated apps breaking state.
Thanks to bendavis78 for the test and diagnostic work.
Diffstat (limited to 'tests')
-rw-r--r--tests/migrations/migrations_test_apps/migrated_app/__init__.py0
-rw-r--r--tests/migrations/migrations_test_apps/migrated_app/migrations/0001_initial.py30
-rw-r--r--tests/migrations/migrations_test_apps/migrated_app/migrations/__init__.py0
-rw-r--r--tests/migrations/migrations_test_apps/migrated_app/models.py0
-rw-r--r--tests/migrations/migrations_test_apps/migrated_unapplied_app/__init__.py0
-rw-r--r--tests/migrations/migrations_test_apps/migrated_unapplied_app/migrations/0001_initial.py22
-rw-r--r--tests/migrations/migrations_test_apps/migrated_unapplied_app/migrations/__init__.py0
-rw-r--r--tests/migrations/migrations_test_apps/migrated_unapplied_app/models.py12
-rw-r--r--tests/migrations/migrations_test_apps/unmigrated_app/__init__.py0
-rw-r--r--tests/migrations/migrations_test_apps/unmigrated_app/models.py9
-rw-r--r--tests/migrations/test_commands.py23
11 files changed, 96 insertions, 0 deletions
diff --git a/tests/migrations/migrations_test_apps/migrated_app/__init__.py b/tests/migrations/migrations_test_apps/migrated_app/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/migrated_app/__init__.py
diff --git a/tests/migrations/migrations_test_apps/migrated_app/migrations/0001_initial.py b/tests/migrations/migrations_test_apps/migrated_app/migrations/0001_initial.py
new file mode 100644
index 0000000000..581d536814
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/migrated_app/migrations/0001_initial.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ 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)),
+ ],
+ )
+
+ ]
diff --git a/tests/migrations/migrations_test_apps/migrated_app/migrations/__init__.py b/tests/migrations/migrations_test_apps/migrated_app/migrations/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/migrated_app/migrations/__init__.py
diff --git a/tests/migrations/migrations_test_apps/migrated_app/models.py b/tests/migrations/migrations_test_apps/migrated_app/models.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/migrated_app/models.py
diff --git a/tests/migrations/migrations_test_apps/migrated_unapplied_app/__init__.py b/tests/migrations/migrations_test_apps/migrated_unapplied_app/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/migrated_unapplied_app/__init__.py
diff --git a/tests/migrations/migrations_test_apps/migrated_unapplied_app/migrations/0001_initial.py b/tests/migrations/migrations_test_apps/migrated_unapplied_app/migrations/0001_initial.py
new file mode 100644
index 0000000000..4913065b10
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/migrated_unapplied_app/migrations/0001_initial.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ operations = [
+
+ migrations.CreateModel(
+ "OtherAuthor",
+ [
+ ("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)),
+ ],
+ ),
+
+ ]
diff --git a/tests/migrations/migrations_test_apps/migrated_unapplied_app/migrations/__init__.py b/tests/migrations/migrations_test_apps/migrated_unapplied_app/migrations/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/migrated_unapplied_app/migrations/__init__.py
diff --git a/tests/migrations/migrations_test_apps/migrated_unapplied_app/models.py b/tests/migrations/migrations_test_apps/migrated_unapplied_app/models.py
new file mode 100644
index 0000000000..efb71e637f
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/migrated_unapplied_app/models.py
@@ -0,0 +1,12 @@
+from django.db import models
+
+
+class OtherAuthor(models.Model):
+ 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)
+
+ class Meta:
+ app_label = "migrated_unapplied_app"
diff --git a/tests/migrations/migrations_test_apps/unmigrated_app/__init__.py b/tests/migrations/migrations_test_apps/unmigrated_app/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/unmigrated_app/__init__.py
diff --git a/tests/migrations/migrations_test_apps/unmigrated_app/models.py b/tests/migrations/migrations_test_apps/unmigrated_app/models.py
new file mode 100644
index 0000000000..c44e922d38
--- /dev/null
+++ b/tests/migrations/migrations_test_apps/unmigrated_app/models.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+from django.db import models
+
+
+class SillyModel(models.Model):
+ silly_field = models.BooleanField(default=False)
+ silly_tribble = models.ForeignKey("migrations.Tribble")
+ is_trouble = models.BooleanField(default=True)
diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py
index a44c415d7d..c223b5f489 100644
--- a/tests/migrations/test_commands.py
+++ b/tests/migrations/test_commands.py
@@ -102,6 +102,29 @@ class MigrateTests(MigrationTestBase):
call_command("sqlmigrate", "migrations", "0001", stdout=stdout, backwards=True)
self.assertIn("drop table", stdout.getvalue().lower())
+ @override_system_checks([])
+ @override_settings(
+ INSTALLED_APPS=[
+ "migrations.migrations_test_apps.migrated_app",
+ "migrations.migrations_test_apps.migrated_unapplied_app",
+ "migrations.migrations_test_apps.unmigrated_app"])
+ def test_regression_22823_unmigrated_fk_to_migrated_model(self):
+ """
+ https://code.djangoproject.com/ticket/22823
+
+ Assuming you have 3 apps, `A`, `B`, and `C`, such that:
+
+ * `A` has migrations
+ * `B` has a migration we want to apply
+ * `C` has no migrations, but has an FK to `A`
+
+ When we try to migrate "B", an exception occurs because the
+ "B" was not included in the ProjectState that is used to detect
+ soft-applied migrations.
+ """
+ stdout = six.StringIO()
+ call_command("migrate", "migrated_unapplied_app", stdout=stdout)
+
class MakeMigrationsTests(MigrationTestBase):
"""