diff options
Diffstat (limited to 'tests/foreign_object/test_empty_join.py')
| -rw-r--r-- | tests/foreign_object/test_empty_join.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/foreign_object/test_empty_join.py b/tests/foreign_object/test_empty_join.py new file mode 100644 index 0000000000..a043595ce2 --- /dev/null +++ b/tests/foreign_object/test_empty_join.py @@ -0,0 +1,47 @@ +from django.test import TestCase + +from .models import SlugPage + + +class RestrictedConditionsTests(TestCase): + def setUp(self): + slugs = [ + 'a', + 'a/a', + 'a/b', + 'a/b/a', + 'x', + 'x/y/z', + ] + SlugPage.objects.bulk_create([SlugPage(slug=slug) for slug in slugs]) + + def test_restrictions_with_no_joining_columns(self): + """ + Test that it's possible to create a working related field that doesn't + use any joining columns, as long as an extra restriction is supplied. + """ + a = SlugPage.objects.get(slug='a') + self.assertListEqual( + [p.slug for p in SlugPage.objects.filter(ascendants=a)], + ['a', 'a/a', 'a/b', 'a/b/a'], + ) + self.assertEqual( + [p.slug for p in a.descendants.all()], + ['a', 'a/a', 'a/b', 'a/b/a'], + ) + + aba = SlugPage.objects.get(slug='a/b/a') + self.assertListEqual( + [p.slug for p in SlugPage.objects.filter(descendants__in=[aba])], + ['a', 'a/b', 'a/b/a'], + ) + self.assertListEqual( + [p.slug for p in aba.ascendants.all()], + ['a', 'a/b', 'a/b/a'], + ) + + def test_empty_join_conditions(self): + x = SlugPage.objects.get(slug='x') + message = "Join generated an empty ON clause." + with self.assertRaisesMessage(ValueError, message): + list(SlugPage.objects.filter(containers=x)) |
