From df0d5ea7bc9821923c70e7bf06d3646598cf019d Mon Sep 17 00:00:00 2001 From: Tushar Bhatia Date: Sat, 26 Jul 2014 09:23:01 +0800 Subject: [PATCH] [1.7.x] Fixed #22979 -- Moved bug* tests Backport of 11181a64f from master. --- .../__init__.py | 0 .../{bug8245 => admin_autodiscover}/admin.py | 0 .../{bug8245 => admin_autodiscover}/models.py | 0 .../{bug8245 => admin_autodiscover}/tests.py | 4 +- tests/bug639/models.py | 31 ------------ tests/bug639/test.jpg | Bin 1780 -> 0 bytes tests/bug639/tests.py | 45 ------------------ tests/bug8245/__init__.py | 0 tests/model_forms/models.py | 16 +++++++ tests/model_forms/tests.py | 32 ++++++++++++- 10 files changed, 49 insertions(+), 79 deletions(-) rename tests/{bug639 => admin_autodiscover}/__init__.py (100%) rename tests/{bug8245 => admin_autodiscover}/admin.py (100%) rename tests/{bug8245 => admin_autodiscover}/models.py (100%) rename tests/{bug8245 => admin_autodiscover}/tests.py (89%) delete mode 100644 tests/bug639/models.py delete mode 100644 tests/bug639/test.jpg delete mode 100644 tests/bug639/tests.py delete mode 100644 tests/bug8245/__init__.py diff --git a/tests/bug639/__init__.py b/tests/admin_autodiscover/__init__.py similarity index 100% rename from tests/bug639/__init__.py rename to tests/admin_autodiscover/__init__.py diff --git a/tests/bug8245/admin.py b/tests/admin_autodiscover/admin.py similarity index 100% rename from tests/bug8245/admin.py rename to tests/admin_autodiscover/admin.py diff --git a/tests/bug8245/models.py b/tests/admin_autodiscover/models.py similarity index 100% rename from tests/bug8245/models.py rename to tests/admin_autodiscover/models.py diff --git a/tests/bug8245/tests.py b/tests/admin_autodiscover/tests.py similarity index 89% rename from tests/bug8245/tests.py rename to tests/admin_autodiscover/tests.py index 7a91d04af1..af5aebcd7f 100644 --- a/tests/bug8245/tests.py +++ b/tests/admin_autodiscover/tests.py @@ -3,12 +3,12 @@ from unittest import TestCase from django.contrib import admin -class Bug8245Test(TestCase): +class AdminAutoDiscoverTests(TestCase): """ Test for bug #8245 - don't raise an AlreadyRegistered exception when using autodiscover() and an admin.py module contains an error. """ - def test_bug_8245(self): + def test_double_call_autodiscover(self): # The first time autodiscover is called, we should get our real error. with self.assertRaises(Exception) as cm: admin.autodiscover() diff --git a/tests/bug639/models.py b/tests/bug639/models.py deleted file mode 100644 index db34532025..0000000000 --- a/tests/bug639/models.py +++ /dev/null @@ -1,31 +0,0 @@ -import os -import tempfile - -from django.core.files.storage import FileSystemStorage -from django.db import models -from django.forms import ModelForm - - -temp_storage_dir = tempfile.mkdtemp(dir=os.environ['DJANGO_TEST_TEMP_DIR']) -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 - fields = '__all__' diff --git a/tests/bug639/test.jpg b/tests/bug639/test.jpg deleted file mode 100644 index 391b57a0f32e26fb7090a63e1d7f922ad0f7e5b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1780 zcmbV}c~H|=5Xavy2MITUL?EPKAO;i48-FfqN-`m-@pM8oKiq}BLgW=8q z5Cj1?r2)klAoy?vNrFVKAZ{sTwH2UkboWLez@ikrfa{XRiv+;i8>~dXlxsoCcNgQoc4eq|1)Kp!LsMH*9iy$K zt*48@;w=ey0|UG**}}xqfx2;nJ=Kox!sPh7xNq~I+XW=Ew?#$^;snmDox=1TnVc8_ zf1wDZtEY$8$5RLd3g6YvmH(fmxCJn1Wvjt($P~aZ5F7(3nt+M2W2ACw3xoS62nI(W zRZwVEHFae|oeqFOa5xMBM~EHrsgVHqP(q zIEfOLAXHUbqHkb`Uq&{!SiWMd?K&!L{g2L@To|ry?j9`v%>nGdEkT^{h{z}|FFG+P zIVCkMeP`C5z1caUeYxTz1%*eC9Y0ZY=Ipuh3W@Z5<>i{%y84F3D_8H_ZMt{=LG#0w zj%V`D=Up#ecK7!64-5_skBq*Vn4FsaIP>ZA?A!tu1mJ&SeJA?|7e>hiLm=P?)B+a- zOI0p727x46tLSd|wNxw?S{98!KB90MFdPpe@?)M+gcV(hkooZKtTHX5J6 z8I5w&1BNP3IRr|aI}=;+Q2PNLbXjg(FyvV)KOm~6^2)_&VKlJ|Ys7m~vbs}TRPfV~ zH8GV9UG0HOc?q6LzVgnx=(`iEsvhYwvxv0NvA6yW7?UrgyXIdF`oF%}_i-?tS{n|m zYi&b}?YZ_h-ZD3NKN0ck8*i~$zqd=TMlXD6M53)YefL8znj@zWP;F@@^hwJ(7+MXJd>Tq^=6E z>d~(2l%S$ik(YQS+s)QE8F_wr zEnQPMxa>prbQNMSj*-DOo0-Wew3}&-;m%2Bgf?#1BA8{V*o0byemCi-o1P(NvE>;7 zq@y*jybi78a6_91*u3X8$p*OBq>1{yWMPwc1mcZ}VH=0JpP5ICaIts6XP|s@Pf4uS zd!O-|pInjrBGT#Np(>5%0cX|Dy)i=>$j&ij#W_I_C%?2h1DJkwa5(vZvqshhfdc$o zbghE-tS9)aLCbv!>7wkqMK=xm+Pb4ydas2{anDWtwV;@9nujY*44KB&^bV@;G|bcL zfPNpp;N%Rm{!KQT;C6Wos-F?OFB%cI?@5{Gn{B;*&=dm~Gqva}SzUAQ9<=-+kuU?g z=tIQ?D~5-SZ@jhD-M@r-5HYa4#c?#q6X8cz03xAe_C8;q>C;NyurkZh<7i(>L*P@w z+(~>4zf8vMVXiVG>R4j#RQo)OnvC_DBxK21XMO3ao=Y4G8M6w|VaVD|qn)uVqts^m zm*9?43PSV!Vq{dN+`Q&6k|g<*fgg>j*Gu@Z5dn zxrb?d`Yx;3SpC_~E+RYRHD|X)j_8=Nu<+)1_10?`MAf9u`o1a#gBrC`+qByAd5t+K zI4*v=GOz5BhtZfDC+zfRT6KEuc3XEXY-VBGuIR@NLqm?Aa;9Xmc5$HIVQoX{5iTa* z_~cCe81*>E;>yxI&BOx(H;3uRPkxkj1uMYe9i<+9#KGB0N%e~pcIFuxox9Z<2&vMt uc?CGQ#WC%x<~p>Pej+5U`BnTV8~?VA{_>?!qe_j*=jhOm^3$b?mwy0^7T=}- diff --git a/tests/bug639/tests.py b/tests/bug639/tests.py deleted file mode 100644 index 26e172ab50..0000000000 --- a/tests/bug639/tests.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -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 django.utils._os import upath - -from .models import Photo, PhotoForm, temp_storage_dir - - -class Bug639Test(unittest.TestCase): - - def test_bug_639(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) diff --git a/tests/bug8245/__init__.py b/tests/bug8245/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/model_forms/models.py b/tests/model_forms/models.py index 59b18dc39d..8936a17fc0 100644 --- a/tests/model_forms/models.py +++ b/tests/model_forms/models.py @@ -406,3 +406,19 @@ class Character(models.Model): class StumpJoke(models.Model): most_recently_fooled = models.ForeignKey(Character, limit_choices_to=today_callable_dict, related_name="+") has_fooled_today = models.ManyToManyField(Character, limit_choices_to=today_callable_q, related_name="+") + + +# Model for #639 +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 diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index dc912c0cd6..f05307851f 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -22,7 +22,7 @@ from django.utils import six from .models import (Article, ArticleStatus, Author, Author1, BetterWriter, BigInt, Book, Category, CommaSeparatedInteger, CustomFF, CustomFieldForExclusionModel, DerivedBook, DerivedPost, Document, ExplicitPK, FilePathModel, FlexibleDatePost, Homepage, - ImprovedArticle, ImprovedArticleWithParentLink, Inventory, Person, Post, Price, + ImprovedArticle, ImprovedArticleWithParentLink, Inventory, Person, Photo, Post, Price, Product, Publication, TextFile, Triple, Writer, WriterProfile, Colour, ColourfulItem, ArticleStatusNote, DateTimePost, CustomErrorMessage, test_images, StumpJoke, Character) @@ -1838,6 +1838,36 @@ class FileAndImageFieldTests(TestCase): form = CFFForm(data={'f': None}) form.save() + def test_file_field_multiple_save(self): + """ + Simulate a file upload and check how many times Model.save() gets + called. Test for bug #639. + """ + class PhotoForm(forms.ModelForm): + class Meta: + model = Photo + fields = '__all__' + + # Grab an image for testing. + filename = os.path.join(os.path.dirname(upath(__file__)), "test.png") + with open(filename, "rb") as fp: + img = fp.read() + + # Fake a POST QueryDict and FILES MultiValueDict. + data = {'title': 'Testing'} + files = {"image": SimpleUploadedFile('test.png', img, 'image/png')} + + form = PhotoForm(data=data, files=files) + p = form.save() + + try: + # Check the savecount stored on the object (see the model). + self.assertEqual(p._savecount, 1) + finally: + # Delete the "uploaded" file to avoid clogging /tmp. + p = Photo.objects.get() + p.image.delete(save=False) + def test_file_path_field_blank(self): """ Regression test for #8842: FilePathField(blank=True)