Merge branch 'issue/1308-groups-without-assigned-group-leade' into 'v2.9.x'

[FIX] Pending Count for superuser for groups without group lead assigned

Closes #1308

See merge request allianceauth/allianceauth!1349
This commit is contained in:
Ariel Rin 2021-10-20 05:00:10 +00:00
commit f79e764439
8 changed files with 43 additions and 17 deletions

View File

@ -195,12 +195,11 @@ finally:
@admin.register(GroupRequest)
class GroupRequestAdmin(admin.ModelAdmin):
search_fields = ('user__username', )
list_display = ('id', 'group', 'user', '_leave_request', 'status')
list_display = ('id', 'group', 'user', '_leave_request')
list_filter = (
('group', admin.RelatedOnlyFieldListFilter),
('user', admin.RelatedOnlyFieldListFilter),
'leave_request',
'status'
)
def _leave_request(self, obj) -> True:

View File

@ -108,11 +108,10 @@ class GroupManager:
"""Returns the number of pending group requests for the given user"""
if cls.has_management_permission(user):
return GroupRequest.objects.filter(status="pending").count()
return GroupRequest.objects.all().count()
else:
return (
GroupRequest.objects
.filter(status="pending")
.filter(group__authgroup__group_leaders__exact=user)
.select_related("group__authgroup__group_leaders")
.count()

View File

@ -0,0 +1,17 @@
# Generated by Django 3.2.8 on 2021-10-19 18:53
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("groupmanagement", "0015_make_descriptions_great_again"),
]
operations = [
migrations.RemoveField(
model_name="grouprequest",
name="status",
),
]

View File

@ -7,7 +7,6 @@ from allianceauth.authentication.models import State
class GroupRequest(models.Model):
status = models.CharField(max_length=254)
leave_request = models.BooleanField(default=0)
user = models.ForeignKey(User, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)

View File

@ -31,7 +31,7 @@
</a>
{% else %}
<button type="button" class="btn btn-primary" disabled>
{{ g.request.status }}
{% translate "Pending" %}
</button>
{% endif %}
{% elif not g.request %}
@ -46,7 +46,7 @@
{% endif %}
{% else %}
<button type="button" class="btn btn-primary" disabled>
{{ g.request.status }}
{% translate "Pending" %}
</button>
{% endif %}
</td>

View File

@ -339,11 +339,16 @@ class TestPendingRequestsCountForUser(TestCase):
def setUp(self) -> None:
self.group_1 = Group.objects.create(name="Group 1")
self.group_2 = Group.objects.create(name="Group 2")
self.group_3 = Group.objects.create(name="Group 3")
self.user_leader_1 = AuthUtils.create_member('Clark Kent')
self.group_1.authgroup.group_leaders.add(self.user_leader_1)
self.user_leader_2 = AuthUtils.create_member('Peter Parker')
self.group_2.authgroup.group_leaders.add(self.user_leader_2)
self.user_requestor = AuthUtils.create_member('Bruce Wayne')
self.user_superuser = AuthUtils.create_member('Q')
self.user_superuser.is_superuser = True
def test_single_request_for_leader(self):
# given user_leader_1 is leader of group_1
@ -351,7 +356,7 @@ class TestPendingRequestsCountForUser(TestCase):
# when user_requestor is requesting access to group 1
# then return 1 for user_leader 1 and 0 for user_leader_2
GroupRequest.objects.create(
status="pending", user=self.user_requestor, group=self.group_1
user=self.user_requestor, group=self.group_1
)
self.assertEqual(
GroupManager.pending_requests_count_for_user(self.user_leader_1), 1
@ -365,7 +370,21 @@ class TestPendingRequestsCountForUser(TestCase):
# when user_requestor is requesting access to group 1
# then return 0 for user_requestor
GroupRequest.objects.create(
status="pending", user=self.user_requestor, group=self.group_1
user=self.user_requestor, group=self.group_1
)
self.assertEqual(
GroupManager.pending_requests_count_for_user(self.user_requestor), 0
)
def test_single_request_for_superuser(self):
# given group_3 has no leader
# when user_requestor is requesting access to group 1
# then return 1 for user_superuser but 0 for user_requestor
GroupRequest.objects.create(
user=self.user_requestor, group=self.group_3
)
self.assertEqual(
GroupManager.pending_requests_count_for_user(self.user_superuser), 1
)
self.assertEqual(
GroupManager.pending_requests_count_for_user(self.user_requestor), 0
@ -379,7 +398,6 @@ class TestPendingRequestsCountForUser(TestCase):
self.user_requestor.groups.add(self.group_2)
GroupRequest.objects.create(
status="pending",
user=self.user_requestor,
group=self.group_2,
leave_request=True
@ -397,12 +415,10 @@ class TestPendingRequestsCountForUser(TestCase):
self.user_requestor.groups.add(self.group_2)
user_requestor_2 = AuthUtils.create_member("Lex Luther")
GroupRequest.objects.create(
status="pending",
user=user_requestor_2,
group=self.group_2
)
GroupRequest.objects.create(
status="pending",
user=self.user_requestor,
group=self.group_2,
leave_request=True
@ -420,7 +436,7 @@ class TestPendingRequestsCountForUser(TestCase):
AuthUtils.add_permission_to_user_by_name("auth.group_management", user_leader_4)
user_leader_4 = User.objects.get(pk=user_leader_4.pk)
GroupRequest.objects.create(
status="pending", user=self.user_requestor, group=self.group_1
user=self.user_requestor, group=self.group_1
)
self.assertEqual(
GroupManager.pending_requests_count_for_user(self.user_leader_1), 1

View File

@ -60,7 +60,6 @@ class TestGroupRequest(TestCase):
def test_main_char(self):
group_request = GroupRequest.objects.create(
status='Pending',
user=self.user_1,
group=self.group
)
@ -69,7 +68,6 @@ class TestGroupRequest(TestCase):
def test_str(self):
group_request = GroupRequest.objects.create(
status='Pending',
user=self.user_1,
group=self.group
)

View File

@ -354,7 +354,6 @@ def group_request_add(request, group_id):
messages.warning(request, _("You already have a pending application for that group."))
return redirect("groupmanagement:groups")
grouprequest = GroupRequest()
grouprequest.status = _('Pending')
grouprequest.group = group
grouprequest.user = request.user
grouprequest.leave_request = False
@ -396,7 +395,6 @@ def group_request_leave(request, group_id):
request.user.groups.remove(group)
return redirect('groupmanagement:groups')
grouprequest = GroupRequest()
grouprequest.status = _('Pending')
grouprequest.group = group
grouprequest.user = request.user
grouprequest.leave_request = True