labs/tabbed_admin/tests/tests.py

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)