diff --git a/modeltranslation/tests/__init__.py b/modeltranslation/tests/__init__.py index d4e82cd..5ef5a7d 100644 --- a/modeltranslation/tests/__init__.py +++ b/modeltranslation/tests/__init__.py @@ -13,6 +13,7 @@ from django.core.exceptions import ValidationError, ImproperlyConfigured from django.core.files.base import ContentFile from django.core.files.storage import default_storage 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 @@ -37,7 +38,7 @@ from modeltranslation.utils import (build_css_class, build_localized_fieldname, request = None # How many models are registered for tests. -TEST_MODELS = 25 +TEST_MODELS = 26 class reload_override_settings(override_settings): @@ -449,6 +450,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 6f5d436..e55a2fa 100644 --- a/modeltranslation/tests/models.py +++ b/modeltranslation/tests/models.py @@ -16,6 +16,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) + + ########## Proxy model testing class ProxyTestModel(TestModel): diff --git a/modeltranslation/tests/translation.py b/modeltranslation/tests/translation.py index 4b44355..1b8b6c8 100644 --- a/modeltranslation/tests/translation.py +++ b/modeltranslation/tests/translation.py @@ -7,7 +7,7 @@ from modeltranslation.tests.models import ( DescriptorModel, AbstractModelA, AbstractModelB, Slugged, MetaData, Displayable, Page, RichText, RichTextPage, MultitableModelA, MultitableModelB, MultitableModelC, ManagerTestModel, CustomManagerTestModel, CustomManager2TestModel, GroupFieldsetsModel, NameModel, - ThirdPartyRegisteredModel, ProxyTestModel) + ThirdPartyRegisteredModel, ProxyTestModel, UniqueNullableModel) class TestTranslationOptions(TranslationOptions): @@ -15,6 +15,11 @@ class TestTranslationOptions(TranslationOptions): translator.register(TestModel, TestTranslationOptions) +class UniqueNullableTranslationOptions(TranslationOptions): + fields = ('title',) +translator.register(UniqueNullableModel, UniqueNullableTranslationOptions) + + ########## Proxy model testing class ProxyTestTranslationOptions(TranslationOptions):