241 lines
9.0 KiB
Python
241 lines
9.0 KiB
Python
from django.conf import settings
|
|
from django.contrib.admin.sites import AdminSite
|
|
from django.template import Context
|
|
from django.test import TestCase
|
|
from django.test.client import RequestFactory, Client
|
|
from django.test.utils import override_settings
|
|
|
|
from tabbed_admin.settings import USE_JQUERY_UI
|
|
from tabbed_admin.templatetags.tabbed_admin_tags import render_tab_fieldsets_inlines
|
|
from tabbed_admin.tests.admin import BandAdmin, InterviewInline
|
|
from tabbed_admin.tests.models import Band
|
|
|
|
|
|
class MockRequest(object):
|
|
pass
|
|
|
|
|
|
class MockSuperUser(object):
|
|
is_active = True
|
|
is_staff = True
|
|
def has_perm(self, perm):
|
|
return True
|
|
|
|
request = RequestFactory()
|
|
request.user = MockSuperUser()
|
|
request.csrf_processing_done = True
|
|
|
|
|
|
class TabbedModelAdminTest(TestCase):
|
|
|
|
def setUp(self):
|
|
self.site = AdminSite()
|
|
|
|
def test_fieldsets_inline_attribute_populated(self):
|
|
"""
|
|
Tests if self.inlines and self.fieldsets are correcly populated from
|
|
the self.tabs attribute.
|
|
"""
|
|
admin = BandAdmin(Band, self.site)
|
|
self.assertIsNone(admin.fieldsets)
|
|
self.assertEqual(0, len(admin.inlines))
|
|
fieldsets = admin.get_fieldsets(request)
|
|
inlines = admin.get_inline_instances(request)
|
|
self.assertNotEqual(0, len(fieldsets))
|
|
self.assertNotEqual(0, len(inlines))
|
|
self.assertNotEqual(0, len(admin.fieldsets))
|
|
self.assertNotEqual(0, len(admin.inlines))
|
|
|
|
def test_fieldsets_inlines_overriden_by_tabs(self):
|
|
"""
|
|
Tests if when set by default, fieldsets and inlines are properly
|
|
overriden.
|
|
"""
|
|
class TestBandAdmin(BandAdmin):
|
|
fieldsets = (
|
|
('Social', {
|
|
'fields': ('website', 'twitter', 'facebook')
|
|
})
|
|
)
|
|
inlines = (
|
|
InterviewInline,
|
|
)
|
|
admin = TestBandAdmin(Band, self.site)
|
|
self.assertEqual(admin.get_fieldsets(request),
|
|
admin.formatted_tabs['fieldsets'])
|
|
inlines = admin.get_inline_instances(request)
|
|
inlines = admin.inlines
|
|
for inline in inlines:
|
|
self.assertIn(inline, admin.formatted_tabs['inlines'])
|
|
|
|
def test_get_tabs_overrides_tabs_attribute(self):
|
|
"""
|
|
Tests if get_tabs method successfully overrides the self.tabs and returns it.
|
|
"""
|
|
single_tab = [('Overview', BandAdmin.tab_overview)]
|
|
class TestBandAdmin(BandAdmin):
|
|
def get_tabs(self, request, obj=None):
|
|
"""
|
|
Returns the tabs attribute.
|
|
"""
|
|
tabs = self.tabs
|
|
if obj is not None and obj.style == Band.STYLE_OVERRIDE:
|
|
tabs = single_tab
|
|
self.tabs = tabs
|
|
return super(TestBandAdmin, self).get_tabs(request, obj)
|
|
|
|
admin = TestBandAdmin(Band, self.site)
|
|
band = Band.objects.create(name="Test band", style=Band.STYLE_JAZZ)
|
|
tabs = admin.get_tabs(request, band)
|
|
self.assertEqual(len(tabs), 2)
|
|
self.assertNotEqual(tabs, single_tab)
|
|
band.style = Band.STYLE_OVERRIDE
|
|
tabs = admin.get_tabs(request, band)
|
|
self.assertEqual(len(tabs), 1)
|
|
self.assertEqual(tabs, single_tab)
|
|
|
|
def test_dynamically_add_fieldsets_inlines_to_tabs(self):
|
|
"""
|
|
Tests overriding dynamically tabs via get_tabs.
|
|
"""
|
|
added_fieldset = ('Social', {
|
|
'fields': ('website', 'twitter', 'facebook')
|
|
})
|
|
added_inline = InterviewInline
|
|
|
|
class TestBandAdmin(BandAdmin):
|
|
def get_tabs(self, request, obj=None):
|
|
tabs = self.tabs
|
|
tab_overview = self.tab_overview + (added_fieldset, )
|
|
tab_ressources = self.tab_ressources + (added_inline, )
|
|
tabs = [
|
|
('Overview', tab_overview),
|
|
('Ressources', tab_ressources)
|
|
]
|
|
self.tabs = tabs
|
|
return super(TestBandAdmin, self).get_tabs(request, obj)
|
|
|
|
original_admin = BandAdmin(Band, self.site)
|
|
self.assertNotIn(added_fieldset, original_admin.get_fieldsets(request))
|
|
self.assertNotIn(added_inline, original_admin.tab_ressources)
|
|
admin = TestBandAdmin(Band, self.site)
|
|
inlines_classes = []
|
|
inlines = admin.get_inline_instances(request)
|
|
for inline in inlines:
|
|
inlines_classes.append(inline.__class__)
|
|
self.assertIn(added_inline, inlines_classes)
|
|
|
|
def test_version_previous_to_django(self):
|
|
"""
|
|
Tests overriding dynamically tabs via get_tabs.
|
|
"""
|
|
added_fieldset = ('Social', {
|
|
'fields': ('website', 'twitter', 'facebook')
|
|
})
|
|
added_inline = InterviewInline
|
|
|
|
class TestBandAdmin(BandAdmin):
|
|
def get_tabs(self, request, obj=None):
|
|
tabs = self.tabs
|
|
tab_overview = self.tab_overview + (added_fieldset, )
|
|
tab_ressources = self.tab_ressources + (added_inline, )
|
|
tabs = [
|
|
('Overview', tab_overview),
|
|
('Ressources', tab_ressources)
|
|
]
|
|
self.tabs = tabs
|
|
return super(TestBandAdmin, self).get_tabs(request, obj)
|
|
|
|
original_admin = BandAdmin(Band, self.site)
|
|
self.assertNotIn(added_fieldset, original_admin.get_fieldsets(request))
|
|
self.assertNotIn(added_inline, original_admin.tab_ressources)
|
|
admin = TestBandAdmin(Band, self.site)
|
|
inlines_classes = []
|
|
inlines = admin.get_inline_instances(request)
|
|
for inline in inlines:
|
|
inlines_classes.append(inline.__class__)
|
|
self.assertIn(added_inline, inlines_classes)
|
|
self.assertIn(added_fieldset, admin.get_fieldsets(request))
|
|
self.assertIn(added_fieldset, admin.get_fieldsets(request))
|
|
|
|
def test_medias_method_with_default_settings(self):
|
|
"""
|
|
Tests that the media method is retrning the proper static files when settings.TABBED_ADMIN_USE_JQUERY_UI
|
|
is True or False.
|
|
"""
|
|
self.assertEqual(False, USE_JQUERY_UI)
|
|
admin = BandAdmin(Band, self.site)
|
|
medias = admin.media
|
|
self.assertEqual({}, medias._css)
|
|
for js in medias._js:
|
|
self.assertNotIn(js, 'tabbed_admin')
|
|
|
|
def test_medias_method_with_grappelli(self):
|
|
"""
|
|
Tests if the right css ile is triggered when grappelli is installed.
|
|
"""
|
|
try:
|
|
import grappelli
|
|
except ImportError:
|
|
return
|
|
settings.INSTALLED_APPS += ('grappelli', )
|
|
self.assertIn('grappelli', settings.INSTALLED_APPS)
|
|
admin = BandAdmin(Band, self.site)
|
|
medias = admin.media
|
|
self.assertTrue(len(medias._css) > 0)
|
|
self.assertIn('all', medias._css)
|
|
self.assertTrue(len(medias._css['all']) == 1)
|
|
self.assertIn('grappelli', medias._css['all'][0])
|
|
|
|
|
|
class TabbedAdminTagsTest(TestCase):
|
|
|
|
def setUp(self):
|
|
self.site = AdminSite()
|
|
self.admin = BandAdmin(Band, self.site)
|
|
self.req = request.get('/admin/tabbed_admin/tab/')
|
|
self.req.user = request.user
|
|
self.view = self.admin.add_view(self.req)
|
|
self.context = Context(self.view)
|
|
self.context.push()
|
|
self.context['adminform'] = self.view.context_data['adminform']
|
|
self.context['request'] = self.req
|
|
self.context['inline_admin_formsets'] = self.view.context_data['inline_admin_formsets']
|
|
|
|
def test_request_not_in_context_raising_improperly_configured(self):
|
|
"""
|
|
Tests if an exception is thrown when no request is passed.
|
|
"""
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
context = self.context
|
|
del context['request']
|
|
self.assertRaises(ImproperlyConfigured, render_tab_fieldsets_inlines, self.context, [])
|
|
|
|
def test_fieldset_passed_returns_fieldset_templated(self):
|
|
"""
|
|
Tests if the fieldset html is correctly generated when a fieldset is passed
|
|
"""
|
|
fieldset = self.view.context_data['tabs']['fields'][0]['entries'][0]
|
|
self.assertEqual('fieldset', fieldset['type'])
|
|
#tag = render_tab_fieldsets_inlines(self.context, fieldset)
|
|
#self.assertIn('fieldset', tag)
|
|
|
|
def test_inline_passed_returns_inline_templated(self):
|
|
"""
|
|
Tests if an inline html is correctly generated when an inline is passed.
|
|
"""
|
|
inline = self.view.context_data['tabs']['fields'][0]['entries'][1]
|
|
self.assertEqual('inline', inline['type'])
|
|
#tag = render_tab_fieldsets_inlines(self.context, inline)
|
|
#self.assertIn('inline', tag)
|
|
|
|
def test_wrong_inline_key_returns_nothing(self):
|
|
"""
|
|
Tests if a worng inline naming returns nothing.
|
|
"""
|
|
inline = self.view.context_data['tabs']['fields'][0]['entries'][1]
|
|
self.assertEqual('inline', inline['type'])
|
|
inline['name'] = 'Not exists'
|
|
tag = render_tab_fieldsets_inlines(self.context, inline)
|
|
self.assertEqual('', tag)
|