dynamicweb/cms/tests/test_page_user_group_admin.py

477 lines
18 KiB
Python

from django.contrib.messages.storage.cookie import CookieStorage
from django.forms.models import model_to_dict
from django.test.utils import override_settings
from cms.models.permissionmodels import PageUserGroup
from cms.test_utils.testcases import CMSTestCase
from cms.utils.urlutils import admin_reverse
class PermissionsOnTestCase(CMSTestCase):
def _group_exists(self, name=None):
if not name:
name = 'Test group'
return PageUserGroup.objects.filter(name=name).exists()
def _get_group_data(self, **kwargs):
data = {
'name': 'Test group',
'can_add_page': 'on',
'can_change_page': 'on',
'can_delete_page': 'on',
}
data.update(**kwargs)
return data
def _get_group(self, created_by=None):
if not created_by:
created_by = self.get_superuser()
data = {
'name': 'Test group',
'created_by': created_by,
}
return PageUserGroup.objects.create(**data)
@override_settings(CMS_PERMISSION=True)
class PermissionsOnGlobalTest(PermissionsOnTestCase):
def test_group_in_admin_index(self):
endpoint = admin_reverse('app_list', args=['cms'])
staff_user = self.get_staff_user_with_no_permissions()
self.add_permission(staff_user, 'change_pageusergroup')
self.add_global_permission(staff_user, can_change_permissions=True)
with self.login_user_context(staff_user):
response = self.client.get(endpoint)
self.assertEqual(response.status_code, 200)
self.assertContains(
response,
'<a href="/en/admin/cms/pageusergroup/">User groups (page)</a>',
html=True,
)
endpoint = self.get_admin_url(PageUserGroup, 'changelist')
with self.login_user_context(staff_user):
response = self.client.get(endpoint)
self.assertEqual(response.status_code, 200)
def test_group_not_in_admin_index(self):
endpoint = admin_reverse('app_list', args=['cms'])
staff_user = self.get_staff_user_with_no_permissions()
self.add_permission(staff_user, 'change_pageusergroup')
self.add_global_permission(staff_user, can_change_permissions=False)
with self.login_user_context(staff_user):
response = self.client.get(endpoint)
self.assertEqual(response.status_code, 404)
endpoint = self.get_admin_url(PageUserGroup, 'changelist')
with self.login_user_context(staff_user):
response = self.client.get(endpoint)
self.assertEqual(response.status_code, 403)
def test_user_can_add_group(self):
endpoint = self.get_admin_url(PageUserGroup, 'add')
redirect_to = admin_reverse('index')
staff_user = self.get_staff_user_with_no_permissions()
data = self._get_group_data()
self.add_permission(staff_user, 'add_pageusergroup')
self.add_global_permission(staff_user, can_change_permissions=True)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
self.assertTrue(self._group_exists())
def test_user_cant_add_group(self):
endpoint = self.get_admin_url(PageUserGroup, 'add')
staff_user = self.get_staff_user_with_no_permissions()
data = self._get_group_data()
self.add_permission(staff_user, 'add_pageusergroup')
self.add_global_permission(staff_user, can_change_permissions=False)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertEqual(response.status_code, 403)
self.assertFalse(self._group_exists())
def test_user_can_change_group(self):
group = self._get_group()
endpoint = self.get_admin_url(PageUserGroup, 'change', group.pk)
redirect_to = self.get_admin_url(PageUserGroup, 'changelist')
staff_user = self.get_staff_user_with_no_permissions()
data = self._get_group_data(name='New test group')
self.add_permission(staff_user, 'change_pageusergroup')
self.add_global_permission(staff_user, can_change_permissions=True)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
self.assertTrue(self._group_exists('New test group'))
def test_user_cant_change_group(self):
group = self._get_group()
endpoint = self.get_admin_url(PageUserGroup, 'change', group.pk)
staff_user = self.get_staff_user_with_no_permissions()
data = self._get_group_data(name='New test group')
self.add_permission(staff_user, 'change_pageusergroup')
self.add_global_permission(staff_user, can_change_permissions=False)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertEqual(response.status_code, 403)
self.assertTrue(self._group_exists())
def test_user_can_delete_group(self):
group = self._get_group()
endpoint = self.get_admin_url(PageUserGroup, 'delete', group.pk)
redirect_to = admin_reverse('index')
staff_user = self.get_staff_user_with_no_permissions()
data = {'post': 'yes'}
self.add_permission(staff_user, 'delete_group')
self.add_permission(staff_user, 'delete_pageusergroup')
self.add_global_permission(staff_user, can_change_permissions=True)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
self.assertFalse(self._group_exists())
def test_user_cant_delete_group(self):
group = self._get_group()
endpoint = self.get_admin_url(PageUserGroup, 'delete', group.pk)
staff_user = self.get_staff_user_with_no_permissions()
data = {'post': 'yes'}
self.add_permission(staff_user, 'delete_group')
self.add_permission(staff_user, 'delete_pageusergroup')
self.add_global_permission(staff_user, can_change_permissions=False)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertEqual(response.status_code, 403)
self.assertTrue(self._group_exists())
@override_settings(CMS_PERMISSION=True)
class PermissionsOnPageTest(PermissionsOnTestCase):
"""
Uses PagePermission
"""
def setUp(self):
self._permissions_page = self.get_permissions_test_page()
def test_group_in_admin_index(self):
endpoint = admin_reverse('app_list', args=['cms'])
staff_user = self.get_staff_user_with_no_permissions()
self.add_permission(staff_user, 'change_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=True,
)
with self.login_user_context(staff_user):
response = self.client.get(endpoint)
self.assertEqual(response.status_code, 200)
self.assertContains(
response,
'<a href="/en/admin/cms/pageusergroup/">User groups (page)</a>',
html=True,
)
endpoint = self.get_admin_url(PageUserGroup, 'changelist')
with self.login_user_context(staff_user):
response = self.client.get(endpoint)
self.assertEqual(response.status_code, 200)
def test_group_not_in_admin_index(self):
endpoint = admin_reverse('app_list', args=['cms'])
staff_user = self.get_staff_user_with_no_permissions()
self.add_permission(staff_user, 'change_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=False,
)
with self.login_user_context(staff_user):
response = self.client.get(endpoint)
self.assertEqual(response.status_code, 404)
endpoint = self.get_admin_url(PageUserGroup, 'changelist')
with self.login_user_context(staff_user):
response = self.client.get(endpoint)
self.assertEqual(response.status_code, 403)
def test_user_can_add_group(self):
"""
User can add new groups if can_change_permissions
is set to True.
"""
endpoint = self.get_admin_url(PageUserGroup, 'add')
redirect_to = admin_reverse('index')
staff_user = self.get_staff_user_with_no_permissions()
data = self._get_group_data()
self.add_permission(staff_user, 'add_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=True,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
self.assertTrue(self._group_exists())
def test_user_cant_add_group(self):
"""
User can't add new groups if can_change_permissions
is set to False.
"""
endpoint = self.get_admin_url(PageUserGroup, 'add')
staff_user = self.get_staff_user_with_no_permissions()
data = self._get_group_data()
self.add_permission(staff_user, 'add_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=False,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertEqual(response.status_code, 403)
self.assertFalse(self._group_exists())
def test_user_can_change_subordinate_group(self):
"""
User can change groups he created if can_change_permissions
is set to True.
"""
staff_user = self.get_staff_user_with_no_permissions()
group = self._get_group(created_by=staff_user)
endpoint = self.get_admin_url(PageUserGroup, 'change', group.pk)
data = model_to_dict(group)
data['_continue'] = '1'
data['name'] = 'New test group'
self.add_permission(staff_user, 'change_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=True,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, endpoint)
self.assertTrue(self._group_exists('New test group'))
def test_user_cant_change_subordinate_group(self):
"""
User cant change groups he created if can_change_permissions
is set to False.
"""
staff_user = self.get_staff_user_with_no_permissions()
group = self._get_group(created_by=staff_user)
endpoint = self.get_admin_url(PageUserGroup, 'change', group.pk)
data = model_to_dict(group)
data['_continue'] = '1'
data['name'] = 'New test group'
self.add_permission(staff_user, 'change_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=False,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertEqual(response.status_code, 403)
self.assertFalse(self._group_exists('New test group'))
def test_user_cant_change_own_group(self):
"""
User cant change a group he's a part of,
even with can_change_permissions set to True.
"""
group = self._get_group()
staff_user = self.get_staff_user_with_no_permissions()
staff_user.groups.add(group)
endpoint = self.get_admin_url(PageUserGroup, 'change', group.pk)
redirect_to = admin_reverse('index')
data = model_to_dict(group)
data['_continue'] = '1'
data['name'] = 'New test group'
self.add_permission(staff_user, 'change_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=True,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
msgs = CookieStorage(response)._decode(response.cookies['messages'].value)
self.assertTrue(msgs[0], PageUserGroup._meta.verbose_name)
self.assertTrue(msgs[0], 'ID "%s"' % group.pk)
self.assertFalse(self._group_exists('New test group'))
def test_user_cant_change_others_group(self):
"""
User cant change a group created by another user,
even with can_change_permissions set to True.
"""
admin = self.get_superuser()
group = self._get_group(created_by=admin)
staff_user = self.get_staff_user_with_no_permissions()
endpoint = self.get_admin_url(PageUserGroup, 'change', group.pk)
redirect_to = admin_reverse('index')
data = model_to_dict(group)
data['_continue'] = '1'
data['name'] = 'New test group'
self.add_permission(staff_user, 'change_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=True,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
msgs = CookieStorage(response)._decode(response.cookies['messages'].value)
self.assertTrue(msgs[0], PageUserGroup._meta.verbose_name)
self.assertTrue(msgs[0], 'ID "%s"' % group.pk)
self.assertFalse(self._group_exists('New test group'))
def test_user_can_delete_subordinate_group(self):
"""
User can delete groups he created if can_change_permissions
is set to True.
"""
staff_user = self.get_staff_user_with_no_permissions()
group = self._get_group(created_by=staff_user)
endpoint = self.get_admin_url(PageUserGroup, 'delete', group.pk)
redirect_to = admin_reverse('index')
data = {'post': 'yes'}
self.add_permission(staff_user, 'delete_group')
self.add_permission(staff_user, 'delete_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=True,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
self.assertFalse(self._group_exists())
def test_user_cant_delete_subordinate_group(self):
"""
User cant delete groups he created if can_change_permissions
is set to False.
"""
staff_user = self.get_staff_user_with_no_permissions()
group = self._get_group(created_by=staff_user)
endpoint = self.get_admin_url(PageUserGroup, 'delete', group.pk)
data = {'post': 'yes'}
self.add_permission(staff_user, 'delete_group')
self.add_permission(staff_user, 'delete_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=False,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertEqual(response.status_code, 403)
self.assertTrue(self._group_exists())
def test_user_cant_delete_own_group(self):
"""
User cant delete a group he's a part of,
even with can_change_permissions set to True.
"""
group = self._get_group()
staff_user = self.get_staff_user_with_no_permissions()
staff_user.groups.add(group)
endpoint = self.get_admin_url(PageUserGroup, 'delete', group.pk)
redirect_to = admin_reverse('index')
data = {'post': 'yes'}
self.add_permission(staff_user, 'delete_group')
self.add_permission(staff_user, 'delete_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=True,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
msgs = CookieStorage(response)._decode(response.cookies['messages'].value)
self.assertTrue(msgs[0], PageUserGroup._meta.verbose_name)
self.assertTrue(msgs[0], 'ID "%s"' % group.pk)
self.assertTrue(self._group_exists())
def test_user_cant_delete_others_group(self):
"""
User cant delete a group created by another user,
even with can_change_permissions set to True.
"""
admin = self.get_superuser()
group = self._get_group(created_by=admin)
staff_user = self.get_staff_user_with_no_permissions()
endpoint = self.get_admin_url(PageUserGroup, 'delete', group.pk)
redirect_to = admin_reverse('index')
data = {'post': 'yes'}
self.add_permission(staff_user, 'delete_group')
self.add_permission(staff_user, 'delete_pageusergroup')
self.add_page_permission(
staff_user,
self._permissions_page,
can_change_permissions=True,
)
with self.login_user_context(staff_user):
response = self.client.post(endpoint, data)
self.assertRedirects(response, redirect_to)
msgs = CookieStorage(response)._decode(response.cookies['messages'].value)
self.assertTrue(msgs[0], PageUserGroup._meta.verbose_name)
self.assertTrue(msgs[0], 'ID "%s"' % group.pk)
self.assertTrue(self._group_exists())