From fca866763acb6b3414c20ca3772b94cb5d111733 Mon Sep 17 00:00:00 2001
From: Markus Holtermann <info@markusholtermann.eu>
Date: Mon, 29 Dec 2014 20:48:04 +0100
Subject: [PATCH] Added test for an intermediate swappable model change in
 migration state.

refs #22563
---
 tests/migrations/test_autodetector.py | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/tests/migrations/test_autodetector.py b/tests/migrations/test_autodetector.py
index c022a2e0d8..cfb59d4851 100644
--- a/tests/migrations/test_autodetector.py
+++ b/tests/migrations/test_autodetector.py
@@ -99,6 +99,11 @@ class AutodetectorTests(TestCase):
         ("name", models.CharField(max_length=200)),
         ("publisher", models.ForeignKey("testapp.Publisher")),
     ])
+    author_with_user = ModelState("testapp", "Author", [
+        ("id", models.AutoField(primary_key=True)),
+        ("name", models.CharField(max_length=200)),
+        ("user", models.ForeignKey("auth.User")),
+    ])
     author_with_custom_user = ModelState("testapp", "Author", [
         ("id", models.AutoField(primary_key=True)),
         ("name", models.CharField(max_length=200)),
@@ -1139,6 +1144,20 @@ class AutodetectorTests(TestCase):
         self.assertOperationAttributes(changes, 'testapp', 0, 0, name="Author")
         self.assertMigrationDependencies(changes, 'testapp', 0, [("__setting__", "AUTH_USER_MODEL")])
 
+    def test_swappable_changed(self):
+        before = self.make_project_state([self.custom_user, self.author_with_user])
+        with override_settings(AUTH_USER_MODEL="thirdapp.CustomUser"):
+            after = self.make_project_state([self.custom_user, self.author_with_custom_user])
+        autodetector = MigrationAutodetector(before, after)
+        changes = autodetector._detect_changes()
+        # Right number/type of migrations?
+        self.assertNumberMigrations(changes, 'testapp', 1)
+        self.assertOperationTypes(changes, 'testapp', 0, ["AlterField"])
+        self.assertOperationAttributes(changes, 'testapp', 0, 0, model_name="author", name='user')
+        fk_field = changes['testapp'][0].operations[0].field
+        to_model = '%s.%s' % (fk_field.rel.to._meta.app_label, fk_field.rel.to._meta.object_name)
+        self.assertEqual(to_model, 'thirdapp.CustomUser')
+
     def test_add_field_with_default(self):
         """#22030 - Adding a field with a default should work."""
         # Make state