From 47c717f5760486ea110e8d575d54997a89b570ac Mon Sep 17 00:00:00 2001 From: Dirk Eschler Date: Thu, 21 Feb 2013 12:54:05 +0100 Subject: [PATCH] Added a quick test to check the managers behaviour with unique nullable fields. This passes locally with sqlite, let's see what travis has to say about mysql. --- modeltranslation/tests/__init__.py | 14 +++++++++++++- modeltranslation/tests/models.py | 4 ++++ modeltranslation/tests/translation.py | 7 ++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/modeltranslation/tests/__init__.py b/modeltranslation/tests/__init__.py index d9dc880..c05444d 100644 --- a/modeltranslation/tests/__init__.py +++ b/modeltranslation/tests/__init__.py @@ -17,6 +17,7 @@ from django.contrib.auth.models import User from django.core.exceptions import ValidationError, ImproperlyConfigured from django.core.files.base import ContentFile from django.core.management import call_command +from django.db import IntegrityError from django.db.models import Q, F from django.db.models.loading import AppCache from django.test import TestCase @@ -48,7 +49,7 @@ except ImportError: request = None # How much models are registered for tests. -TEST_MODELS = 22 +TEST_MODELS = 23 class reload_override_settings(override_settings): @@ -443,6 +444,17 @@ class ModeltranslationTest(ModeltranslationTestBase): ) self._test_constructor(keywords) + def test_unique_nullable_field(self): + models.UniqueNullableModel.objects.create() + models.UniqueNullableModel.objects.create() + models.UniqueNullableModel.objects.create(title=None) + models.UniqueNullableModel.objects.create(title=None) + + models.UniqueNullableModel.objects.create(title='') + self.assertRaises(IntegrityError, models.UniqueNullableModel.objects.create, title='') + models.UniqueNullableModel.objects.create(title='foo') + self.assertRaises(IntegrityError, models.UniqueNullableModel.objects.create, title='foo') + class FallbackTests(ModeltranslationTestBase): test_fallback = { diff --git a/modeltranslation/tests/models.py b/modeltranslation/tests/models.py index b3f73ad..8edc01c 100644 --- a/modeltranslation/tests/models.py +++ b/modeltranslation/tests/models.py @@ -11,6 +11,10 @@ class TestModel(models.Model): email = models.EmailField(blank=True, null=True) +class UniqueNullableModel(models.Model): + title = models.CharField(null=True, unique=True, max_length=255) + + ########## Fallback values testing class FallbackModel(models.Model): diff --git a/modeltranslation/tests/translation.py b/modeltranslation/tests/translation.py index 397ac29..36f5c8e 100644 --- a/modeltranslation/tests/translation.py +++ b/modeltranslation/tests/translation.py @@ -6,7 +6,7 @@ from modeltranslation.tests.models import ( TestModel, FallbackModel, FallbackModel2, FileFieldsModel, OtherFieldsModel, DescriptorModel, AbstractModelA, AbstractModelB, Slugged, MetaData, Displayable, Page, RichText, RichTextPage, MultitableModelA, MultitableModelB, MultitableModelC, ManagerTestModel, CustomManagerTestModel, - CustomManager2TestModel, GroupFieldsetsModel, NameModel) + CustomManager2TestModel, GroupFieldsetsModel, NameModel, UniqueNullableModel) class TestTranslationOptions(TranslationOptions): @@ -14,6 +14,11 @@ class TestTranslationOptions(TranslationOptions): translator.register(TestModel, TestTranslationOptions) +class UniqueNullableTranslationOptions(TranslationOptions): + fields = ('title',) +translator.register(UniqueNullableModel, UniqueNullableTranslationOptions) + + ########## Fallback values testing class FallbackModelTranslationOptions(TranslationOptions):