108 lines
3.5 KiB
Python
108 lines
3.5 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
from django.template import Context
|
|
from django.urls import reverse
|
|
|
|
from acls.models import AccessControlList
|
|
from common.tests.literals import TEST_VIEW_NAME
|
|
from common.tests.test_views import GenericViewTestCase
|
|
from permissions import Permission, PermissionNamespace
|
|
from user_management.tests import TEST_USER_PASSWORD, TEST_USER_USERNAME
|
|
|
|
from ..classes import Link
|
|
|
|
TEST_PERMISSION_NAMESPACE_NAME = 'test namespace name'
|
|
TEST_PERMISSION_NAMESPACE_TEXT = 'test namespace text'
|
|
TEST_PERMISSION_NAME = 'test permission name'
|
|
TEST_PERMISSION_LABEL = 'test permission label'
|
|
TEST_LINK_TEXT = 'test link text'
|
|
|
|
|
|
class LinkClassTestCase(GenericViewTestCase):
|
|
def setUp(self):
|
|
super(LinkClassTestCase, self).setUp()
|
|
|
|
self.add_test_view(test_object=self.group)
|
|
|
|
self.namespace = PermissionNamespace(
|
|
TEST_PERMISSION_NAMESPACE_NAME, TEST_PERMISSION_NAMESPACE_TEXT
|
|
)
|
|
|
|
self.permission = self.namespace.add_permission(
|
|
name=TEST_PERMISSION_NAME, label=TEST_PERMISSION_LABEL
|
|
)
|
|
|
|
self.link = Link(text=TEST_LINK_TEXT, view=TEST_VIEW_NAME)
|
|
Permission.invalidate_cache()
|
|
|
|
def test_link_resolve(self):
|
|
response = self.get(TEST_VIEW_NAME)
|
|
context = Context({'request': response.wsgi_request})
|
|
|
|
resolved_link = self.link.resolve(context=context)
|
|
|
|
self.assertEqual(resolved_link.url, reverse(TEST_VIEW_NAME))
|
|
|
|
def test_link_permission_resolve_no_permission(self):
|
|
self.login(
|
|
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
|
)
|
|
|
|
link = Link(
|
|
permissions=(self.permission,), text=TEST_LINK_TEXT,
|
|
view=TEST_VIEW_NAME
|
|
)
|
|
|
|
response = self.get(TEST_VIEW_NAME)
|
|
response.context.update({'request': response.wsgi_request})
|
|
context = Context(response.context)
|
|
|
|
resolved_link = link.resolve(context=context)
|
|
|
|
self.assertEqual(resolved_link, None)
|
|
|
|
def test_link_permission_resolve_with_permission(self):
|
|
self.login(
|
|
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
|
)
|
|
|
|
link = Link(
|
|
permissions=(self.permission,), text=TEST_LINK_TEXT,
|
|
view=TEST_VIEW_NAME
|
|
)
|
|
|
|
self.role.permissions.add(self.permission.stored_permission)
|
|
|
|
response = self.get(TEST_VIEW_NAME)
|
|
response.context.update({'request': response.wsgi_request})
|
|
context = Context(response.context)
|
|
|
|
resolved_link = link.resolve(context=context)
|
|
|
|
self.assertEqual(resolved_link.url, reverse(TEST_VIEW_NAME))
|
|
|
|
def test_link_permission_resolve_with_acl(self):
|
|
# ACL is tested agains the resolved_object or just {{ object }} if not
|
|
self.login(
|
|
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
|
)
|
|
|
|
link = Link(
|
|
permissions=(self.permission,), text=TEST_LINK_TEXT,
|
|
view=TEST_VIEW_NAME
|
|
)
|
|
|
|
acl = AccessControlList.objects.create(
|
|
content_object=self.group, role=self.role
|
|
)
|
|
acl.permissions.add(self.permission.stored_permission)
|
|
|
|
response = self.get(TEST_VIEW_NAME)
|
|
response.context.update({'request': response.wsgi_request})
|
|
context = Context(response.context)
|
|
|
|
resolved_link = link.resolve(context=context)
|
|
|
|
self.assertNotEqual(resolved_link, None)
|
|
self.assertEqual(resolved_link.url, reverse(TEST_VIEW_NAME))
|