diff options
author | Andrew Godwin <andrew@aeracode.org> | 2014-01-15 14:20:47 +0000 |
---|---|---|
committer | Andrew Godwin <andrew@aeracode.org> | 2014-01-19 16:43:12 +0000 |
commit | c9de1b4a55713ad1557f8c40621226253038f665 (patch) | |
tree | 54645a04edb6b3288531bb3f8df377b6085433e8 /tests/field_deconstruction | |
parent | 5c7ac7494ab5f1cdc364f829f61ffef85ad7344b (diff) | |
download | django-c9de1b4a55713ad1557f8c40621226253038f665.tar.gz |
Implement swappable model support for migrations
Diffstat (limited to 'tests/field_deconstruction')
-rw-r--r-- | tests/field_deconstruction/tests.py | 44 |
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() |