mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-10 00:56:19 +01:00
Add option to notify approvers about new group requests
This commit is contained in:
@@ -1,31 +1,22 @@
|
||||
from unittest import mock
|
||||
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth.models import Group
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from allianceauth.tests.auth_utils import AuthUtils
|
||||
from allianceauth.eveonline.models import (
|
||||
EveCorporationInfo, EveAllianceInfo, EveCharacter
|
||||
)
|
||||
|
||||
from ..models import GroupRequest, RequestLog
|
||||
|
||||
MODULE_PATH = "allianceauth.groupmanagement.models"
|
||||
|
||||
|
||||
def create_testdata():
|
||||
# clear DB
|
||||
User.objects.all().delete()
|
||||
Group.objects.all().delete()
|
||||
EveCharacter.objects.all().delete()
|
||||
EveCorporationInfo.objects.all().delete()
|
||||
EveAllianceInfo.objects.all().delete()
|
||||
|
||||
# group 1
|
||||
group = Group.objects.create(name='Superheros')
|
||||
group.authgroup.description = 'Default Group'
|
||||
group.authgroup.internal = False
|
||||
group.authgroup.hidden = False
|
||||
group.authgroup.save()
|
||||
|
||||
# user 1
|
||||
user_1 = AuthUtils.create_user('Bruce Wayne')
|
||||
AuthUtils.add_main_character_2(
|
||||
@@ -37,7 +28,6 @@ def create_testdata():
|
||||
)
|
||||
user_1.groups.add(group)
|
||||
group.authgroup.group_leaders.add(user_1)
|
||||
|
||||
# user 2
|
||||
user_2 = AuthUtils.create_user('Clark Kent')
|
||||
AuthUtils.add_main_character_2(
|
||||
@@ -45,18 +35,25 @@ def create_testdata():
|
||||
name='Clark Kent',
|
||||
character_id=1002,
|
||||
corp_id=2002,
|
||||
corp_name='Wayne Technologies'
|
||||
corp_name='Wayne Food'
|
||||
)
|
||||
return group, user_1, user_2
|
||||
|
||||
# user 3
|
||||
user_3 = AuthUtils.create_user('Peter Parker')
|
||||
AuthUtils.add_main_character_2(
|
||||
user_2,
|
||||
name='Peter Parker',
|
||||
character_id=1003,
|
||||
corp_id=2002,
|
||||
corp_name='Wayne Food'
|
||||
)
|
||||
return group, user_1, user_2, user_3
|
||||
|
||||
|
||||
class TestGroupRequest(TestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.group, cls.user_1, _ = create_testdata()
|
||||
cls.group, cls.user_1, cls.user_2, cls.user_3 = create_testdata()
|
||||
|
||||
def test_main_char(self):
|
||||
group_request = GroupRequest.objects.create(
|
||||
@@ -74,13 +71,85 @@ class TestGroupRequest(TestCase):
|
||||
expected = 'Bruce Wayne:Superheros'
|
||||
self.assertEqual(str(group_request), expected)
|
||||
|
||||
@override_settings(GROUPMANAGEMENT_REQUESTS_NOTIFICATION=True)
|
||||
def test_should_notify_leaders_about_join_request(self):
|
||||
# given
|
||||
group_request = GroupRequest.objects.create(
|
||||
user=self.user_2, group=self.group
|
||||
)
|
||||
# when
|
||||
with mock.patch(MODULE_PATH + ".notify") as mock_notify:
|
||||
group_request.notify_leaders()
|
||||
# then
|
||||
self.assertTrue(mock_notify.called)
|
||||
_, kwargs = mock_notify.call_args
|
||||
self.assertEqual(kwargs["user"],self.user_1)
|
||||
|
||||
@override_settings(GROUPMANAGEMENT_REQUESTS_NOTIFICATION=True)
|
||||
def test_should_notify_leaders_about_leave_request(self):
|
||||
# given
|
||||
group_request = GroupRequest.objects.create(
|
||||
user=self.user_2, group=self.group
|
||||
)
|
||||
# when
|
||||
with mock.patch(MODULE_PATH + ".notify") as mock_notify:
|
||||
group_request.notify_leaders()
|
||||
# then
|
||||
self.assertTrue(mock_notify.called)
|
||||
|
||||
@override_settings(GROUPMANAGEMENT_REQUESTS_NOTIFICATION=True)
|
||||
def test_should_handle_notify_leaders_without_leaders(self):
|
||||
# given
|
||||
group = Group.objects.create(name='Dummy')
|
||||
group.authgroup.internal = False
|
||||
group.authgroup.hidden = False
|
||||
group.authgroup.save()
|
||||
group_request = GroupRequest.objects.create(
|
||||
user=self.user_2, group=group
|
||||
)
|
||||
# when
|
||||
with mock.patch(MODULE_PATH + ".notify") as mock_notify:
|
||||
group_request.notify_leaders()
|
||||
# then
|
||||
self.assertFalse(mock_notify.called)
|
||||
|
||||
@override_settings(GROUPMANAGEMENT_REQUESTS_NOTIFICATION=False)
|
||||
def test_should_not_notify_leaders_if_disabled(self):
|
||||
# given
|
||||
group_request = GroupRequest.objects.create(
|
||||
user=self.user_2, group=self.group
|
||||
)
|
||||
# when
|
||||
with mock.patch(MODULE_PATH + ".notify") as mock_notify:
|
||||
group_request.notify_leaders()
|
||||
# then
|
||||
self.assertFalse(mock_notify.called)
|
||||
|
||||
@override_settings(GROUPMANAGEMENT_REQUESTS_NOTIFICATION=True)
|
||||
def test_should_notify_members_of_leader_groups_about_join_request(self):
|
||||
# given
|
||||
child_group = Group.objects.create(name='Child')
|
||||
child_group.authgroup.internal = False
|
||||
child_group.authgroup.hidden = False
|
||||
child_group.authgroup.save()
|
||||
child_group.authgroup.group_leader_groups.add(self.group)
|
||||
group_request = GroupRequest.objects.create(
|
||||
user=self.user_2, group=child_group
|
||||
)
|
||||
# when
|
||||
with mock.patch(MODULE_PATH + ".notify") as mock_notify:
|
||||
group_request.notify_leaders()
|
||||
# then
|
||||
self.assertTrue(mock_notify.called)
|
||||
_, kwargs = mock_notify.call_args
|
||||
self.assertEqual(kwargs["user"],self.user_1)
|
||||
|
||||
|
||||
class TestRequestLog(TestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.group, cls.user_1, cls.user_2 = create_testdata()
|
||||
cls.group, cls.user_1, cls.user_2, _ = create_testdata()
|
||||
|
||||
def test_requestor(self):
|
||||
request_log = RequestLog.objects.create(
|
||||
@@ -126,7 +195,7 @@ class TestRequestLog(TestCase):
|
||||
group=self.group,
|
||||
request_info='Clark Kent:Superheros',
|
||||
request_actor=self.user_1,
|
||||
action = True
|
||||
action=True
|
||||
)
|
||||
expected = 'Accept'
|
||||
self.assertEqual(request_log.action_to_str(), expected)
|
||||
@@ -136,7 +205,7 @@ class TestRequestLog(TestCase):
|
||||
group=self.group,
|
||||
request_info='Clark Kent:Superheros',
|
||||
request_actor=self.user_1,
|
||||
action = False
|
||||
action=False
|
||||
)
|
||||
expected = 'Reject'
|
||||
self.assertEqual(request_log.action_to_str(), expected)
|
||||
@@ -146,14 +215,13 @@ class TestRequestLog(TestCase):
|
||||
group=self.group,
|
||||
request_info='Clark Kent:Superheros',
|
||||
request_actor=self.user_1,
|
||||
action = False
|
||||
action=False
|
||||
)
|
||||
expected = self.user_2.profile.main_character
|
||||
self.assertEqual(request_log.req_char(), expected)
|
||||
|
||||
|
||||
class TestAuthGroup(TestCase):
|
||||
|
||||
def test_str(self):
|
||||
group = Group.objects.create(name='Superheros')
|
||||
group.authgroup.description = 'Default Group'
|
||||
@@ -163,3 +231,56 @@ class TestAuthGroup(TestCase):
|
||||
|
||||
expected = 'Superheros'
|
||||
self.assertEqual(str(group.authgroup), expected)
|
||||
|
||||
|
||||
class TestAuthGroupRequestApprovers(TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.group, self.user_1, self.user_2, self.user_3 = create_testdata()
|
||||
|
||||
def test_should_return_leaders_of_main_group_only(self):
|
||||
# when
|
||||
leaders = self.group.authgroup.group_request_approvers()
|
||||
# then
|
||||
self.assertSetEqual(leaders, {self.user_1})
|
||||
|
||||
def test_should_return_members_of_leading_groups_only(self):
|
||||
# given
|
||||
parent_group = Group.objects.create(name='Parent')
|
||||
parent_group.authgroup.group_leaders.add(self.user_2)
|
||||
self.user_1.groups.add(parent_group)
|
||||
child_group = Group.objects.create(name='Child')
|
||||
child_group.authgroup.internal = False
|
||||
child_group.authgroup.hidden = False
|
||||
child_group.authgroup.save()
|
||||
child_group.authgroup.group_leader_groups.add(parent_group)
|
||||
# when
|
||||
leaders = child_group.authgroup.group_request_approvers()
|
||||
# then
|
||||
self.assertSetEqual(leaders, {self.user_1})
|
||||
|
||||
def test_should_return_leaders_of_main_group_and_members_of_leading_groups(self):
|
||||
# given
|
||||
parent_group = Group.objects.create(name='Parent')
|
||||
parent_group.authgroup.group_leaders.add(self.user_2)
|
||||
self.user_1.groups.add(parent_group)
|
||||
child_group = Group.objects.create(name='Child')
|
||||
child_group.authgroup.internal = False
|
||||
child_group.authgroup.hidden = False
|
||||
child_group.authgroup.save()
|
||||
child_group.authgroup.group_leaders.add(self.user_3)
|
||||
child_group.authgroup.group_leader_groups.add(self.group)
|
||||
# when
|
||||
leaders = child_group.authgroup.group_request_approvers()
|
||||
# then
|
||||
self.assertSetEqual(leaders, {self.user_1, self.user_3})
|
||||
|
||||
def test_can_handle_group_without_leaders(self):
|
||||
# given
|
||||
child_group = Group.objects.create(name='Child')
|
||||
child_group.authgroup.internal = False
|
||||
child_group.authgroup.hidden = False
|
||||
child_group.authgroup.save()
|
||||
# when
|
||||
leaders = child_group.authgroup.group_request_approvers()
|
||||
# then
|
||||
self.assertSetEqual(leaders, set())
|
||||
|
||||
Reference in New Issue
Block a user