test_forms.py 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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.test import TestCase, override_settings
  6. from django.utils import translation
  7. @override_settings(SITE_ID=1)
  8. class FlatpageAdminFormTests(TestCase):
  9. fixtures = ['example_site']
  10. def setUp(self):
  11. self.form_data = {
  12. 'title': "A test page",
  13. 'content': "This is a test",
  14. 'sites': [settings.SITE_ID],
  15. }
  16. def test_flatpage_admin_form_url_validation(self):
  17. "The flatpage admin form correctly validates urls"
  18. self.assertTrue(FlatpageForm(data=dict(url='/new_flatpage/', **self.form_data)).is_valid())
  19. self.assertTrue(FlatpageForm(data=dict(url='/some.special~chars/', **self.form_data)).is_valid())
  20. self.assertTrue(FlatpageForm(data=dict(url='/some.very_special~chars-here/', **self.form_data)).is_valid())
  21. self.assertFalse(FlatpageForm(data=dict(url='/a space/', **self.form_data)).is_valid())
  22. self.assertFalse(FlatpageForm(data=dict(url='/a % char/', **self.form_data)).is_valid())
  23. self.assertFalse(FlatpageForm(data=dict(url='/a ! char/', **self.form_data)).is_valid())
  24. self.assertFalse(FlatpageForm(data=dict(url='/a & char/', **self.form_data)).is_valid())
  25. self.assertFalse(FlatpageForm(data=dict(url='/a ? char/', **self.form_data)).is_valid())
  26. def test_flatpage_requires_leading_slash(self):
  27. form = FlatpageForm(data=dict(url='no_leading_slash/', **self.form_data))
  28. with translation.override('en'):
  29. self.assertFalse(form.is_valid())
  30. self.assertEqual(form.errors['url'], ["URL is missing a leading slash."])
  31. @override_settings(APPEND_SLASH=True,
  32. MIDDLEWARE_CLASSES=('django.middleware.common.CommonMiddleware',))
  33. def test_flatpage_requires_trailing_slash_with_append_slash(self):
  34. form = FlatpageForm(data=dict(url='/no_trailing_slash', **self.form_data))
  35. with translation.override('en'):
  36. self.assertFalse(form.is_valid())
  37. self.assertEqual(form.errors['url'], ["URL is missing a trailing slash."])
  38. @override_settings(APPEND_SLASH=False,
  39. MIDDLEWARE_CLASSES=('django.middleware.common.CommonMiddleware',))
  40. def test_flatpage_doesnt_requires_trailing_slash_without_append_slash(self):
  41. form = FlatpageForm(data=dict(url='/no_trailing_slash', **self.form_data))
  42. self.assertTrue(form.is_valid())
  43. def test_flatpage_admin_form_url_uniqueness_validation(self):
  44. "The flatpage admin form correctly enforces url uniqueness among flatpages of the same site"
  45. data = dict(url='/myflatpage1/', **self.form_data)
  46. FlatpageForm(data=data).save()
  47. f = FlatpageForm(data=data)
  48. with translation.override('en'):
  49. self.assertFalse(f.is_valid())
  50. self.assertEqual(
  51. f.errors,
  52. {'__all__': ['Flatpage with url /myflatpage1/ already exists for site example.com']})
  53. def test_flatpage_admin_form_edit(self):
  54. """
  55. Existing flatpages can be edited in the admin form without triggering
  56. the url-uniqueness validation.
  57. """
  58. existing = FlatPage.objects.create(
  59. url="/myflatpage1/", title="Some page", content="The content")
  60. existing.sites.add(settings.SITE_ID)
  61. data = dict(url='/myflatpage1/', **self.form_data)
  62. f = FlatpageForm(data=data, instance=existing)
  63. self.assertTrue(f.is_valid(), f.errors)
  64. updated = f.save()
  65. self.assertEqual(updated.title, "A test page")
  66. def test_flatpage_nosites(self):
  67. data = dict(url='/myflatpage1/', **self.form_data)
  68. data.update({'sites': ''})
  69. f = FlatpageForm(data=data)
  70. self.assertFalse(f.is_valid())
  71. self.assertEqual(
  72. f.errors,
  73. {'sites': [translation.ugettext('This field is required.')]})