Added tests for dav_events.roles

This commit is contained in:
2023-02-26 20:25:56 +01:00
parent e024744714
commit f79d54c752
5 changed files with 171 additions and 28 deletions

View File

@@ -2,6 +2,7 @@
from __future__ import unicode_literals
import datetime
import json
import logging
import os
from django.apps import apps
from django.contrib.auth import get_user_model
@@ -12,21 +13,30 @@ from ..models.eventstatus import EventStatus
class RoleMixin:
def create_user_for_role(self, role_name, password, first_name, last_name):
group = Group(name=role_name)
group.save()
def create_user_for_role(self, role_name, first_name, last_name, password='password'):
app_config = apps.get_app_config('dav_events')
var_name = 'groups_{}'.format(role_name)
if hasattr(app_config.settings, var_name):
# There are groups configured for this role.
# Use the first group name of the configured groups.
group_name = getattr(app_config.settings, var_name)[0]
else:
# There are no groups configured for this role.
# Configure one.
group_name = role_name
setting_name = 'groups_{}'.format(role_name)
setattr(app_config.settings, setting_name, [group_name])
# Make sure the configured group exists.
group = Group.objects.get_or_create(name=group_name)[0]
user_model = get_user_model()
email = '{}@localhost'.format(role_name)
user_name = email
number = user_model.objects.all().count() + 1
user_name = 'user{}-{}@localhost'.format(number, role_name)
user = user_model.objects.create_user(username=user_name, password=password, email=user_name,
first_name=first_name, last_name=last_name)
user.groups.add(group)
setting_name = 'groups_{}'.format(role_name)
app_config = apps.get_app_config('dav_events')
setattr(app_config.settings, setting_name, [role_name])
return user

View File

@@ -10,6 +10,7 @@ class TestCase(AppsTestCase):
AppSetting('enable_email_on_status_update', bool),
AppSetting('enable_email_on_update', bool),
AppSetting('groups_manager_super', list),
AppSetting('groups_manager_f', list),
AppSetting('groups_manager_w', list),
AppSetting('groups_manager_s', list),
AppSetting('groups_manager_m', list),

View File

@@ -176,11 +176,11 @@ class EmailTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase):
self.event = self.create_event_by_model(event_data)
self.trainer = self.event.owner
self.manager_super = self.create_user_for_role('manager_super', 'password', 'Touren', 'Referent')
self.manager_w = self.create_user_for_role('manager_w', 'password', 'Bereichsleiter', 'Wandern')
self.manager_s = self.create_user_for_role('manager_s', 'password', 'Bereichsleiter', 'Ski')
self.publisher_web = self.create_user_for_role('publisher_web', 'password', 'Joomla', 'Redakteur')
self.publisher_facebook = self.create_user_for_role('publisher_facebook', 'password', 'Facebook', 'Redakteur')
self.manager_super = self.create_user_for_role('manager_super', 'Touren', 'Referent')
self.manager_w = self.create_user_for_role('manager_w', 'Bereichsleiter', 'Wandern')
self.manager_s = self.create_user_for_role('manager_s', 'Bereichsleiter', 'Ski')
self.publisher_web = self.create_user_for_role('publisher_web', 'Joomla', 'Redakteur')
self.publisher_facebook = self.create_user_for_role('publisher_facebook', 'Facebook', 'Redakteur')
model = get_user_model()
self.recipient = model.objects.create_user(username='recipient@example.com',

View File

@@ -0,0 +1,128 @@
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'))

View File

@@ -658,20 +658,24 @@ class TestCase(SeleniumAuthMixin, RoleMixin, ScreenshotTestCase):
def setUp(self):
super(TestCase, self).setUp()
password = TEST_PASSWORD
self.manager_super = self.create_user_for_role('manager_super', password,
'Manager Super', 'Tourenreferent')
self.manager_w = self.create_user_for_role('manager_w', password,
'Manager W', 'BereichsleiterWandern')
self.manager_s = self.create_user_for_role('manager_s', password,
'Manager S', 'BereichsleiterSki')
self.publisher_print = self.create_user_for_role('publisher_print', password,
'Publisher Print', 'RedaktionPrint')
self.publisher_web = self.create_user_for_role('publisher_web', password,
'Publisher Web', 'RedaktionWeb')
self.publisher_facebook = self.create_user_for_role('publisher_facebook', password,
'Publisher Facebook', 'RedaktionFacebook')
self.manager_super = self.create_user_for_role('manager_super',
'Manager Super', 'Tourenreferent',
password=TEST_PASSWORD)
self.manager_w = self.create_user_for_role('manager_w',
'Manager W', 'BereichsleiterWandern',
password=TEST_PASSWORD)
self.manager_s = self.create_user_for_role('manager_s',
'Manager S', 'BereichsleiterSki',
password=TEST_PASSWORD)
self.publisher_print = self.create_user_for_role('publisher_print',
'Publisher Print', 'RedaktionPrint',
password=TEST_PASSWORD)
self.publisher_web = self.create_user_for_role('publisher_web',
'Publisher Web', 'RedaktionWeb',
password=TEST_PASSWORD)
self.publisher_facebook = self.create_user_for_role('publisher_facebook',
'Publisher Facebook', 'RedaktionFacebook',
password=TEST_PASSWORD)
def test_screenshots(self):
# self.quit_selenium = False