summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2007-02-26 17:17:11 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2007-02-26 17:17:11 +0000
commita30e3fca48be23c856cda778ec3f0e0eec75fd91 (patch)
treec1285bb3a67bdf7dbbef40ef2f6e2ea94c0843a6 /tests
parentf313e07b6e0914130b613c3491b2b019ca003dc7 (diff)
Objects with FileFields no longer get save() called multiple times from the AutomaticManipulator! This fixes #639, #572, and likely others I don't know of.
This may be slightly backwards-incompatible: if you've been relying on the multiple-save behavior (why?), then you'll no longer see that happen. git-svn-id: http://code.djangoproject.com/svn/django/trunk@4609 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/bug639/__init__.py0
-rw-r--r--tests/regressiontests/bug639/models.py16
-rw-r--r--tests/regressiontests/bug639/test.jpgbin0 -> 1780 bytes
-rw-r--r--tests/regressiontests/bug639/tests.py35
4 files changed, 51 insertions, 0 deletions
diff --git a/tests/regressiontests/bug639/__init__.py b/tests/regressiontests/bug639/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/regressiontests/bug639/__init__.py
diff --git a/tests/regressiontests/bug639/models.py b/tests/regressiontests/bug639/models.py
new file mode 100644
index 0000000000..30ca7e6326
--- /dev/null
+++ b/tests/regressiontests/bug639/models.py
@@ -0,0 +1,16 @@
+import tempfile
+from django.db import models
+
+class Photo(models.Model):
+ title = models.CharField(maxlength=30)
+ image = models.ImageField(upload_to=tempfile.gettempdir())
+
+ # Support code for the tests; this keeps track of how many times save() gets
+ # called on each instance.
+ def __init__(self, *args, **kwargs):
+ super(Photo, self).__init__(*args, **kwargs)
+ self._savecount = 0
+
+ def save(self):
+ super(Photo, self).save()
+ self._savecount +=1 \ No newline at end of file
diff --git a/tests/regressiontests/bug639/test.jpg b/tests/regressiontests/bug639/test.jpg
new file mode 100644
index 0000000000..391b57a0f3
--- /dev/null
+++ b/tests/regressiontests/bug639/test.jpg
Binary files differ
diff --git a/tests/regressiontests/bug639/tests.py b/tests/regressiontests/bug639/tests.py
new file mode 100644
index 0000000000..c05ef120e1
--- /dev/null
+++ b/tests/regressiontests/bug639/tests.py
@@ -0,0 +1,35 @@
+"""
+Tests for file field behavior, and specifically #639, in which Model.save() gets
+called *again* for each FileField. This test will fail if calling an
+auto-manipulator's save() method causes Model.save() to be called more than once.
+"""
+
+import os
+import unittest
+from regressiontests.bug639.models import Photo
+from django.http import QueryDict
+from django.utils.datastructures import MultiValueDict
+
+class Bug639Test(unittest.TestCase):
+
+ def testBug639(self):
+ """
+ Simulate a file upload and check how many times Model.save() gets called.
+ """
+ # Grab an image for testing
+ img = open(os.path.join(os.path.dirname(__file__), "test.jpg"), "rb").read()
+
+ # Fake a request query dict with the file
+ qd = QueryDict("title=Testing&image=", mutable=True)
+ qd["image_file"] = {
+ "filename" : "test.jpg",
+ "content-type" : "image/jpeg",
+ "content" : img
+ }
+
+ manip = Photo.AddManipulator()
+ manip.do_html2python(qd)
+ p = manip.save(qd)
+
+ # Check the savecount stored on the object (see the model)
+ self.assertEqual(p._savecount, 1) \ No newline at end of file