Added unittest for group-fieldsets functionality in TranslationAdmin.

This commit is contained in:
Dirk Eschler 2013-02-12 12:20:32 +01:00
parent 6c66cec35e
commit 966d5ee962
3 changed files with 70 additions and 8 deletions

View file

@ -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):

View file

@ -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):

View file

@ -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)