2011-03-09 23:46:28 +00:00
|
|
|
from django.conf import settings
|
2011-10-07 15:45:52 +00:00
|
|
|
from django.contrib.flatpages.forms import FlatpageForm
|
2011-10-17 00:56:32 +00:00
|
|
|
from django.contrib.flatpages.models import FlatPage
|
2015-02-10 00:20:39 +00:00
|
|
|
from django.contrib.sites.models import Site
|
|
|
|
from django.test import TestCase, modify_settings, override_settings
|
2012-01-28 20:27:23 +00:00
|
|
|
from django.utils import translation
|
2010-08-28 12:25:54 +00:00
|
|
|
|
2013-10-31 15:42:28 +00:00
|
|
|
|
2017-12-28 20:07:29 +00:00
|
|
|
@modify_settings(INSTALLED_APPS={"append": ["django.contrib.flatpages"]})
|
2012-05-10 21:09:29 +00:00
|
|
|
@override_settings(SITE_ID=1)
|
2010-08-28 12:25:54 +00:00
|
|
|
class FlatpageAdminFormTests(TestCase):
|
2015-02-23 00:53:57 +00:00
|
|
|
@classmethod
|
|
|
|
def setUpTestData(cls):
|
|
|
|
# don't use the manager because we want to ensure the site exists
|
|
|
|
# with pk=1, regardless of whether or not it already exists.
|
|
|
|
cls.site1 = Site(pk=1, domain="example.com", name="example.com")
|
|
|
|
cls.site1.save()
|
2012-05-10 21:09:29 +00:00
|
|
|
|
2010-08-28 12:25:54 +00:00
|
|
|
def setUp(self):
|
2015-02-10 00:20:39 +00:00
|
|
|
# Site fields cache needs to be cleared after flatpages is added to
|
|
|
|
# INSTALLED_APPS
|
|
|
|
Site._meta._expire_cache()
|
2010-08-28 12:25:54 +00:00
|
|
|
self.form_data = {
|
|
|
|
"title": "A test page",
|
|
|
|
"content": "This is a test",
|
2011-03-09 23:46:28 +00:00
|
|
|
"sites": [settings.SITE_ID],
|
2010-08-28 12:25:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
def test_flatpage_admin_form_url_validation(self):
|
2011-10-07 15:45:52 +00:00
|
|
|
"The flatpage admin form correctly validates urls"
|
2010-08-28 12:25:54 +00:00
|
|
|
self.assertTrue(
|
|
|
|
FlatpageForm(data=dict(url="/new_flatpage/", **self.form_data)).is_valid()
|
2022-02-03 19:24:19 +00:00
|
|
|
)
|
2010-08-28 12:25:54 +00:00
|
|
|
self.assertTrue(
|
|
|
|
FlatpageForm(
|
|
|
|
data=dict(url="/some.special~chars/", **self.form_data)
|
|
|
|
).is_valid()
|
2022-02-03 19:24:19 +00:00
|
|
|
)
|
2010-08-28 12:25:54 +00:00
|
|
|
self.assertTrue(
|
|
|
|
FlatpageForm(
|
|
|
|
data=dict(url="/some.very_special~chars-here/", **self.form_data)
|
2012-01-28 20:27:23 +00:00
|
|
|
).is_valid()
|
2022-02-03 19:24:19 +00:00
|
|
|
)
|
|
|
|
|
2010-08-28 12:25:54 +00:00
|
|
|
self.assertFalse(
|
|
|
|
FlatpageForm(data=dict(url="/a space/", **self.form_data)).is_valid()
|
2022-02-03 19:24:19 +00:00
|
|
|
)
|
2010-08-28 12:25:54 +00:00
|
|
|
self.assertFalse(
|
|
|
|
FlatpageForm(data=dict(url="/a % char/", **self.form_data)).is_valid()
|
2022-02-03 19:24:19 +00:00
|
|
|
)
|
2010-08-28 12:25:54 +00:00
|
|
|
self.assertFalse(
|
|
|
|
FlatpageForm(data=dict(url="/a ! char/", **self.form_data)).is_valid()
|
2022-02-03 19:24:19 +00:00
|
|
|
)
|
2010-08-28 12:25:54 +00:00
|
|
|
self.assertFalse(
|
|
|
|
FlatpageForm(data=dict(url="/a & char/", **self.form_data)).is_valid()
|
2022-02-03 19:24:19 +00:00
|
|
|
)
|
2010-08-28 12:25:54 +00:00
|
|
|
self.assertFalse(
|
|
|
|
FlatpageForm(data=dict(url="/a ? char/", **self.form_data)).is_valid()
|
2022-02-03 19:24:19 +00:00
|
|
|
)
|
2011-10-07 15:45:52 +00:00
|
|
|
|
2012-01-28 20:27:23 +00:00
|
|
|
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."])
|
|
|
|
|
2015-11-07 15:12:37 +00:00
|
|
|
@override_settings(
|
|
|
|
APPEND_SLASH=True, MIDDLEWARE=["django.middleware.common.CommonMiddleware"]
|
|
|
|
)
|
2012-01-28 20:27:23 +00:00
|
|
|
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"):
|
2018-09-09 11:35:44 +00:00
|
|
|
self.assertEqual(
|
|
|
|
form.fields["url"].help_text,
|
2019-06-27 16:39:47 +00:00
|
|
|
"Example: “/about/contact/”. Make sure to have leading and "
|
|
|
|
"trailing slashes.",
|
2018-09-09 11:35:44 +00:00
|
|
|
)
|
2012-01-28 20:27:23 +00:00
|
|
|
self.assertFalse(form.is_valid())
|
|
|
|
self.assertEqual(form.errors["url"], ["URL is missing a trailing slash."])
|
|
|
|
|
2015-11-07 15:12:37 +00:00
|
|
|
@override_settings(
|
|
|
|
APPEND_SLASH=False, MIDDLEWARE=["django.middleware.common.CommonMiddleware"]
|
|
|
|
)
|
2012-01-28 20:27:23 +00:00
|
|
|
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())
|
2018-09-09 11:35:44 +00:00
|
|
|
with translation.override("en"):
|
|
|
|
self.assertEqual(
|
|
|
|
form.fields["url"].help_text,
|
2019-06-27 16:39:47 +00:00
|
|
|
"Example: “/about/contact”. Make sure to have a leading slash.",
|
2018-09-09 11:35:44 +00:00
|
|
|
)
|
2012-01-28 20:27:23 +00:00
|
|
|
|
2011-10-07 15:45:52 +00:00
|
|
|
def test_flatpage_admin_form_url_uniqueness_validation(self):
|
|
|
|
"""
|
|
|
|
The flatpage admin form correctly enforces url uniqueness among
|
|
|
|
flatpages of the same site.
|
2022-02-04 07:08:27 +00:00
|
|
|
"""
|
2012-01-28 20:27:23 +00:00
|
|
|
data = dict(url="/myflatpage1/", **self.form_data)
|
2011-10-07 15:45:52 +00:00
|
|
|
|
|
|
|
FlatpageForm(data=data).save()
|
|
|
|
|
|
|
|
f = FlatpageForm(data=data)
|
|
|
|
|
2013-03-23 15:15:10 +00:00
|
|
|
with translation.override("en"):
|
|
|
|
self.assertFalse(f.is_valid())
|
2011-10-07 15:45:52 +00:00
|
|
|
|
2013-03-23 15:15:10 +00:00
|
|
|
self.assertEqual(
|
|
|
|
f.errors,
|
|
|
|
{
|
|
|
|
"__all__": [
|
|
|
|
"Flatpage with url /myflatpage1/ already exists for site "
|
|
|
|
"example.com"
|
2022-02-03 19:24:19 +00:00
|
|
|
]
|
|
|
|
},
|
2013-03-23 15:15:10 +00:00
|
|
|
)
|
2011-10-17 00:56:32 +00:00
|
|
|
|
|
|
|
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(
|
2012-01-28 20:27:23 +00:00
|
|
|
url="/myflatpage1/", title="Some page", content="The content"
|
|
|
|
)
|
2011-10-17 00:56:32 +00:00
|
|
|
existing.sites.add(settings.SITE_ID)
|
|
|
|
|
2012-01-28 20:27:23 +00:00
|
|
|
data = dict(url="/myflatpage1/", **self.form_data)
|
2011-10-17 00:56:32 +00:00
|
|
|
|
|
|
|
f = FlatpageForm(data=data, instance=existing)
|
|
|
|
|
|
|
|
self.assertTrue(f.is_valid(), f.errors)
|
|
|
|
|
|
|
|
updated = f.save()
|
|
|
|
|
|
|
|
self.assertEqual(updated.title, "A test page")
|
2012-04-28 23:44:14 +00:00
|
|
|
|
|
|
|
def test_flatpage_nosites(self):
|
|
|
|
data = dict(url="/myflatpage1/", **self.form_data)
|
|
|
|
data.update({"sites": ""})
|
|
|
|
|
|
|
|
f = FlatpageForm(data=data)
|
|
|
|
|
|
|
|
self.assertFalse(f.is_valid())
|
|
|
|
|
2017-01-26 19:58:33 +00:00
|
|
|
self.assertEqual(
|
|
|
|
f.errors, {"sites": [translation.gettext("This field is required.")]}
|
|
|
|
)
|