summaryrefslogtreecommitdiff
path: root/tests/multiple_database
diff options
context:
space:
mode:
authorStefan R. Filipek <srfilipek@gmail.com>2018-05-10 20:42:44 -0400
committerTim Graham <timograham@gmail.com>2018-05-10 20:42:44 -0400
commita5a2ceeb453b86caaf01687342984f372428beb8 (patch)
tree487d4dcbc5122d74adc0f5a99657e2ac329a594e /tests/multiple_database
parent9c4ea63e878c053600c284e32d5f32d27a59b63a (diff)
downloaddjango-a5a2ceeb453b86caaf01687342984f372428beb8.tar.gz
Fixed #27629 -- Added router.allow_relation() calls for assignments between unsaved model instances.
Diffstat (limited to 'tests/multiple_database')
-rw-r--r--tests/multiple_database/tests.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/multiple_database/tests.py b/tests/multiple_database/tests.py
index 6dd44f6475..e4cef8cdb9 100644
--- a/tests/multiple_database/tests.py
+++ b/tests/multiple_database/tests.py
@@ -2082,3 +2082,28 @@ class RouteForWriteTestCase(TestCase):
self.assertEqual(e.mode, RouterUsed.WRITE)
self.assertEqual(e.model, Book)
self.assertEqual(e.hints, {'instance': auth})
+
+
+class NoRelationRouter:
+ """Disallow all relations."""
+ def allow_relation(self, obj1, obj2, **hints):
+ return False
+
+
+@override_settings(DATABASE_ROUTERS=[NoRelationRouter()])
+class RelationAssignmentTests(TestCase):
+ """allow_relation() is called with unsaved model instances."""
+ multi_db = True
+ router_prevents_msg = 'the current database router prevents this relation'
+
+ def test_foreign_key_relation(self):
+ person = Person(name='Someone')
+ pet = Pet()
+ with self.assertRaisesMessage(ValueError, self.router_prevents_msg):
+ pet.owner = person
+
+ def test_reverse_one_to_one_relation(self):
+ user = User(username='Someone', password='fake_hash')
+ profile = UserProfile()
+ with self.assertRaisesMessage(ValueError, self.router_prevents_msg):
+ user.userprofile = profile