Refs #7742 -- Got bug639 regression tests using newforms instead of oldforms.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8304 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Gary Wilson Jr 2008-08-11 15:24:46 +00:00
parent 5d837afe23
commit c17c8ddecc
2 changed files with 29 additions and 24 deletions

View File

@ -2,19 +2,24 @@ import tempfile
from django.db import models from django.db import models
from django.core.files.storage import FileSystemStorage from django.core.files.storage import FileSystemStorage
from django.forms import ModelForm
temp_storage = FileSystemStorage(tempfile.gettempdir()) temp_storage = FileSystemStorage(tempfile.gettempdir())
class Photo(models.Model): class Photo(models.Model):
title = models.CharField(max_length=30) title = models.CharField(max_length=30)
image = models.FileField(storage=temp_storage, upload_to='tests') image = models.FileField(storage=temp_storage, upload_to='tests')
# Support code for the tests; this keeps track of how many times save() gets # Support code for the tests; this keeps track of how many times save()
# called on each instance. # gets called on each instance.
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(Photo, self).__init__(*args, **kwargs) super(Photo, self).__init__(*args, **kwargs)
self._savecount = 0 self._savecount = 0
def save(self): def save(self):
super(Photo, self).save() super(Photo, self).save()
self._savecount += 1 self._savecount += 1
class PhotoForm(ModelForm):
class Meta:
model = Photo

View File

@ -1,36 +1,36 @@
""" """
Tests for file field behavior, and specifically #639, in which Model.save() gets Tests for file field behavior, and specifically #639, in which Model.save()
called *again* for each FileField. This test will fail if calling an gets called *again* for each FileField. This test will fail if calling a
auto-manipulator's save() method causes Model.save() to be called more than once. ModelForm's save() method causes Model.save() to be called more than once.
""" """
import os import os
import unittest 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 django.core.files.uploadedfile import SimpleUploadedFile
from regressiontests.bug639.models import Photo, PhotoForm
class Bug639Test(unittest.TestCase): class Bug639Test(unittest.TestCase):
def testBug639(self): 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 # Grab an image for testing.
img = open(os.path.join(os.path.dirname(__file__), "test.jpg"), "rb").read() filename = os.path.join(os.path.dirname(__file__), "test.jpg")
img = open(filename, "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')
manip = Photo.AddManipulator() # Fake a POST QueryDict and FILES MultiValueDict.
manip.do_html2python(qd) data = {'title': 'Testing'}
p = manip.save(qd) files = {"image": SimpleUploadedFile('test.jpg', img, 'image/jpeg')}
# Check the savecount stored on the object (see the model) form = PhotoForm(data=data, files=files)
p = form.save()
# Check the savecount stored on the object (see the model).
self.assertEqual(p._savecount, 1) self.assertEqual(p._savecount, 1)
def tearDown(self): def tearDown(self):
""" """
Make sure to delete the "uploaded" file to avoid clogging /tmp. Make sure to delete the "uploaded" file to avoid clogging /tmp.