mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.test import TestCase
 | |
| 
 | |
| from .models import SlugPage
 | |
| 
 | |
| 
 | |
| class RestrictedConditionsTests(TestCase):
 | |
|     @classmethod
 | |
|     def setUpTestData(cls):
 | |
|         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):
 | |
|         """
 | |
|         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.assertEqual(
 | |
|             [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.assertEqual(
 | |
|             [p.slug for p in SlugPage.objects.filter(descendants__in=[aba])],
 | |
|             ["a", "a/b", "a/b/a"],
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             [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))
 |