From 12b4280444b58c94197255655e284e4103fe00a9 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sat, 26 Mar 2016 22:09:08 +0200 Subject: Fixed #21548 -- Added FileExtensionValidator and validate_image_file_extension. --- tests/model_fields/test_imagefield.py | 8 +++++- tests/validators/tests.py | 51 ++++++++++++++++++++++++++++++++--- 2 files changed, 54 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/model_fields/test_imagefield.py b/tests/model_fields/test_imagefield.py index f9ae83b8b2..51f91d90c0 100644 --- a/tests/model_fields/test_imagefield.py +++ b/tests/model_fields/test_imagefield.py @@ -4,7 +4,7 @@ import os import shutil from unittest import skipIf -from django.core.exceptions import ImproperlyConfigured +from django.core.exceptions import ImproperlyConfigured, ValidationError from django.core.files import File from django.core.files.images import ImageFile from django.test import TestCase @@ -133,6 +133,12 @@ class ImageFieldTests(ImageFieldTestMixin, TestCase): self.assertEqual(hash(p1_db.mugshot), hash(p1.mugshot)) self.assertIs(p1_db.mugshot != p1.mugshot, False) + def test_validation(self): + p = self.PersonModel(name="Joan") + p.mugshot.save("shot.txt", self.file1) + with self.assertRaisesMessage(ValidationError, "File extension 'txt' is not allowed."): + p.full_clean() + def test_instantiate_missing(self): """ If the underlying file is unavailable, still create instantiate the diff --git a/tests/validators/tests.py b/tests/validators/tests.py index 56ebbe4cce..56dea8804f 100644 --- a/tests/validators/tests.py +++ b/tests/validators/tests.py @@ -9,11 +9,13 @@ from datetime import datetime, timedelta from unittest import TestCase from django.core.exceptions import ValidationError +from django.core.files.base import ContentFile from django.core.validators import ( - BaseValidator, DecimalValidator, EmailValidator, MaxLengthValidator, - MaxValueValidator, MinLengthValidator, MinValueValidator, RegexValidator, - URLValidator, int_list_validator, validate_comma_separated_integer_list, - validate_email, validate_integer, validate_ipv4_address, + BaseValidator, DecimalValidator, EmailValidator, FileExtensionValidator, + MaxLengthValidator, MaxValueValidator, MinLengthValidator, + MinValueValidator, RegexValidator, URLValidator, int_list_validator, + validate_comma_separated_integer_list, validate_email, + validate_image_file_extension, validate_integer, validate_ipv4_address, validate_ipv6_address, validate_ipv46_address, validate_slug, validate_unicode_slug, ) @@ -242,6 +244,17 @@ TEST_DATA = [ (RegexValidator('x', flags=re.IGNORECASE), 'y', ValidationError), (RegexValidator('a'), 'A', ValidationError), (RegexValidator('a', flags=re.IGNORECASE), 'A', None), + + (FileExtensionValidator(['txt']), ContentFile('contents', name='fileWithUnsupportedExt.jpg'), ValidationError), + (FileExtensionValidator(['txt']), ContentFile('contents', name='fileWithNoExtenstion'), ValidationError), + (FileExtensionValidator([]), ContentFile('contents', name='file.txt'), ValidationError), + (FileExtensionValidator(['txt']), ContentFile('contents', name='file.txt'), None), + (FileExtensionValidator(), ContentFile('contents', name='file.jpg'), None), + + (validate_image_file_extension, ContentFile('contents', name='file.jpg'), None), + (validate_image_file_extension, ContentFile('contents', name='file.png'), None), + (validate_image_file_extension, ContentFile('contents', name='file.txt'), ValidationError), + (validate_image_file_extension, ContentFile('contents', name='file'), ValidationError), ] @@ -422,3 +435,33 @@ class TestValidatorEquality(TestCase): DecimalValidator(1, 2), MinValueValidator(11), ) + + def test_file_extension_equality(self): + self.assertEqual( + FileExtensionValidator(), + FileExtensionValidator() + ) + self.assertEqual( + FileExtensionValidator(['txt']), + FileExtensionValidator(['txt']) + ) + self.assertEqual( + FileExtensionValidator(['txt']), + FileExtensionValidator(['txt'], code='invalid_extension') + ) + self.assertNotEqual( + FileExtensionValidator(['txt']), + FileExtensionValidator(['png']) + ) + self.assertNotEqual( + FileExtensionValidator(['txt']), + FileExtensionValidator(['png', 'jpg']) + ) + self.assertNotEqual( + FileExtensionValidator(['txt']), + FileExtensionValidator(['txt'], code='custom_code') + ) + self.assertNotEqual( + FileExtensionValidator(['txt']), + FileExtensionValidator(['txt'], message='custom error message') + ) -- cgit v1.3