test_forms.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. from __future__ import unicode_literals
  2. from django.conf import settings
  3. from django.contrib.flatpages.forms import FlatpageForm
  4. from django.contrib.flatpages.models import FlatPage
  5. from django.contrib.sites.models import Site
  6. from django.test import TestCase, modify_settings, override_settings
  7. from django.utils import translation
  8. @modify_settings(INSTALLED_APPS={'append': ['django.contrib.flatpages', ]})
  9. @override_settings(SITE_ID=1)
  10. class FlatpageAdminFormTests(TestCase):
  11. @classmethod
  12. def setUpTestData(cls):
  13. # don't use the manager because we want to ensure the site exists
  14. # with pk=1, regardless of whether or not it already exists.
  15. cls.site1 = Site(pk=1, domain='example.com', name='example.com')
  16. cls.site1.save()
  17. def setUp(self):
  18. # Site fields cache needs to be cleared after flatpages is added to
  19. # INSTALLED_APPS
  20. Site._meta._expire_cache()
  21. self.form_data = {
  22. 'title': "A test page",
  23. 'content': "This is a test",
  24. 'sites': [settings.SITE_ID],
  25. }
  26. def test_flatpage_admin_form_url_validation(self):
  27. "The flatpage admin form correctly validates urls"
  28. self.assertTrue(FlatpageForm(data=dict(url='/new_flatpage/', **self.form_data)).is_valid())
  29. self.assertTrue(FlatpageForm(data=dict(url='/some.special~chars/', **self.form_data)).is_valid())
  30. self.assertTrue(FlatpageForm(data=dict(url='/some.very_special~chars-here/', **self.form_data)).is_valid())
  31. self.assertFalse(FlatpageForm(data=dict(url='/a space/', **self.form_data)).is_valid())
  32. self.assertFalse(FlatpageForm(data=dict(url='/a % char/', **self.form_data)).is_valid())
  33. self.assertFalse(FlatpageForm(data=dict(url='/a ! char/', **self.form_data)).is_valid())
  34. self.assertFalse(FlatpageForm(data=dict(url='/a & char/', **self.form_data)).is_valid())
  35. self.assertFalse(FlatpageForm(data=dict(url='/a ? char/', **self.form_data)).is_valid())
  36. def test_flatpage_requires_leading_slash(self):
  37. form = FlatpageForm(data=dict(url='no_leading_slash/', **self.form_data))
  38. with translation.override('en'):
  39. self.assertFalse(form.is_valid())
  40. self.assertEqual(form.errors['url'], ["URL is missing a leading slash."])
  41. @override_settings(APPEND_SLASH=True, MIDDLEWARE=['django.middleware.common.CommonMiddleware'])
  42. def test_flatpage_requires_trailing_slash_with_append_slash(self):
  43. form = FlatpageForm(data=dict(url='/no_trailing_slash', **self.form_data))
  44. with translation.override('en'):
  45. self.assertFalse(form.is_valid())
  46. self.assertEqual(form.errors['url'], ["URL is missing a trailing slash."])
  47. @override_settings(APPEND_SLASH=False, MIDDLEWARE=['django.middleware.common.CommonMiddleware'])
  48. def test_flatpage_doesnt_requires_trailing_slash_without_append_slash(self):
  49. form = FlatpageForm(data=dict(url='/no_trailing_slash', **self.form_data))
  50. self.assertTrue(form.is_valid())
  51. def test_flatpage_admin_form_url_uniqueness_validation(self):
  52. "The flatpage admin form correctly enforces url uniqueness among flatpages of the same site"
  53. data = dict(url='/myflatpage1/', **self.form_data)
  54. FlatpageForm(data=data).save()
  55. f = FlatpageForm(data=data)
  56. with translation.override('en'):
  57. self.assertFalse(f.is_valid())
  58. self.assertEqual(
  59. f.errors,
  60. {'__all__': ['Flatpage with url /myflatpage1/ already exists for site example.com']})
  61. def test_flatpage_admin_form_edit(self):
  62. """
  63. Existing flatpages can be edited in the admin form without triggering
  64. the url-uniqueness validation.
  65. """
  66. existing = FlatPage.objects.create(
  67. url="/myflatpage1/", title="Some page", content="The content")
  68. existing.sites.add(settings.SITE_ID)
  69. data = dict(url='/myflatpage1/', **self.form_data)
  70. f = FlatpageForm(data=data, instance=existing)
  71. self.assertTrue(f.is_valid(), f.errors)
  72. updated = f.save()
  73. self.assertEqual(updated.title, "A test page")
  74. def test_flatpage_nosites(self):
  75. data = dict(url='/myflatpage1/', **self.form_data)
  76. data.update({'sites': ''})
  77. f = FlatpageForm(data=data)
  78. self.assertFalse(f.is_valid())
  79. self.assertEqual(
  80. f.errors,
  81. {'sites': [translation.ugettext('This field is required.')]})