Skip to content

Commit

Permalink
makes can template tag compatible with django 11
Browse files Browse the repository at this point in the history
  • Loading branch information
filipeximenes committed Mar 23, 2017
1 parent 9373ba0 commit f9025ab
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 7 deletions.
8 changes: 7 additions & 1 deletion rolepermissions/templatetags/permission_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
98 changes: 92 additions & 6 deletions rolepermissions/tests/test_template_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from model_mommy import mommy

from rolepermissions.roles import AbstractUserRole
from rolepermissions.permissions import register_object_checker


class TemRole1(AbstractUserRole):
Expand All @@ -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

Expand Down Expand Up @@ -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)

0 comments on commit f9025ab

Please sign in to comment.