| from __future__ import with_statement |
| |
| from django.conf import settings |
| from django.contrib.flatpages.forms import FlatpageForm |
| from django.contrib.flatpages.models import FlatPage |
| from django.test import TestCase |
| from django.test.utils import override_settings |
| from django.utils import translation |
| |
| class FlatpageAdminFormTests(TestCase): |
| def setUp(self): |
| self.form_data = { |
| 'title': "A test page", |
| 'content': "This is a test", |
| 'sites': [settings.SITE_ID], |
| } |
| |
| def test_flatpage_admin_form_url_validation(self): |
| "The flatpage admin form correctly validates urls" |
| self.assertTrue(FlatpageForm(data=dict(url='/new_flatpage/', **self.form_data)).is_valid()) |
| self.assertTrue(FlatpageForm(data=dict(url='/some.special~chars/', **self.form_data)).is_valid()) |
| self.assertTrue(FlatpageForm(data=dict(url='/some.very_special~chars-here/', **self.form_data)).is_valid()) |
| |
| self.assertFalse(FlatpageForm(data=dict(url='/a space/', **self.form_data)).is_valid()) |
| self.assertFalse(FlatpageForm(data=dict(url='/a % char/', **self.form_data)).is_valid()) |
| self.assertFalse(FlatpageForm(data=dict(url='/a ! char/', **self.form_data)).is_valid()) |
| self.assertFalse(FlatpageForm(data=dict(url='/a & char/', **self.form_data)).is_valid()) |
| self.assertFalse(FlatpageForm(data=dict(url='/a ? char/', **self.form_data)).is_valid()) |
| |
| def test_flatpage_requires_leading_slash(self): |
| form = FlatpageForm(data=dict(url='no_leading_slash/', **self.form_data)) |
| with translation.override('en'): |
| self.assertFalse(form.is_valid()) |
| self.assertEqual(form.errors['url'], ["URL is missing a leading slash."]) |
| |
| @override_settings(APPEND_SLASH=True, |
| MIDDLEWARE_CLASSES=('django.middleware.common.CommonMiddleware',)) |
| def test_flatpage_requires_trailing_slash_with_append_slash(self): |
| form = FlatpageForm(data=dict(url='/no_trailing_slash', **self.form_data)) |
| with translation.override('en'): |
| self.assertFalse(form.is_valid()) |
| self.assertEqual(form.errors['url'], ["URL is missing a trailing slash."]) |
| |
| @override_settings(APPEND_SLASH=False, |
| MIDDLEWARE_CLASSES=('django.middleware.common.CommonMiddleware',)) |
| def test_flatpage_doesnt_requires_trailing_slash_without_append_slash(self): |
| form = FlatpageForm(data=dict(url='/no_trailing_slash', **self.form_data)) |
| self.assertTrue(form.is_valid()) |
| |
| def test_flatpage_admin_form_url_uniqueness_validation(self): |
| "The flatpage admin form correctly enforces url uniqueness among flatpages of the same site" |
| data = dict(url='/myflatpage1/', **self.form_data) |
| |
| FlatpageForm(data=data).save() |
| |
| f = FlatpageForm(data=data) |
| |
| self.assertFalse(f.is_valid()) |
| |
| self.assertEqual( |
| f.errors, |
| {'__all__': [u'Flatpage with url /myflatpage1/ already exists for site example.com']}) |
| |
| def test_flatpage_admin_form_edit(self): |
| """ |
| Existing flatpages can be edited in the admin form without triggering |
| the url-uniqueness validation. |
| |
| """ |
| existing = FlatPage.objects.create( |
| url="/myflatpage1/", title="Some page", content="The content") |
| existing.sites.add(settings.SITE_ID) |
| |
| data = dict(url='/myflatpage1/', **self.form_data) |
| |
| f = FlatpageForm(data=data, instance=existing) |
| |
| self.assertTrue(f.is_valid(), f.errors) |
| |
| updated = f.save() |
| |
| self.assertEqual(updated.title, "A test page") |