summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2011-01-13 04:59:31 +0000
committerRamiro Morales <cramm0@gmail.com>2011-01-13 04:59:31 +0000
commit857b49d1c352af68b3175f5b09750f2d18dd9acb (patch)
tree918b8d86e3365cb88799c4a3b13187d20cee0383 /tests
parent4d2708ff010a573d78759bf9ab9e672a57ad8726 (diff)
[1.2.X] Fixed #13668 -- Corrected database router methods invocation for ManyToMany fields without through models. Thanks craig.kimerer for the report and David Gouldin for the fix.
This also adds tests for r14857. Backport of [15185] from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15186 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/multiple_database/tests.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/regressiontests/multiple_database/tests.py b/tests/regressiontests/multiple_database/tests.py
index 05dca2662d..2d6972fc05 100644
--- a/tests/regressiontests/multiple_database/tests.py
+++ b/tests/regressiontests/multiple_database/tests.py
@@ -1679,3 +1679,56 @@ class PickleQuerySetTestCase(TestCase):
Book.objects.using(db).create(title='Dive into Python', published=datetime.date(2009, 5, 4))
qs = Book.objects.all()
self.assertEqual(qs.db, pickle.loads(pickle.dumps(qs)).db)
+
+class AttributeErrorRouter(object):
+ "A router to test the exception handling of ConnectionRouter"
+ def db_for_read(self, model, **hints):
+ raise AttributeError
+
+ def db_for_write(self, model, **hints):
+ raise AttributeError
+
+class RouterAttributeErrorTestCase(TestCase):
+ multi_db = True
+
+ def setUp(self):
+ self.old_routers = router.routers
+ router.routers = [AttributeErrorRouter()]
+
+ def tearDown(self):
+ router.routers = self.old_routers
+
+ def test_attribute_error(self):
+ "Check that the AttributeError from AttributeErrorRouter bubbles up"
+ dive = Book()
+ dive.title="Dive into Python"
+ dive.published = datetime.date(2009, 5, 4)
+ self.assertRaises(AttributeError, dive.save)
+
+class ModelMetaRouter(object):
+ "A router to ensure model arguments are real model classes"
+ def db_for_write(self, model, **hints):
+ if not hasattr(model, '_meta'):
+ raise ValueError
+
+class RouterM2MThroughTestCase(TestCase):
+ multi_db = True
+
+ def setUp(self):
+ self.old_routers = router.routers
+ router.routers = [ModelMetaRouter()]
+
+ def tearDown(self):
+ router.routers = self.old_routers
+
+ def test_m2m_through(self):
+ b = Book.objects.create(title="Pro Django",
+ published=datetime.date(2008, 12, 16))
+
+ p = Person.objects.create(name="Marty Alchin")
+ # test add
+ b.authors.add(p)
+ # test remove
+ b.authors.remove(p)
+ # test clear
+ b.authors.clear()