diff --git a/tests/regressiontests/bug639/models.py b/tests/regressiontests/bug639/models.py index 22dd440fc3..12f5f7b147 100644 --- a/tests/regressiontests/bug639/models.py +++ b/tests/regressiontests/bug639/models.py @@ -2,19 +2,24 @@ import tempfile from django.db import models from django.core.files.storage import FileSystemStorage +from django.forms import ModelForm temp_storage = FileSystemStorage(tempfile.gettempdir()) class Photo(models.Model): title = models.CharField(max_length=30) image = models.FileField(storage=temp_storage, upload_to='tests') - - # Support code for the tests; this keeps track of how many times save() gets - # called on each instance. + + # 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 + +class PhotoForm(ModelForm): + class Meta: + model = Photo diff --git a/tests/regressiontests/bug639/tests.py b/tests/regressiontests/bug639/tests.py index 69e4a3ba3b..7410b2fd97 100644 --- a/tests/regressiontests/bug639/tests.py +++ b/tests/regressiontests/bug639/tests.py @@ -1,36 +1,36 @@ """ -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. +Tests for file field behavior, and specifically #639, in which Model.save() +gets called *again* for each FileField. This test will fail if calling a +ModelForm'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 + from django.core.files.uploadedfile import SimpleUploadedFile +from regressiontests.bug639.models import Photo, PhotoForm class Bug639Test(unittest.TestCase): - + def testBug639(self): """ - Simulate a file upload and check how many times Model.save() gets called. + 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"] = SimpleUploadedFile('test.jpg', img, 'image/jpeg') + # Grab an image for testing. + filename = os.path.join(os.path.dirname(__file__), "test.jpg") + img = open(filename, "rb").read() - manip = Photo.AddManipulator() - manip.do_html2python(qd) - p = manip.save(qd) - - # Check the savecount stored on the object (see the model) + # Fake a POST QueryDict and FILES MultiValueDict. + data = {'title': 'Testing'} + files = {"image": SimpleUploadedFile('test.jpg', img, 'image/jpeg')} + + form = PhotoForm(data=data, files=files) + p = form.save() + + # Check the savecount stored on the object (see the model). self.assertEqual(p._savecount, 1) - + def tearDown(self): """ Make sure to delete the "uploaded" file to avoid clogging /tmp.