您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

test_page.py 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. from django.contrib.flatpages.models import FlatPage
  2. from django.test import TestCase
  3. from django.urls import reverse
  4. from oscar.apps.dashboard.pages.forms import PageUpdateForm
  5. from oscar.test.testcases import WebTestCase
  6. class TestPageDashboard(WebTestCase):
  7. is_anonymous = False
  8. is_staff = True
  9. def setUp(self):
  10. self.flatpage_1 = FlatPage.objects.create(
  11. title='title1', url='/url1/',
  12. content='some content')
  13. self.flatpage_2 = FlatPage.objects.create(
  14. title='title2', url='/url2/',
  15. content='other content')
  16. super().setUp()
  17. def test_dashboard_index_is_for_staff_only(self):
  18. response = self.get(reverse('dashboard:page-list'))
  19. self.assertTrue('Password' not in response.content.decode('utf8'))
  20. def test_dashboard_page_list(self):
  21. response = self.get(reverse('dashboard:page-list'))
  22. objects = response.context[-1]['object_list']
  23. self.assertTrue(self.flatpage_1 in objects)
  24. self.assertTrue(self.flatpage_2 in objects)
  25. def test_dashboard_delete_pages(self):
  26. page = self.get(reverse('dashboard:page-list'))
  27. delete_page = page.click(linkid="delete_page_%s" % self.flatpage_1.id)
  28. response = delete_page.form.submit()
  29. self.assertIsRedirect(response)
  30. self.assertEqual(FlatPage.objects.count(), 1)
  31. def test_dashboard_create_page_with_slugified_url(self):
  32. page = self.get(reverse('dashboard:page-create'))
  33. form = page.form
  34. form['title'] = 'test'
  35. form['content'] = 'my content here'
  36. response = form.submit()
  37. self.assertIsRedirect(response)
  38. def test_dashboard_create_page_with_duplicate_slugified_url_fails(self):
  39. page = self.get(reverse('dashboard:page-create'))
  40. form = page.form
  41. form['title'] = 'url1' # This will slugify to url1
  42. form['content'] = 'my content here'
  43. response = form.submit()
  44. self.assertEqual(200, response.status_code)
  45. def test_default_site_added_for_new_pages(self):
  46. page = self.get(reverse('dashboard:page-create'))
  47. form = page.form
  48. form['title'] = 'test'
  49. form['url'] = '/hello-world/'
  50. form.submit()
  51. p = FlatPage.objects.get(url='/hello-world/')
  52. self.assertEqual(p.sites.count(), 1)
  53. class DashboardPageUpdateFormTestCase(TestCase):
  54. def setUp(self):
  55. self.flatpage_1 = FlatPage.objects.create(
  56. title='title1', url='/url1/',
  57. content='some content')
  58. self.flatpage_2 = FlatPage.objects.create(
  59. title='title2', url='/url2/',
  60. content='other content')
  61. def test_doesnt_allow_existing_pages_to_be_clobbered(self):
  62. form = PageUpdateForm(data={
  63. 'title': 'test',
  64. 'url': '/dashboard/pages/',
  65. })
  66. self.assertFalse(form.is_valid())
  67. self.assertEqual(
  68. form.errors['url'],
  69. ['Specified page already exists!']
  70. )
  71. def test_allows_page_to_be_created(self):
  72. form = PageUpdateForm(data={
  73. 'title': 'test',
  74. 'url': '/my-new-url/',
  75. 'content': 'my content here'
  76. })
  77. self.assertTrue(form.is_valid())
  78. form.save()
  79. self.assertEqual(FlatPage.objects.count(), 3)
  80. def test_create_page_with_slugified_url(self):
  81. form = PageUpdateForm(data={
  82. 'title': 'test',
  83. 'content': 'my content here'
  84. })
  85. self.assertTrue(form.is_valid())
  86. form.save()
  87. self.assertEqual(FlatPage.objects.count(), 3)
  88. def test_create_page_with_existing_url_does_not_work(self):
  89. form = PageUpdateForm(data={
  90. 'title': 'test',
  91. 'url': '/url1/', # already exists
  92. 'content': 'my content here'
  93. })
  94. self.assertFalse(form.is_valid())
  95. self.assertEqual(
  96. form.errors['url'],
  97. ['Specified page already exists!']
  98. )
  99. def test_update_page_valid_url(self):
  100. form = PageUpdateForm(instance=self.flatpage_1, data={
  101. 'title': 'test',
  102. 'url': '/new/url/',
  103. 'content': 'my content here'
  104. })
  105. form.save()
  106. self.flatpage_1.refresh_from_db()
  107. page = self.flatpage_1
  108. self.assertEqual(page.title, 'test')
  109. self.assertEqual(page.url, '/new/url/')
  110. self.assertEqual(page.content, "my content here")
  111. def test_invalid_chars_in_url(self):
  112. form = PageUpdateForm(data={
  113. 'url': '/%* /',
  114. 'title': 'Title',
  115. 'content': 'Content',
  116. })
  117. self.assertFalse(form.is_valid())
  118. self.assertEqual(
  119. form.errors['url'],
  120. ['This value must contain only letters, numbers, dots, underscores, dashes, slashes or tildes.']
  121. )
  122. def test_invalid_url_length(self):
  123. form = PageUpdateForm(data={
  124. 'url': '/this_url_is_more_than_100_characters_long_which_is_invalid'
  125. '_because_the_model_field_has_a_max_length_of_100',
  126. 'title': 'Title',
  127. 'content': 'Content',
  128. })
  129. self.assertFalse(form.is_valid())
  130. self.assertEqual(
  131. form.errors['url'],
  132. ['Ensure this value has at most 100 characters (it has 107).']
  133. )