128 lines
5.4 KiB
Python
128 lines
5.4 KiB
Python
from django.apps import apps
|
|
from django.contrib.auth import get_user_model
|
|
from django.contrib.auth.models import Group
|
|
from django.test import TestCase
|
|
|
|
from ..roles import get_system_user, get_ghost_user, get_group_members
|
|
from ..roles import get_group_names_by_role, get_users_by_role, has_role
|
|
|
|
from .generic import RoleMixin
|
|
|
|
|
|
class RolesTestCase(RoleMixin, TestCase):
|
|
def test_get_system_user(self):
|
|
u = get_system_user()
|
|
self.assertIsInstance(u, get_user_model())
|
|
self.assertEqual(u.username, '-system-')
|
|
self.assertIsNotNone(u.pk)
|
|
|
|
def test_get_ghost_user(self):
|
|
u = get_ghost_user()
|
|
self.assertIsInstance(u, get_user_model())
|
|
self.assertEqual(u.username, '-deleted-')
|
|
self.assertIsNotNone(u.pk)
|
|
|
|
def test_group_members(self):
|
|
# Create some groups
|
|
g1 = Group(name='gruppe1')
|
|
g1.save()
|
|
g2 = Group(name='gruppe2')
|
|
g2.save()
|
|
|
|
# Create some users and add them to groups
|
|
user_model = get_user_model()
|
|
u1 = user_model(username='user1')
|
|
u1.save()
|
|
g1.user_set.add(u1)
|
|
u2 = user_model(username='user2')
|
|
u2.save()
|
|
g1.user_set.add(u2)
|
|
u3 = user_model(username='user3')
|
|
u3.save()
|
|
g2.user_set.add(u3)
|
|
|
|
# Create a user, that will belong to no group
|
|
u4 = user_model(username='user4')
|
|
u4.save()
|
|
|
|
# Check results of get_group_members
|
|
self.assertSequenceEqual(get_group_members('gruppe1'), [u1, u2])
|
|
self.assertSequenceEqual(get_group_members('gruppe2'), [u3])
|
|
with self.assertRaises(Group.DoesNotExist):
|
|
get_group_members('gruppe3')
|
|
self.assertSequenceEqual(get_group_members('gruppe3', ignore_missing=True), [])
|
|
|
|
def test_get_group_names_by_role_default_config(self):
|
|
test_data = [
|
|
('publisher_print', ['Redaktion_KA-Alpin']),
|
|
('publisher_web', ['Redaktion_Joomla']),
|
|
('publisher_facebook', ['Redaktion_Facebook']),
|
|
('manager_w', ['Bereichsleiter_Wandern', 'Tourenreferenten']),
|
|
('manager_s', ['Bereichsleiter_Ski', 'Tourenreferenten']),
|
|
('manager_m', ['Bereichsleiter_MTB', 'Tourenreferenten']),
|
|
('manager_k', ['Bereichsleiter_Klettern', 'Tourenreferenten']),
|
|
('manager_b', ['Bereichsleiter_Bergsteigen', 'Tourenreferenten']),
|
|
('manager_super', ['Tourenreferenten']),
|
|
('publisher', ['Redaktion_KA-Alpin', 'Redaktion_Joomla', 'Redaktion_Facebook']),
|
|
('manager', ['Bereichsleiter_Wandern', 'Bereichsleiter_Ski', 'Bereichsleiter_MTB',
|
|
'Bereichsleiter_Klettern', 'Bereichsleiter_Bergsteigen', 'Tourenreferenten']),
|
|
('office', ['Geschaeftsstelle']),
|
|
]
|
|
for role, expected_group_names in test_data:
|
|
group_names = get_group_names_by_role(role)
|
|
self.assertEqual(len(group_names), len(expected_group_names))
|
|
for name in group_names:
|
|
self.assertIn(name, expected_group_names)
|
|
|
|
def get_group_names_by_role_adhoc_config(self):
|
|
role_name = 'manager_w'
|
|
super_role_name = 'manager_super'
|
|
role_groups = ['group1', 'group2']
|
|
super_role_groups = ['group3', 'group4']
|
|
|
|
role_setting = 'groups_{}'.format(role_name)
|
|
super_role_setting = 'groups_{}'.format(super_role_name)
|
|
|
|
app_config = apps.get_app_config('dav_events')
|
|
|
|
buf_role_setting = getattr(app_config.settings, role_setting)
|
|
buf_super_role_setting = getattr(app_config.settings, super_role_setting)
|
|
|
|
setattr(app_config.settings, role_setting, role_groups)
|
|
setattr(app_config.settings, super_role_setting, super_role_groups)
|
|
|
|
expected_groups = role_groups + super_role_groups
|
|
self.assertSequenceEqual(get_group_names_by_role(role_name), expected_groups)
|
|
|
|
setattr(app_config.settings, role_setting, buf_role_setting)
|
|
setattr(app_config.settings, super_role_setting, buf_super_role_setting)
|
|
|
|
def test_get_group_names_by_role_notexist(self):
|
|
self.assertSequenceEqual(get_group_names_by_role('not_existing_test_role'), [])
|
|
|
|
def test_get_users_by_role(self):
|
|
u1 = self.create_user_for_role('manager_super', 'Touren', 'Referent')
|
|
u2 = self.create_user_for_role('manager_super', 'Praktikant', 'Referent')
|
|
u3 = self.create_user_for_role('manager_w', 'Bereichsleiter', 'Wandern')
|
|
u4 = self.create_user_for_role('manager_w', 'Praktikant', 'Wandern')
|
|
u5 = self.create_user_for_role('manager_s', 'Bereichsleiter', 'Ski')
|
|
users = get_users_by_role('manager_w')
|
|
self.assertSequenceEqual(users, [u1, u2, u3, u4])
|
|
|
|
def test_has_role(self):
|
|
u1 = self.create_user_for_role('test_role1', 'User1', 'Test')
|
|
u2 = self.create_user_for_role('test_role1', 'User2', 'Test')
|
|
u3 = self.create_user_for_role('test_role2', 'User3', 'Test')
|
|
u4 = self.create_user_for_role('test_role2', 'User4', 'Test')
|
|
|
|
g1 = u1.groups.first()
|
|
g1.user_set.add(u4)
|
|
|
|
self.assertTrue(has_role(u1, 'test_role1'))
|
|
self.assertFalse(has_role(u1, 'test_role2'))
|
|
self.assertTrue(has_role(u2, 'test_role1'))
|
|
self.assertFalse(has_role(u2, 'test_role2'))
|
|
self.assertFalse(has_role(u3, 'test_role1'))
|
|
self.assertTrue(has_role(u3, 'test_role2'))
|
|
self.assertTrue(has_role(u4, 'test_role1'))
|
|
self.assertTrue(has_role(u4, 'test_role2')) |