Kaydet (Commit) df0d5ea7 authored tarafından Tushar Bhatia's avatar Tushar Bhatia Kaydeden (comit) Tim Graham

[1.7.x] Fixed #22979 -- Moved bug* tests

Backport of 11181a64 from master.
üst 30ccb36c
...@@ -3,12 +3,12 @@ from unittest import TestCase ...@@ -3,12 +3,12 @@ from unittest import TestCase
from django.contrib import admin from django.contrib import admin
class Bug8245Test(TestCase): class AdminAutoDiscoverTests(TestCase):
""" """
Test for bug #8245 - don't raise an AlreadyRegistered exception when using Test for bug #8245 - don't raise an AlreadyRegistered exception when using
autodiscover() and an admin.py module contains an error. 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. # The first time autodiscover is called, we should get our real error.
with self.assertRaises(Exception) as cm: with self.assertRaises(Exception) as cm:
admin.autodiscover() admin.autodiscover()
......
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__'
"""
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)
...@@ -406,3 +406,19 @@ class Character(models.Model): ...@@ -406,3 +406,19 @@ class Character(models.Model):
class StumpJoke(models.Model): class StumpJoke(models.Model):
most_recently_fooled = models.ForeignKey(Character, limit_choices_to=today_callable_dict, related_name="+") 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="+") 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
...@@ -22,7 +22,7 @@ from django.utils import six ...@@ -22,7 +22,7 @@ from django.utils import six
from .models import (Article, ArticleStatus, Author, Author1, BetterWriter, BigInt, Book, from .models import (Article, ArticleStatus, Author, Author1, BetterWriter, BigInt, Book,
Category, CommaSeparatedInteger, CustomFF, CustomFieldForExclusionModel, Category, CommaSeparatedInteger, CustomFF, CustomFieldForExclusionModel,
DerivedBook, DerivedPost, Document, ExplicitPK, FilePathModel, FlexibleDatePost, Homepage, 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, Product, Publication, TextFile, Triple, Writer, WriterProfile,
Colour, ColourfulItem, ArticleStatusNote, DateTimePost, CustomErrorMessage, Colour, ColourfulItem, ArticleStatusNote, DateTimePost, CustomErrorMessage,
test_images, StumpJoke, Character) test_images, StumpJoke, Character)
...@@ -1838,6 +1838,36 @@ class FileAndImageFieldTests(TestCase): ...@@ -1838,6 +1838,36 @@ class FileAndImageFieldTests(TestCase):
form = CFFForm(data={'f': None}) form = CFFForm(data={'f': None})
form.save() 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): def test_file_path_field_blank(self):
""" """
Regression test for #8842: FilePathField(blank=True) Regression test for #8842: FilePathField(blank=True)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment