From f9025ab5ff590fe865bbd136051e271e09248307 Mon Sep 17 00:00:00 2001 From: Filipe Ximenes Date: Thu, 23 Mar 2017 10:43:53 -0300 Subject: [PATCH] makes can template tag compatible with django 11 --- .../templatetags/permission_tags.py | 8 +- rolepermissions/tests/test_template_tags.py | 98 +++++++++++++++++-- 2 files changed, 99 insertions(+), 7 deletions(-) diff --git a/rolepermissions/templatetags/permission_tags.py b/rolepermissions/templatetags/permission_tags.py index 2fc8a06..342f8c9 100644 --- a/rolepermissions/templatetags/permission_tags.py +++ b/rolepermissions/templatetags/permission_tags.py @@ -19,7 +19,13 @@ def can_template_tag(user, role): return has_permission(user, role) -@register.assignment_tag(name='can', takes_context=True) +if hasattr(register, 'assignment_tag'): + tag_registter = register.assignment_tag +else: + tag_registter = register.simple_tag + + +@tag_registter(name='can', takes_context=True) def has_permission_template_tag(context, permission, obj, user=None): if not user: user = context.get('user') diff --git a/rolepermissions/tests/test_template_tags.py b/rolepermissions/tests/test_template_tags.py index 56bfbf1..fba0b9a 100644 --- a/rolepermissions/tests/test_template_tags.py +++ b/rolepermissions/tests/test_template_tags.py @@ -6,6 +6,7 @@ from model_mommy import mommy from rolepermissions.roles import AbstractUserRole +from rolepermissions.permissions import register_object_checker class TemRole1(AbstractUserRole): @@ -28,18 +29,21 @@ class TemRole3(AbstractUserRole): } -class HasRoleTests(TestCase): - - def setUp(self): - self.user = mommy.make(get_user_model()) - - TemRole1.assign_role_to_user(self.user) +class BaseTagTestCase(TestCase): def tag_test(self, template, context, output): t = Template('{% load permission_tags %}'+template) c = Context(context) self.assertEqual(t.render(c), output) + +class HasRoleTests(BaseTagTestCase): + + def setUp(self): + self.user = mommy.make(get_user_model()) + + TemRole1.assign_role_to_user(self.user) + def test_has_role_tag(self): user = self.user @@ -78,3 +82,85 @@ def test_does_not_have_role_tag_with_multiple_roles(self): output = '' self.tag_test(template, context, output) + + +class CanFilterTests(BaseTagTestCase): + + def setUp(self): + self.user = mommy.make(get_user_model()) + + TemRole1.assign_role_to_user(self.user) + + def test_can_see(self): + user = self.user + + template = ( + "{% if user|can:'permission1' %}passed{% endif %}") + + context = { + 'user': user, + } + + output = 'passed' + + self.tag_test(template, context, output) + + def test_can_not_see(self): + user = self.user + + template = ( + "{% if user|can:'permission3' %}passed{% endif %}") + + context = { + 'user': user, + } + + output = '' + + self.tag_test(template, context, output) + + +class CanTagTests(BaseTagTestCase): + + def setUp(self): + self.user = mommy.make(get_user_model()) + + TemRole1.assign_role_to_user(self.user) + + def test_can_print_stuff(self): + user = self.user + + @register_object_checker() + def can_print_stuff(role, user, clinic): + return True + + template = ( + "{% can 'can_print_stuff' '' as can_print %}" + "{% if can_print %}passed{% endif %}") + + context = { + 'user': user, + } + + output = 'passed' + + self.tag_test(template, context, output) + + def test_can_not_print_stuff(self): + user = self.user + + @register_object_checker() + def can_print_stuff(role, user, clinic): + return False + + template = ( + "{% can 'can_print_stuff' '' as can_print %}" + "{% if can_print %}passed{% endif %}") + + context = { + 'user': user, + } + + output = '' + + self.tag_test(template, context, output)