Added tests for dav_events.roles
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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',
|
||||
|
||||
128
dav_events/tests/test_roles.py
Normal file
128
dav_events/tests/test_roles.py
Normal 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'))
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user