diff options
Diffstat (limited to 'tests/bug639/tests.py')
-rw-r--r-- | tests/bug639/tests.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/bug639/tests.py b/tests/bug639/tests.py new file mode 100644 index 0000000000..fcc1e0f7d1 --- /dev/null +++ b/tests/bug639/tests.py @@ -0,0 +1,47 @@ +""" +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. +""" + +from __future__ import absolute_import + +import os +import shutil + +from django.core.files.uploadedfile import SimpleUploadedFile +from django.utils import unittest +from django.utils._os import upath + +from .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(upath(__file__)), "test.jpg") + with open(filename, "rb") as fp: + img = fp.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) |