Commit c17c8dde authored by Gary Wilson Jr's avatar Gary Wilson Jr
Browse files

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
parent 5d837afe
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ import tempfile

from django.db import models
from django.core.files.storage import FileSystemStorage
from django.forms import ModelForm

temp_storage = FileSystemStorage(tempfile.gettempdir())

@@ -9,8 +10,8 @@ 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
@@ -18,3 +19,7 @@ class Photo(models.Model):
    def save(self):
        super(Photo, self).save()
        self._savecount += 1

class PhotoForm(ModelForm):
    class Meta:
        model = Photo
+21 −21
Original line number Diff line number Diff line
"""
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()
        # Grab an image for testing.
        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')
        # Fake a POST QueryDict and FILES MultiValueDict.
        data = {'title': 'Testing'}
        files = {"image": SimpleUploadedFile('test.jpg', img, 'image/jpeg')}

        manip = Photo.AddManipulator()
        manip.do_html2python(qd)
        p = manip.save(qd)
        form = PhotoForm(data=data, files=files)
        p = form.save()

        # Check the savecount stored on the object (see the model)
        # Check the savecount stored on the object (see the model).
        self.assertEqual(p._savecount, 1)

    def tearDown(self):