Source code for permission.tests.test_templatetags.test_permissionif
# coding=utf-8
"""
"""
__author__ = 'Alisue <lambdalisue@hashnote.net>'
from django.test import TestCase
from django.template import Context
from django.template import Template
from permission.tests.utils import create_user
from permission.tests.utils import create_article
from permission.tests.utils import create_permission
from permission.tests.compatibility import override_settings
from permission.utils.handlers import registry
@override_settings(
AUTHENTICATION_BACKENDS=(
'django.contrib.auth.backends.ModelBackend',
'permission.backends.PermissionBackend',
),
PERMISSION_REPLACE_BUILTIN_IF=False,
)
[docs]class PermissionTemplateTagsTestCase(TestCase):
[docs] def setUp(self):
# store original registry
self._original_registry = registry._registry
# clear registry and register mock handler
registry._registry = {}
[docs] def test_permissionif_tag(self):
user = create_user('permission_templatetag_test_user1')
perm = create_permission('permission_templatetag_test_perm1')
user.user_permissions.add(perm)
self.assertTrue(user.has_perm(
'permission.permission_templatetag_test_perm1'))
context = Context({
'user': user,
})
out = Template(
"{% load permissionif %}"
"{% permission user has "
"'permission.permission_templatetag_test_perm1' %}"
"Success"
"{% else %}"
"Fail"
"{% endpermission %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_permissionif_tag_elif(self):
user = create_user('permission_templatetag_test_user1')
perm = create_permission('permission_templatetag_test_perm1')
user.user_permissions.add(perm)
self.assertTrue(user.has_perm(
'permission.permission_templatetag_test_perm1'))
context = Context({
'user': user,
})
out = Template(
"{% load permissionif %}"
"{% permission user has 'permission.unknown_permission' %}"
"Fail"
"{% elpermission user has 'permission.unknown_permisson2' %}"
"Fail"
"{% elpermission user has "
"'permission.permission_templatetag_test_perm1' %}"
"Success"
"{% else %}"
"Fail"
"{% endpermission %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_permissionif_tag_else(self):
user = create_user('permission_templatetag_test_user1')
perm = create_permission('permission_templatetag_test_perm1')
user.user_permissions.add(perm)
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1'))
context = Context({
'user': user,
})
out = Template(
"{% load permissionif %}"
"{% permission user has 'permission.unknown_permission' %}"
"Fail"
"{% else %}"
"Success"
"{% endpermission %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_permissionif_tag_with_obj(self):
from permission.tests.models import Article
from permission.handlers import PermissionHandler
user = create_user('permission_templatetag_test_user1')
art1 = create_article('permission_templatetag_test_article1')
art2 = create_article('permission_templatetag_test_article2')
create_permission('permission_templatetag_test_perm1')
class ArticlePermissionHandler(PermissionHandler):
def has_perm(self, user_obj, perm, obj=None):
if perm == 'permission.permission_templatetag_test_perm1':
if (obj and obj.title ==
'permission_templatetag_test_article2'):
return True
return False
registry.register(Article, ArticlePermissionHandler)
self.assertFalse(
user.has_perm('permission.permission_templatetag_test_perm1'))
self.assertFalse(
user.has_perm('permission.permission_templatetag_test_perm1',
art1))
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1',
art2))
context = Context({
'user': user,
'art1': art1,
'art2': art2,
})
out = Template(
"{% load permissionif %}"
"{% permission user has "
"'permission.permission_templatetag_test_perm1' %}"
"Fail"
"{% elpermission user has "
"'permission.permission_templatetag_test_perm1' of art1 %}"
"Fail"
"{% elpermission user has "
"'permission.permission_templatetag_test_perm1' of art2 %}"
"Success"
"{% else %}"
"Fail"
"{% endpermission %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_permissionif_tag_and(self):
user = create_user('permission_templatetag_test_user1')
perm1 = create_permission('permission_templatetag_test_perm1')
perm2 = create_permission('permission_templatetag_test_perm2')
user.user_permissions.add(perm1, perm2)
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1'))
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm2'))
context = Context({
'user': user,
})
out = Template(
"{% load permissionif %}"
"{% permission user has 'permission.unknown_perm' "
"and user has 'permission.permission_templatetag_test_perm2' %}"
"Fail"
"{% elpermission user has "
"'permission.permission_templatetag_test_perm1' "
"and user has 'permission.unknown_perm' %}"
"Fail"
"{% elpermission user has "
"'permission.permission_templatetag_test_perm1' "
"and user has 'permission.permission_templatetag_test_perm2' %}"
"Success"
"{% endpermission %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_permissionif_tag_or(self):
user = create_user('permission_templatetag_test_user1')
perm1 = create_permission('permission_templatetag_test_perm1')
create_permission('permission_templatetag_test_perm2')
user.user_permissions.add(perm1)
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1'))
self.assertFalse(
user.has_perm('permission.permission_templatetag_test_perm2'))
context = Context({
'user': user,
})
out = Template(
"{% load permissionif %}"
"{% permission user has "
"'permission.permission_templatetag_test_perm1' "
"and user has 'permission.permission_templatetag_test_perm2' %}"
"Fail"
"{% elpermission user has "
"'permission.permission_templatetag_test_perm1' "
"or user has 'permission.permission_templatetag_test_perm2' %}"
"Success"
"{% endpermission %}"
).render(context)
self.assertEqual(out, "Success")
@override_settings(
AUTHENTICATION_BACKENDS=(
'django.contrib.auth.backends.ModelBackend',
'permission.backends.PermissionBackend',
),
PERMISSION_REPLACE_BUILTIN_IF=True,
)
[docs]class PermissionTemplateTagsWithBuiltinTestCase(TestCase):
[docs] def setUp(self):
# store original registry
self._original_registry = registry._registry
# clear registry and register mock handler
registry._registry = {}
[docs] def test_if_tag(self):
user = create_user('permission_templatetag_test_user1')
perm = create_permission('permission_templatetag_test_perm1')
user.user_permissions.add(perm)
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1'))
context = Context({
'user': user,
})
out = Template(
"{% if user has 'permission.permission_templatetag_test_perm1' %}"
"Success"
"{% else %}"
"Fail"
"{% endif %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_if_tag_elif(self):
user = create_user('permission_templatetag_test_user1')
perm = create_permission('permission_templatetag_test_perm1')
user.user_permissions.add(perm)
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1'))
context = Context({
'user': user,
})
out = Template(
"{% if user has 'permission.unknown_permission' %}"
"Fail"
"{% elif user has 'permission.unknown_permisson2' %}"
"Fail"
"{% elif user has "
"'permission.permission_templatetag_test_perm1' %}"
"Success"
"{% else %}"
"Fail"
"{% endif %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_if_tag_else(self):
user = create_user('permission_templatetag_test_user1')
perm = create_permission('permission_templatetag_test_perm1')
user.user_permissions.add(perm)
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1'))
context = Context({
'user': user,
})
out = Template(
"{% if user has 'permission.unknown_permission' %}"
"Fail"
"{% else %}"
"Success"
"{% endif %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_if_tag_with_obj(self):
from permission.tests.models import Article
from permission.handlers import PermissionHandler
user = create_user('permission_templatetag_test_user1')
art1 = create_article('permission_templatetag_test_article1')
art2 = create_article('permission_templatetag_test_article2')
create_permission('permission_templatetag_test_perm1')
class ArticlePermissionHandler(PermissionHandler):
def has_perm(self, user_obj, perm, obj=None):
if perm == 'permission.permission_templatetag_test_perm1':
if (obj and obj.title ==
'permission_templatetag_test_article2'):
return True
return False
registry.register(Article, ArticlePermissionHandler)
self.assertFalse(
user.has_perm('permission.permission_templatetag_test_perm1'))
self.assertFalse(
user.has_perm('permission.permission_templatetag_test_perm1',
art1))
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1',
art2))
context = Context({
'user': user,
'art1': art1,
'art2': art2,
})
out = Template(
"{% if user has 'permission.permission_templatetag_test_perm1' %}"
"Fail"
"{% elif user has "
"'permission.permission_templatetag_test_perm1' of art1 %}"
"Fail"
"{% elif user has "
"'permission.permission_templatetag_test_perm1' of art2 %}"
"Success"
"{% else %}"
"Fail"
"{% endif %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_if_tag_and(self):
user = create_user('permission_templatetag_test_user1')
perm1 = create_permission('permission_templatetag_test_perm1')
perm2 = create_permission('permission_templatetag_test_perm2')
user.user_permissions.add(perm1, perm2)
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1'))
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm2'))
context = Context({
'user': user,
})
out = Template(
"{% if user has 'permission.unknown_perm' "
"and user has 'permission.permission_templatetag_test_perm2' %}"
"Fail"
"{% elif user has 'permission.permission_templatetag_test_perm1' "
"and user has 'permission.unknown_perm' %}"
"Fail"
"{% elif user has 'permission.permission_templatetag_test_perm1' "
"and user has 'permission.permission_templatetag_test_perm2' %}"
"Success"
"{% endif %}"
).render(context)
self.assertEqual(out, "Success")
[docs] def test_if_tag_or(self):
user = create_user('permission_templatetag_test_user1')
perm1 = create_permission('permission_templatetag_test_perm1')
create_permission('permission_templatetag_test_perm2')
user.user_permissions.add(perm1)
self.assertTrue(
user.has_perm('permission.permission_templatetag_test_perm1'))
self.assertFalse(
user.has_perm('permission.permission_templatetag_test_perm2'))
context = Context({
'user': user,
})
out = Template(
"{% if user has 'permission.permission_templatetag_test_perm1' "
"and user has 'permission.permission_templatetag_test_perm2' %}"
"Fail"
"{% elif user has 'permission.permission_templatetag_test_perm1' "
"or user has 'permission.permission_templatetag_test_perm2' %}"
"Success"
"{% endif %}"
).render(context)
self.assertEqual(out, "Success")