diff options
Diffstat (limited to 'parts/django/tests/regressiontests/bug639')
-rw-r--r-- | parts/django/tests/regressiontests/bug639/__init__.py | 0 | ||||
-rw-r--r-- | parts/django/tests/regressiontests/bug639/models.py | 26 | ||||
-rw-r--r-- | parts/django/tests/regressiontests/bug639/test.jpg | bin | 0 -> 1780 bytes | |||
-rw-r--r-- | parts/django/tests/regressiontests/bug639/tests.py | 41 |
4 files changed, 67 insertions, 0 deletions
diff --git a/parts/django/tests/regressiontests/bug639/__init__.py b/parts/django/tests/regressiontests/bug639/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/parts/django/tests/regressiontests/bug639/__init__.py diff --git a/parts/django/tests/regressiontests/bug639/models.py b/parts/django/tests/regressiontests/bug639/models.py new file mode 100644 index 0000000..b7e3880 --- /dev/null +++ b/parts/django/tests/regressiontests/bug639/models.py @@ -0,0 +1,26 @@ +import tempfile + +from django.db import models +from django.core.files.storage import FileSystemStorage +from django.forms import ModelForm + +temp_storage_dir = tempfile.mkdtemp() +temp_storage = FileSystemStorage(temp_storage_dir) + +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. + def __init__(self, *args, **kwargs): + super(Photo, self).__init__(*args, **kwargs) + self._savecount = 0 + + def save(self, force_insert=False, force_update=False): + super(Photo, self).save(force_insert, force_update) + self._savecount += 1 + +class PhotoForm(ModelForm): + class Meta: + model = Photo diff --git a/parts/django/tests/regressiontests/bug639/test.jpg b/parts/django/tests/regressiontests/bug639/test.jpg Binary files differnew file mode 100644 index 0000000..391b57a --- /dev/null +++ b/parts/django/tests/regressiontests/bug639/test.jpg diff --git a/parts/django/tests/regressiontests/bug639/tests.py b/parts/django/tests/regressiontests/bug639/tests.py new file mode 100644 index 0000000..2cc3a8a --- /dev/null +++ b/parts/django/tests/regressiontests/bug639/tests.py @@ -0,0 +1,41 @@ +""" +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 shutil +import unittest + +from django.core.files.uploadedfile import SimpleUploadedFile +from regressiontests.bug639.models import Photo, PhotoForm, temp_storage_dir + +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. + filename = os.path.join(os.path.dirname(__file__), "test.jpg") + img = open(filename, "rb").read() + + # 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. + """ + p = Photo.objects.get() + p.image.delete(save=False) + shutil.rmtree(temp_storage_dir) |