From 966d5ee962a5ec4becf348522cf20b0af8743108 Mon Sep 17 00:00:00 2001 From: Dirk Eschler Date: Tue, 12 Feb 2013 12:20:32 +0100 Subject: [PATCH] Added unittest for group-fieldsets functionality in TranslationAdmin. --- modeltranslation/tests/__init__.py | 53 ++++++++++++++++++++++++++- modeltranslation/tests/models.py | 6 +++ modeltranslation/tests/translation.py | 19 ++++++---- 3 files changed, 70 insertions(+), 8 deletions(-) diff --git a/modeltranslation/tests/__init__.py b/modeltranslation/tests/__init__.py index 99a5155..e85d652 100644 --- a/modeltranslation/tests/__init__.py +++ b/modeltranslation/tests/__init__.py @@ -227,7 +227,7 @@ class ModeltranslationTest(ModeltranslationTestBase): self.failUnless(translator.translator) # Check that all models are registered for translation - self.assertEqual(len(translator.translator.get_registered_models()), 19) + self.assertEqual(len(translator.translator.get_registered_models()), 20) # Try to unregister a model that is not registered self.assertRaises(translator.NotRegistered, @@ -1564,6 +1564,57 @@ class TranslationAdminTest(ModeltranslationTestBase): self.assertEqual(mab.get_form(request).base_fields.keys(), ['titlea_de', 'titlea_en', 'titleb_de', 'titleb_en']) + def test_group_fieldsets(self): + # Declared fieldsets take precedence over group_fieldsets + class GroupFieldsetsModelAdmin(admin.TranslationAdmin): + fieldsets = [(None, {'fields': ['title']})] + group_fieldsets = True + ma = GroupFieldsetsModelAdmin(models.GroupFieldsetsModel, self.site) + fields = ['title_de', 'title_en'] + self.assertEqual(ma.get_form(request).base_fields.keys(), fields) + self.assertEqual(ma.get_form(request, self.test_obj).base_fields.keys(), fields) + + # Now set group_fieldsets only + class GroupFieldsetsModelAdmin(admin.TranslationAdmin): + group_fieldsets = True + ma = GroupFieldsetsModelAdmin(models.GroupFieldsetsModel, self.site) + # Only text and title are registered for translation. We expect to get + # three fieldsets. The first which gathers all untranslated field + # (email only) and one for each translation field (text and title). + fieldsets = [ + ('', {'fields': ['email']}), + ('text', {'classes': ('mt-fieldset',), 'fields': ['text_de', 'text_en']}), + ('title', {'classes': ('mt-fieldset',), 'fields': ['title_de', 'title_en']}) + ] + self.assertEqual(ma.get_fieldsets(request), fieldsets) + self.assertEqual(ma.get_fieldsets(request, self.test_obj), fieldsets) + + # Verify that other options are still taken into account + + # Exclude an untranslated field + class GroupFieldsetsModelAdmin(admin.TranslationAdmin): + group_fieldsets = True + exclude = ('email',) + ma = GroupFieldsetsModelAdmin(models.GroupFieldsetsModel, self.site) + fieldsets = [ + ('text', {'classes': ('mt-fieldset',), 'fields': ['text_de', 'text_en']}), + ('title', {'classes': ('mt-fieldset',), 'fields': ['title_de', 'title_en']}) + ] + self.assertEqual(ma.get_fieldsets(request), fieldsets) + self.assertEqual(ma.get_fieldsets(request, self.test_obj), fieldsets) + + # Exclude a translation field + class GroupFieldsetsModelAdmin(admin.TranslationAdmin): + group_fieldsets = True + exclude = ('text',) + ma = GroupFieldsetsModelAdmin(models.GroupFieldsetsModel, self.site) + fieldsets = [ + ('', {'fields': ['email']}), + ('title', {'classes': ('mt-fieldset',), 'fields': ['title_de', 'title_en']}) + ] + self.assertEqual(ma.get_fieldsets(request), fieldsets) + self.assertEqual(ma.get_fieldsets(request, self.test_obj), fieldsets) + class TestManager(ModeltranslationTestBase): def setUp(self): diff --git a/modeltranslation/tests/models.py b/modeltranslation/tests/models.py index 87ad38f..9fb7c9f 100644 --- a/modeltranslation/tests/models.py +++ b/modeltranslation/tests/models.py @@ -134,6 +134,12 @@ class DataModel(models.Model): data = models.TextField(blank=True, null=True) +class GroupFieldsetsModel(models.Model): + title = models.CharField(max_length=255) + text = models.TextField(blank=True, null=True) + email = models.EmailField(blank=True, null=True) + + ########## Manager testing class ManagerTestModel(models.Model): diff --git a/modeltranslation/tests/translation.py b/modeltranslation/tests/translation.py index 7558029..f33b3ae 100644 --- a/modeltranslation/tests/translation.py +++ b/modeltranslation/tests/translation.py @@ -3,11 +3,10 @@ from django.utils.translation import ugettext_lazy from modeltranslation.translator import translator, TranslationOptions from modeltranslation.tests.models import ( - TestModel, FallbackModel, FallbackModel2, - FileFieldsModel, OtherFieldsModel, AbstractModelA, AbstractModelB, - Slugged, MetaData, Displayable, Page, RichText, RichTextPage, - MultitableModelA, MultitableModelB, MultitableModelC, - ManagerTestModel, CustomManagerTestModel, CustomManager2TestModel) + TestModel, FallbackModel, FallbackModel2, FileFieldsModel, OtherFieldsModel, AbstractModelA, + AbstractModelB, Slugged, MetaData, Displayable, Page, RichText, RichTextPage, + MultitableModelA, MultitableModelB, MultitableModelC, ManagerTestModel, CustomManagerTestModel, + CustomManager2TestModel, GroupFieldsetsModel) class TestTranslationOptions(TranslationOptions): @@ -25,8 +24,7 @@ translator.register(FallbackModel, FallbackModelTranslationOptions) class FallbackModel2TranslationOptions(TranslationOptions): fields = ('title', 'text', 'url', 'email',) - fallback_values = {'text': ugettext_lazy('Sorry, translation is not ' - 'available.')} + fallback_values = {'text': ugettext_lazy('Sorry, translation is not available.')} translator.register(FallbackModel2, FallbackModel2TranslationOptions) @@ -137,3 +135,10 @@ class FieldInheritanceDTranslationOptions(FieldInheritanceBTranslationOptions): class FieldInheritanceETranslationOptions(FieldInheritanceCTranslationOptions, FieldInheritanceDTranslationOptions): fields = ('titlee',) + + +########## Admin testing + +class GroupFieldsetsTranslationOptions(TranslationOptions): + fields = ('title', 'text',) +translator.register(GroupFieldsetsModel, GroupFieldsetsTranslationOptions)