test_views.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from django.conf import settings
  2. from django.contrib.auth.models import User
  3. from django.contrib.flatpages.models import FlatPage
  4. from django.test import TestCase, modify_settings, override_settings
  5. from .settings import FLATPAGES_TEMPLATES
  6. @modify_settings(INSTALLED_APPS={'append': 'django.contrib.flatpages'})
  7. @override_settings(
  8. LOGIN_URL='/accounts/login/',
  9. MIDDLEWARE_CLASSES=[
  10. 'django.middleware.common.CommonMiddleware',
  11. 'django.contrib.sessions.middleware.SessionMiddleware',
  12. 'django.middleware.csrf.CsrfViewMiddleware',
  13. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  14. 'django.contrib.messages.middleware.MessageMiddleware',
  15. # no 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
  16. ],
  17. ROOT_URLCONF='flatpages_tests.urls',
  18. TEMPLATES=FLATPAGES_TEMPLATES,
  19. SITE_ID=1,
  20. )
  21. class FlatpageViewTests(TestCase):
  22. fixtures = ['sample_flatpages', 'example_site']
  23. def test_view_flatpage(self):
  24. "A flatpage can be served through a view"
  25. response = self.client.get('/flatpage_root/flatpage/')
  26. self.assertEqual(response.status_code, 200)
  27. self.assertContains(response, "<p>Isn't it flat!</p>")
  28. def test_view_non_existent_flatpage(self):
  29. "A non-existent flatpage raises 404 when served through a view"
  30. response = self.client.get('/flatpage_root/no_such_flatpage/')
  31. self.assertEqual(response.status_code, 404)
  32. def test_view_authenticated_flatpage(self):
  33. "A flatpage served through a view can require authentication"
  34. response = self.client.get('/flatpage_root/sekrit/')
  35. self.assertRedirects(response, '/accounts/login/?next=/flatpage_root/sekrit/')
  36. User.objects.create_user('testuser', 'test@example.com', 's3krit')
  37. self.client.login(username='testuser', password='s3krit')
  38. response = self.client.get('/flatpage_root/sekrit/')
  39. self.assertEqual(response.status_code, 200)
  40. self.assertContains(response, "<p>Isn't it sekrit!</p>")
  41. def test_fallback_flatpage(self):
  42. "A fallback flatpage won't be served if the middleware is disabled"
  43. response = self.client.get('/flatpage/')
  44. self.assertEqual(response.status_code, 404)
  45. def test_fallback_non_existent_flatpage(self):
  46. "A non-existent flatpage won't be served if the fallback middleware is disabled"
  47. response = self.client.get('/no_such_flatpage/')
  48. self.assertEqual(response.status_code, 404)
  49. def test_view_flatpage_special_chars(self):
  50. "A flatpage with special chars in the URL can be served through a view"
  51. fp = FlatPage.objects.create(
  52. url="/some.very_special~chars-here/",
  53. title="A very special page",
  54. content="Isn't it special!",
  55. enable_comments=False,
  56. registration_required=False,
  57. )
  58. fp.sites.add(settings.SITE_ID)
  59. response = self.client.get('/flatpage_root/some.very_special~chars-here/')
  60. self.assertEqual(response.status_code, 200)
  61. self.assertContains(response, "<p>Isn't it special!</p>")
  62. @modify_settings(INSTALLED_APPS={'append': 'django.contrib.flatpages'})
  63. @override_settings(
  64. APPEND_SLASH=True,
  65. LOGIN_URL='/accounts/login/',
  66. MIDDLEWARE_CLASSES=[
  67. 'django.middleware.common.CommonMiddleware',
  68. 'django.contrib.sessions.middleware.SessionMiddleware',
  69. 'django.middleware.csrf.CsrfViewMiddleware',
  70. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  71. 'django.contrib.messages.middleware.MessageMiddleware',
  72. # no 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
  73. ],
  74. ROOT_URLCONF='flatpages_tests.urls',
  75. TEMPLATES=FLATPAGES_TEMPLATES,
  76. SITE_ID=1,
  77. )
  78. class FlatpageViewAppendSlashTests(TestCase):
  79. fixtures = ['sample_flatpages', 'example_site']
  80. def test_redirect_view_flatpage(self):
  81. "A flatpage can be served through a view and should add a slash"
  82. response = self.client.get('/flatpage_root/flatpage')
  83. self.assertRedirects(response, '/flatpage_root/flatpage/', status_code=301)
  84. def test_redirect_view_non_existent_flatpage(self):
  85. "A non-existent flatpage raises 404 when served through a view and should not add a slash"
  86. response = self.client.get('/flatpage_root/no_such_flatpage')
  87. self.assertEqual(response.status_code, 404)
  88. def test_redirect_fallback_flatpage(self):
  89. "A fallback flatpage won't be served if the middleware is disabled and should not add a slash"
  90. response = self.client.get('/flatpage')
  91. self.assertEqual(response.status_code, 404)
  92. def test_redirect_fallback_non_existent_flatpage(self):
  93. "A non-existent flatpage won't be served if the fallback middleware is disabled and should not add a slash"
  94. response = self.client.get('/no_such_flatpage')
  95. self.assertEqual(response.status_code, 404)
  96. def test_redirect_view_flatpage_special_chars(self):
  97. "A flatpage with special chars in the URL can be served through a view and should add a slash"
  98. fp = FlatPage.objects.create(
  99. url="/some.very_special~chars-here/",
  100. title="A very special page",
  101. content="Isn't it special!",
  102. enable_comments=False,
  103. registration_required=False,
  104. )
  105. fp.sites.add(settings.SITE_ID)
  106. response = self.client.get('/flatpage_root/some.very_special~chars-here')
  107. self.assertRedirects(response, '/flatpage_root/some.very_special~chars-here/', status_code=301)