summaryrefslogtreecommitdiff
path: root/tests/field_deconstruction
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2014-01-15 14:20:47 +0000
committerAndrew Godwin <andrew@aeracode.org>2014-01-19 16:43:12 +0000
commitc9de1b4a55713ad1557f8c40621226253038f665 (patch)
tree54645a04edb6b3288531bb3f8df377b6085433e8 /tests/field_deconstruction
parent5c7ac7494ab5f1cdc364f829f61ffef85ad7344b (diff)
downloaddjango-c9de1b4a55713ad1557f8c40621226253038f665.tar.gz
Implement swappable model support for migrations
Diffstat (limited to 'tests/field_deconstruction')
-rw-r--r--tests/field_deconstruction/tests.py44
1 files changed, 43 insertions, 1 deletions
diff --git a/tests/field_deconstruction/tests.py b/tests/field_deconstruction/tests.py
index cb78003318..3fea7ae853 100644
--- a/tests/field_deconstruction/tests.py
+++ b/tests/field_deconstruction/tests.py
@@ -1,5 +1,5 @@
import warnings
-from django.test import TestCase
+from django.test import TestCase, override_settings
from django.db import models
@@ -149,22 +149,44 @@ class FieldDeconstructionTests(TestCase):
self.assertEqual(kwargs, {})
def test_foreign_key(self):
+ # Test basic pointing
+ field = models.ForeignKey("auth.Permission")
+ name, path, args, kwargs = field.deconstruct()
+ self.assertEqual(path, "django.db.models.ForeignKey")
+ self.assertEqual(args, [])
+ self.assertEqual(kwargs, {"to": "auth.Permission"})
+ self.assertFalse(hasattr(kwargs['to'], "setting_name"))
+ # Test swap detection for swappable model
field = models.ForeignKey("auth.User")
name, path, args, kwargs = field.deconstruct()
self.assertEqual(path, "django.db.models.ForeignKey")
self.assertEqual(args, [])
self.assertEqual(kwargs, {"to": "auth.User"})
+ self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
+ # Test nonexistent (for now) model
field = models.ForeignKey("something.Else")
name, path, args, kwargs = field.deconstruct()
self.assertEqual(path, "django.db.models.ForeignKey")
self.assertEqual(args, [])
self.assertEqual(kwargs, {"to": "something.Else"})
+ # Test on_delete
field = models.ForeignKey("auth.User", on_delete=models.SET_NULL)
name, path, args, kwargs = field.deconstruct()
self.assertEqual(path, "django.db.models.ForeignKey")
self.assertEqual(args, [])
self.assertEqual(kwargs, {"to": "auth.User", "on_delete": models.SET_NULL})
+ @override_settings(AUTH_USER_MODEL="auth.Permission")
+ def test_foreign_key_swapped(self):
+ # It doesn't matter that we swapped out user for permission;
+ # there's no validation. We just want to check the setting stuff works.
+ field = models.ForeignKey("auth.Permission")
+ name, path, args, kwargs = field.deconstruct()
+ self.assertEqual(path, "django.db.models.ForeignKey")
+ self.assertEqual(args, [])
+ self.assertEqual(kwargs, {"to": "auth.Permission"})
+ self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
+
def test_image_field(self):
field = models.ImageField(upload_to="foo/barness", width_field="width", height_field="height")
name, path, args, kwargs = field.deconstruct()
@@ -201,11 +223,31 @@ class FieldDeconstructionTests(TestCase):
self.assertEqual(kwargs, {"protocol": "IPv6"})
def test_many_to_many_field(self):
+ # Test normal
+ field = models.ManyToManyField("auth.Permission")
+ name, path, args, kwargs = field.deconstruct()
+ self.assertEqual(path, "django.db.models.ManyToManyField")
+ self.assertEqual(args, [])
+ self.assertEqual(kwargs, {"to": "auth.Permission"})
+ self.assertFalse(hasattr(kwargs['to'], "setting_name"))
+ # Test swappable
field = models.ManyToManyField("auth.User")
name, path, args, kwargs = field.deconstruct()
self.assertEqual(path, "django.db.models.ManyToManyField")
self.assertEqual(args, [])
self.assertEqual(kwargs, {"to": "auth.User"})
+ self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
+
+ @override_settings(AUTH_USER_MODEL="auth.Permission")
+ def test_many_to_many_field_swapped(self):
+ # It doesn't matter that we swapped out user for permission;
+ # there's no validation. We just want to check the setting stuff works.
+ field = models.ManyToManyField("auth.Permission")
+ name, path, args, kwargs = field.deconstruct()
+ self.assertEqual(path, "django.db.models.ManyToManyField")
+ self.assertEqual(args, [])
+ self.assertEqual(kwargs, {"to": "auth.Permission"})
+ self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
def test_null_boolean_field(self):
field = models.NullBooleanField()