tests.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.test import TestCase
  2. from regressiontests.null_fk.models import *
  3. class NullFkTests(TestCase):
  4. def test_null_fk(self):
  5. d = SystemDetails.objects.create(details='First details')
  6. s = SystemInfo.objects.create(system_name='First forum', system_details=d)
  7. f = Forum.objects.create(system_info=s, forum_name='First forum')
  8. p = Post.objects.create(forum=f, title='First Post')
  9. c1 = Comment.objects.create(post=p, comment_text='My first comment')
  10. c2 = Comment.objects.create(comment_text='My second comment')
  11. # Starting from comment, make sure that a .select_related(...) with a specified
  12. # set of fields will properly LEFT JOIN multiple levels of NULLs (and the things
  13. # that come after the NULLs, or else data that should exist won't). Regression
  14. # test for #7369.
  15. c = Comment.objects.select_related().get(id=1)
  16. self.assertEqual(c.post, p)
  17. self.assertEqual(Comment.objects.select_related().get(id=2).post, None)
  18. self.assertQuerysetEqual(
  19. Comment.objects.select_related('post__forum__system_info').all(),
  20. [
  21. (1, u'My first comment', '<Post: First Post>'),
  22. (2, u'My second comment', 'None')
  23. ],
  24. transform = lambda c: (c.id, c.comment_text, repr(c.post))
  25. )
  26. # Regression test for #7530, #7716.
  27. self.assertTrue(Comment.objects.select_related('post').filter(post__isnull=True)[0].post is None)
  28. self.assertQuerysetEqual(
  29. Comment.objects.select_related('post__forum__system_info__system_details'),
  30. [
  31. (1, u'My first comment', '<Post: First Post>'),
  32. (2, u'My second comment', 'None')
  33. ],
  34. transform = lambda c: (c.id, c.comment_text, repr(c.post))
  35. )