test_detail.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. from __future__ import unicode_literals
  2. from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
  3. from django.test import TestCase, override_settings
  4. from django.views.generic.base import View
  5. from .models import Artist, Author, Page
  6. @override_settings(ROOT_URLCONF='generic_views.urls')
  7. class DetailViewTest(TestCase):
  8. fixtures = ['generic-views-test-data.json']
  9. def test_simple_object(self):
  10. res = self.client.get('/detail/obj/')
  11. self.assertEqual(res.status_code, 200)
  12. self.assertEqual(res.context['object'], {'foo': 'bar'})
  13. self.assertIsInstance(res.context['view'], View)
  14. self.assertTemplateUsed(res, 'generic_views/detail.html')
  15. def test_detail_by_pk(self):
  16. res = self.client.get('/detail/author/1/')
  17. self.assertEqual(res.status_code, 200)
  18. self.assertEqual(res.context['object'], Author.objects.get(pk=1))
  19. self.assertEqual(res.context['author'], Author.objects.get(pk=1))
  20. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  21. def test_detail_missing_object(self):
  22. res = self.client.get('/detail/author/500/')
  23. self.assertEqual(res.status_code, 404)
  24. def test_detail_object_does_not_exist(self):
  25. self.assertRaises(ObjectDoesNotExist, self.client.get, '/detail/doesnotexist/1/')
  26. def test_detail_by_custom_pk(self):
  27. res = self.client.get('/detail/author/bycustompk/1/')
  28. self.assertEqual(res.status_code, 200)
  29. self.assertEqual(res.context['object'], Author.objects.get(pk=1))
  30. self.assertEqual(res.context['author'], Author.objects.get(pk=1))
  31. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  32. def test_detail_by_slug(self):
  33. res = self.client.get('/detail/author/byslug/scott-rosenberg/')
  34. self.assertEqual(res.status_code, 200)
  35. self.assertEqual(res.context['object'], Author.objects.get(slug='scott-rosenberg'))
  36. self.assertEqual(res.context['author'], Author.objects.get(slug='scott-rosenberg'))
  37. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  38. def test_detail_by_custom_slug(self):
  39. res = self.client.get('/detail/author/bycustomslug/scott-rosenberg/')
  40. self.assertEqual(res.status_code, 200)
  41. self.assertEqual(res.context['object'], Author.objects.get(slug='scott-rosenberg'))
  42. self.assertEqual(res.context['author'], Author.objects.get(slug='scott-rosenberg'))
  43. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  44. def test_detail_by_pk_ignore_slug(self):
  45. author = Author.objects.get(pk=1)
  46. res = self.client.get('/detail/author/bypkignoreslug/1-roberto-bolano/')
  47. self.assertEqual(res.status_code, 200)
  48. self.assertEqual(res.context['object'], author)
  49. self.assertEqual(res.context['author'], author)
  50. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  51. def test_detail_by_pk_ignore_slug_mismatch(self):
  52. author = Author.objects.get(pk=1)
  53. res = self.client.get('/detail/author/bypkignoreslug/1-scott-rosenberg/')
  54. self.assertEqual(res.status_code, 200)
  55. self.assertEqual(res.context['object'], author)
  56. self.assertEqual(res.context['author'], author)
  57. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  58. def test_detail_by_pk_and_slug(self):
  59. author = Author.objects.get(pk=1)
  60. res = self.client.get('/detail/author/bypkandslug/1-roberto-bolano/')
  61. self.assertEqual(res.status_code, 200)
  62. self.assertEqual(res.context['object'], author)
  63. self.assertEqual(res.context['author'], author)
  64. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  65. def test_detail_by_pk_and_slug_mismatch_404(self):
  66. res = self.client.get('/detail/author/bypkandslug/1-scott-rosenberg/')
  67. self.assertEqual(res.status_code, 404)
  68. def test_verbose_name(self):
  69. res = self.client.get('/detail/artist/1/')
  70. self.assertEqual(res.status_code, 200)
  71. self.assertEqual(res.context['object'], Artist.objects.get(pk=1))
  72. self.assertEqual(res.context['artist'], Artist.objects.get(pk=1))
  73. self.assertTemplateUsed(res, 'generic_views/artist_detail.html')
  74. def test_template_name(self):
  75. res = self.client.get('/detail/author/1/template_name/')
  76. self.assertEqual(res.status_code, 200)
  77. self.assertEqual(res.context['object'], Author.objects.get(pk=1))
  78. self.assertEqual(res.context['author'], Author.objects.get(pk=1))
  79. self.assertTemplateUsed(res, 'generic_views/about.html')
  80. def test_template_name_suffix(self):
  81. res = self.client.get('/detail/author/1/template_name_suffix/')
  82. self.assertEqual(res.status_code, 200)
  83. self.assertEqual(res.context['object'], Author.objects.get(pk=1))
  84. self.assertEqual(res.context['author'], Author.objects.get(pk=1))
  85. self.assertTemplateUsed(res, 'generic_views/author_view.html')
  86. def test_template_name_field(self):
  87. res = self.client.get('/detail/page/1/field/')
  88. self.assertEqual(res.status_code, 200)
  89. self.assertEqual(res.context['object'], Page.objects.get(pk=1))
  90. self.assertEqual(res.context['page'], Page.objects.get(pk=1))
  91. self.assertTemplateUsed(res, 'generic_views/page_template.html')
  92. def test_context_object_name(self):
  93. res = self.client.get('/detail/author/1/context_object_name/')
  94. self.assertEqual(res.status_code, 200)
  95. self.assertEqual(res.context['object'], Author.objects.get(pk=1))
  96. self.assertEqual(res.context['thingy'], Author.objects.get(pk=1))
  97. self.assertFalse('author' in res.context)
  98. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  99. def test_duplicated_context_object_name(self):
  100. res = self.client.get('/detail/author/1/dupe_context_object_name/')
  101. self.assertEqual(res.status_code, 200)
  102. self.assertEqual(res.context['object'], Author.objects.get(pk=1))
  103. self.assertFalse('author' in res.context)
  104. self.assertTemplateUsed(res, 'generic_views/author_detail.html')
  105. def test_invalid_url(self):
  106. self.assertRaises(AttributeError, self.client.get, '/detail/author/invalid/url/')
  107. def test_invalid_queryset(self):
  108. self.assertRaises(ImproperlyConfigured, self.client.get, '/detail/author/invalid/qs/')
  109. def test_non_model_object_with_meta(self):
  110. res = self.client.get('/detail/nonmodel/1/')
  111. self.assertEqual(res.status_code, 200)
  112. self.assertEqual(res.context['object'].id, "non_model_1")