Author: kmtracey
Date: 2010-03-16 17:37:45 -0500 (Tue, 16 Mar 2010)
New Revision: 12800

Modified:
   django/trunk/django/contrib/comments/views/comments.py
   django/trunk/tests/regressiontests/comment_tests/fixtures/comment_tests.json
   django/trunk/tests/regressiontests/comment_tests/models.py
   django/trunk/tests/regressiontests/comment_tests/tests/comment_view_tests.py
Log:
Changed the comments post view code to avoid raising an exception if handed 
invalid data for the object pk. Thanks to Leo for the test.


Modified: django/trunk/django/contrib/comments/views/comments.py
===================================================================
--- django/trunk/django/contrib/comments/views/comments.py      2010-03-16 
21:03:11 UTC (rev 12799)
+++ django/trunk/django/contrib/comments/views/comments.py      2010-03-16 
22:37:45 UTC (rev 12800)
@@ -1,7 +1,7 @@
 from django import http
 from django.conf import settings
 from utils import next_redirect, confirmation_view
-from django.core.exceptions import ObjectDoesNotExist
+from django.core.exceptions import ObjectDoesNotExist, ValidationError
 from django.db import models
 from django.shortcuts import render_to_response
 from django.template import RequestContext
@@ -62,6 +62,10 @@
         return CommentPostBadRequest(
             "No object matching content-type %r and object PK %r exists." % \
                 (escape(ctype), escape(object_pk)))
+    except (ValueError, ValidationError), e:
+        return CommentPostBadRequest(
+            "Attempting go get content-type %r and object PK %r exists raised 
%s" % \
+                (escape(ctype), escape(object_pk), e.__class__.__name__))
 
     # Do we want to preview the comment?
     preview = "preview" in data

Modified: 
django/trunk/tests/regressiontests/comment_tests/fixtures/comment_tests.json
===================================================================
--- 
django/trunk/tests/regressiontests/comment_tests/fixtures/comment_tests.json    
    2010-03-16 21:03:11 UTC (rev 12799)
+++ 
django/trunk/tests/regressiontests/comment_tests/fixtures/comment_tests.json    
    2010-03-16 22:37:45 UTC (rev 12800)
@@ -1,5 +1,12 @@
 [
   {
+    "model" : "comment_tests.book",
+    "pk" : 1,
+    "fields" : {
+        "dewey_decimal" : "12.34"
+    }
+  },
+  {
     "model" : "comment_tests.author",
     "pk" : 1,
     "fields" : {

Modified: django/trunk/tests/regressiontests/comment_tests/models.py
===================================================================
--- django/trunk/tests/regressiontests/comment_tests/models.py  2010-03-16 
21:03:11 UTC (rev 12799)
+++ django/trunk/tests/regressiontests/comment_tests/models.py  2010-03-16 
22:37:45 UTC (rev 12800)
@@ -28,3 +28,7 @@
 
     def __str__(self):
         return self.title
+
+class Book(models.Model):
+    dewey_decimal = models.DecimalField(primary_key = True, decimal_places=2, 
max_digits=5)
+    
\ No newline at end of file

Modified: 
django/trunk/tests/regressiontests/comment_tests/tests/comment_view_tests.py
===================================================================
--- 
django/trunk/tests/regressiontests/comment_tests/tests/comment_view_tests.py    
    2010-03-16 21:03:11 UTC (rev 12799)
+++ 
django/trunk/tests/regressiontests/comment_tests/tests/comment_view_tests.py    
    2010-03-16 22:37:45 UTC (rev 12800)
@@ -3,7 +3,7 @@
 from django.contrib.auth.models import User
 from django.contrib.comments import signals
 from django.contrib.comments.models import Comment
-from regressiontests.comment_tests.models import Article
+from regressiontests.comment_tests.models import Article, Book
 from regressiontests.comment_tests.tests import CommentTestCase
 
 post_redirect_re = re.compile(r'^http://testserver/posted/\?c=(?P<pk>\d+$)')
@@ -45,6 +45,22 @@
         response = self.client.post("/post/", data)
         self.assertEqual(response.status_code, 400)
 
+    def testPostInvalidIntegerPK(self):
+        a = Article.objects.get(pk=1)
+        data = self.getValidData(a)
+        data["comment"] = "This is another comment"
+        data["object_pk"] = u'\ufffd'
+        response = self.client.post("/post/", data)
+        self.assertEqual(response.status_code, 400)
+
+    def testPostInvalidDecimalPK(self):
+        b = Book.objects.get(pk='12.34')
+        data = self.getValidData(b)
+        data["comment"] = "This is another comment"
+        data["object_pk"] = 'cookies'
+        response = self.client.post("/post/", data)
+        self.assertEqual(response.status_code, 400)
+
     def testCommentPreview(self):
         a = Article.objects.get(pk=1)
         data = self.getValidData(a)
@@ -187,11 +203,11 @@
         location = response["Location"]
         match = post_redirect_re.match(location)
         self.failUnless(match != None, "Unexpected redirect location: %s" % 
location)
-        
+
         data["next"] = "/somewhere/else/"
         data["comment"] = "This is another comment"
         response = self.client.post("/post/", data)
-        location = response["Location"]        
+        location = response["Location"]
         match = re.search(r"^http://testserver/somewhere/else/\?c=\d+$";, 
location)
         self.failUnless(match != None, "Unexpected redirect location: %s" % 
location)
 
@@ -199,7 +215,7 @@
         a = Article.objects.get(pk=1)
         data = self.getValidData(a)
         response = self.client.post("/post/", data)
-        location = response["Location"]        
+        location = response["Location"]
         match = post_redirect_re.match(location)
         self.failUnless(match != None, "Unexpected redirect location: %s" % 
location)
         pk = int(match.group('pk'))
@@ -216,14 +232,14 @@
         data["next"] = "/somewhere/else/?foo=bar"
         data["comment"] = "This is another comment"
         response = self.client.post("/post/", data)
-        location = response["Location"]        
+        location = response["Location"]
         match = 
re.search(r"^http://testserver/somewhere/else/\?foo=bar&c=\d+$";, location)
         self.failUnless(match != None, "Unexpected redirect location: %s" % 
location)
 
-    def testCommentDoneReSubmitWithInvalidParams(self):
+    def testCommentPostRedirectWithInvalidIntegerPK(self):
         """
-        Tests that attempting to retrieve the location specified in the 
-        post redirect, after adding some invalid data to the expected 
+        Tests that attempting to retrieve the location specified in the
+        post redirect, after adding some invalid data to the expected
         querystring it ends with, doesn't cause a server error.
         """
         a = Article.objects.get(pk=1)
@@ -234,3 +250,4 @@
         broken_location = location + u"\ufffd"
         response = self.client.get(broken_location)
         self.assertEqual(response.status_code, 200)
+

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

Reply via email to