Author: russellm
Date: 2010-08-28 07:25:54 -0500 (Sat, 28 Aug 2010)
New Revision: 13655

Added:
   django/trunk/django/contrib/flatpages/tests/forms.py
Modified:
   django/trunk/django/contrib/flatpages/admin.py
   django/trunk/django/contrib/flatpages/tests/__init__.py
   django/trunk/django/contrib/flatpages/tests/views.py
Log:
Fixed #5192 -- Modified flatpage admin form to allow ~ and . characters in 
flatpage names. Thanks to [email protected] for the report, Idan Gazit for 
summarizing the issue on the ticket, and ctrochalakis for the initial patch.

Modified: django/trunk/django/contrib/flatpages/admin.py
===================================================================
--- django/trunk/django/contrib/flatpages/admin.py      2010-08-28 11:59:14 UTC 
(rev 13654)
+++ django/trunk/django/contrib/flatpages/admin.py      2010-08-28 12:25:54 UTC 
(rev 13655)
@@ -5,11 +5,11 @@
 
 
 class FlatpageForm(forms.ModelForm):
-    url = forms.RegexField(label=_("URL"), max_length=100, regex=r'^[-\w/]+$',
+    url = forms.RegexField(label=_("URL"), max_length=100, 
regex=r'^[-\w/\.~]+$',
         help_text = _("Example: '/about/contact/'. Make sure to have leading"
                       " and trailing slashes."),
         error_message = _("This value must contain only letters, numbers,"
-                          " underscores, dashes or slashes."))
+                          " dots, underscores, dashes, slashes or tildes."))
 
     class Meta:
         model = FlatPage

Modified: django/trunk/django/contrib/flatpages/tests/__init__.py
===================================================================
--- django/trunk/django/contrib/flatpages/tests/__init__.py     2010-08-28 
11:59:14 UTC (rev 13654)
+++ django/trunk/django/contrib/flatpages/tests/__init__.py     2010-08-28 
12:25:54 UTC (rev 13655)
@@ -1,4 +1,5 @@
 from django.contrib.flatpages.tests.csrf import *
+from django.contrib.flatpages.tests.forms import *
 from django.contrib.flatpages.tests.middleware import *
 from django.contrib.flatpages.tests.templatetags import *
 from django.contrib.flatpages.tests.views import *

Added: django/trunk/django/contrib/flatpages/tests/forms.py
===================================================================
--- django/trunk/django/contrib/flatpages/tests/forms.py                        
        (rev 0)
+++ django/trunk/django/contrib/flatpages/tests/forms.py        2010-08-28 
12:25:54 UTC (rev 13655)
@@ -0,0 +1,22 @@
+from django.contrib.flatpages.admin import FlatpageForm
+from django.test import TestCase
+
+class FlatpageAdminFormTests(TestCase):
+    def setUp(self):
+        self.form_data = {
+            'title': "A test page",
+            'content': "This is a test",
+            'sites': [1],
+        }
+
+    def test_flatpage_admin_form_url_validation(self):
+        "The flatpage admin form validates 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())

Modified: django/trunk/django/contrib/flatpages/tests/views.py
===================================================================
--- django/trunk/django/contrib/flatpages/tests/views.py        2010-08-28 
11:59:14 UTC (rev 13654)
+++ django/trunk/django/contrib/flatpages/tests/views.py        2010-08-28 
12:25:54 UTC (rev 13655)
@@ -1,6 +1,7 @@
 import os
 from django.conf import settings
 from django.contrib.auth.models import User
+from django.contrib.flatpages.models import FlatPage
 from django.test import TestCase
 
 class FlatpageViewTests(TestCase):
@@ -54,3 +55,18 @@
         "A non-existent flatpage won't be served if the fallback middlware is 
disabled"
         response = self.client.get('/no_such_flatpage/')
         self.assertEquals(response.status_code, 404)
+
+    def test_view_flatpage_special_chars(self):
+        "A flatpage with special chars in the URL can be served through a view"
+        fp = FlatPage.objects.create(
+            url="/some.very_special~chars-here/",
+            title="A very special page",
+            content="Isn't it special!",
+            enable_comments=False,
+            registration_required=False,
+        )
+        fp.sites.add(1)
+
+        response = 
self.client.get('/flatpage_root/some.very_special~chars-here/')
+        self.assertEquals(response.status_code, 200)
+        self.assertContains(response, "<p>Isn't it special!</p>")

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to