PageRenderTime 67ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/views/test_pages.py

https://gitlab.com/BeyondeLabs/kanisa
Python | 182 lines | 135 code | 39 blank | 8 comment | 3 complexity | b74b65e73a6faa1267dc7a5778228180 MD5 | raw file
  1. from django.core.urlresolvers import reverse
  2. from django.test import TestCase
  3. from django.test.utils import override_settings
  4. from kanisa.models import Page
  5. from tests.utils import KanisaViewTestCase
  6. import factory
  7. class PageFactory(factory.DjangoModelFactory):
  8. title = 'Page Title'
  9. class Meta:
  10. model = Page
  11. class PageManagementViewTest(KanisaViewTestCase):
  12. def test_views_protected(self):
  13. self.view_is_restricted(reverse('kanisa_manage_pages'))
  14. self.view_is_restricted(reverse('kanisa_manage_pages_create'))
  15. # This would 404 if you were logged in
  16. self.view_is_restricted(reverse('kanisa_manage_pages_update',
  17. args=[1, ]))
  18. def test_index_view(self):
  19. self.client.login(username='fred', password='secret')
  20. resp = self.client.get(reverse('kanisa_manage_pages'))
  21. self.assertEqual(resp.status_code, 200)
  22. self.assertTemplateUsed(resp, 'kanisa/management/pages/index.html')
  23. self.client.logout()
  24. def test_create_page_view(self):
  25. self.client.login(username='fred', password='secret')
  26. url = reverse('kanisa_manage_pages_create')
  27. resp = self.client.get(url)
  28. self.assertEqual(resp.status_code, 200)
  29. self.assertTemplateUsed(resp, 'kanisa/management/create.html')
  30. # Should 404 with an invalid ID
  31. resp = self.client.get(url + '?parent=foo')
  32. self.assertEqual(resp.status_code, 404)
  33. # Should 404 with a valid ID, which is non-existent
  34. resp = self.client.get(url + '?parent=99')
  35. self.assertEqual(resp.status_code, 404)
  36. pk = PageFactory.create().pk
  37. resp = self.client.get(url + '?parent=%s' % pk)
  38. self.assertEqual(resp.status_code, 200)
  39. self.assertEqual(resp.context['form'].initial['parent'].pk, 1)
  40. resp = self.client.post(url, {'title': "Test page"},
  41. follow=True)
  42. self.assertEqual(resp.status_code, 200)
  43. self.assertTrue('messages' in resp.context)
  44. self.assertEqual([m.message for m in resp.context['messages']],
  45. [u'Page "Test page" created.', ])
  46. self.client.logout()
  47. def test_delete_page_view(self):
  48. parent_page = PageFactory.create(title="About Us")
  49. child_page = PageFactory.create(parent=parent_page,
  50. title="Staff")
  51. child_page2 = PageFactory.create(parent=parent_page,
  52. title="Location")
  53. self.client.login(username='fred', password='secret')
  54. # Can't delete pages which aren't root nodes - getting the
  55. # confirmation page should 404.
  56. resp = self.client.get(reverse('kanisa_manage_pages_delete',
  57. args=[parent_page.pk, ]))
  58. self.assertEqual(resp.status_code, 404)
  59. # So should running the actual delete.
  60. resp = self.client.post(reverse('kanisa_manage_pages_delete',
  61. args=[1, ]),
  62. {})
  63. self.assertEqual(resp.status_code, 404)
  64. resp = self.client.get(reverse('kanisa_manage_pages_delete',
  65. args=[child_page.pk, ]))
  66. self.assertEqual(resp.status_code, 200)
  67. resp = self.client.post(reverse('kanisa_manage_pages_delete',
  68. args=[child_page.pk, ]),
  69. {},
  70. follow=True)
  71. self.assertEqual(resp.status_code, 200)
  72. self.assertTrue('messages' in resp.context)
  73. self.assertEqual([m.message for m in resp.context['messages']],
  74. [u'Staff deleted.', ])
  75. resp = self.client.post(reverse('kanisa_manage_pages_delete',
  76. args=[child_page2.pk, ]),
  77. {},
  78. HTTP_X_REQUESTED_WITH='XMLHttpRequest')
  79. self.assertEqual(resp.status_code, 200)
  80. self.assertEqual(resp.content, '"Location" deleted')
  81. self.client.logout()
  82. def test_update_page_view(self):
  83. parent_page = PageFactory.create(title="About Us")
  84. child_page = PageFactory.create(title="Child page",
  85. parent=parent_page)
  86. self.client.login(username='fred', password='secret')
  87. p = Page.objects.get(pk=parent_page.pk)
  88. url = reverse('kanisa_manage_pages_update', args=[1, ])
  89. resp = self.client.get(url)
  90. self.assertEqual(resp.status_code, 200)
  91. resp = self.client.post(url, {'title': p.title,
  92. 'contents': p.contents},
  93. follow=True)
  94. self.assertEqual(resp.status_code, 200)
  95. self.assertTrue('messages' in resp.context)
  96. self.assertEqual([m.message for m in resp.context['messages']],
  97. [u'Page "%s" saved.' % p.title, ])
  98. # Pages cannot be their own parents
  99. resp = self.client.post(url, {'title': p.title,
  100. 'contents': p.contents,
  101. 'parent': p.pk})
  102. self.assertEqual(resp.status_code, 200)
  103. self.assertFormError(resp, 'form', 'parent',
  104. 'A page cannot be its own parent.')
  105. # Pages cannot have their descendants as their parent
  106. resp = self.client.post(url, {'title': p.title,
  107. 'contents': p.contents,
  108. 'parent': child_page.pk})
  109. self.assertEqual(resp.status_code, 200)
  110. self.assertFormError(resp, 'form', 'parent',
  111. 'Invalid parent - cyclical hierarchy detected.')
  112. url = reverse('kanisa_manage_pages_update', args=[child_page.pk, ])
  113. resp = self.client.post(url, {'title': child_page.title,
  114. 'contents': child_page.contents,
  115. 'parent': parent_page.pk})
  116. self.assertEqual(resp.status_code, 302)
  117. self.client.logout()
  118. class PagePublicViewTest(TestCase):
  119. @override_settings(APPEND_SLASH=True)
  120. def test_root_view_without_trailing_slash_append_slash_on(self):
  121. PageFactory.create(title="About Us")
  122. response = self.client.get('/about-us')
  123. self.assertRedirects(response, '/about-us/', 301)
  124. @override_settings(APPEND_SLASH=False)
  125. def test_root_view_without_trailing_slash_append_slash_off(self):
  126. PageFactory.create(title="About Us")
  127. response = self.client.get('/about-us')
  128. self.assertEqual(response.status_code, 404)
  129. def test_root_view_with_trailing_slash(self):
  130. parent_page = PageFactory.create(title="About Us")
  131. response = self.client.get('/about-us/')
  132. self.assertEqual(response.status_code, 200)
  133. self.assertEqual(response.context['page'], parent_page)
  134. def test_child_view(self):
  135. parent_page = PageFactory.create(title="About Us")
  136. child_page = PageFactory.create(title="Staff", parent=parent_page)
  137. response = self.client.get('/about-us/staff/')
  138. self.assertEqual(response.status_code, 200)
  139. self.assertEqual(response.context['page'], child_page)
  140. def test_non_existent_page(self):
  141. PageFactory.create(title="About Us")
  142. response = self.client.get('/about-uss/')
  143. self.assertEqual(response.status_code, 404)