From 2477c31656e2372c08b395ca00f0ffabdd3bf8a8 Mon Sep 17 00:00:00 2001 From: Erik Kalkoken Date: Wed, 8 Nov 2023 13:04:26 +0000 Subject: [PATCH] Fix leave tab for autoleave --- allianceauth/groupmanagement/models.py | 7 +++---- .../templates/groupmanagement/index.html | 4 ++-- .../groupmanagement/tests/test_views.py | 18 ++++++++++++++++++ allianceauth/groupmanagement/views.py | 13 ++++++++----- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/allianceauth/groupmanagement/models.py b/allianceauth/groupmanagement/models.py index 3ca6b8c6..8491f08f 100644 --- a/allianceauth/groupmanagement/models.py +++ b/allianceauth/groupmanagement/models.py @@ -1,8 +1,7 @@ from typing import Set from django.conf import settings -from django.contrib.auth.models import Group -from django.contrib.auth.models import User +from django.contrib.auth.models import Group, User from django.db import models from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ @@ -14,7 +13,7 @@ from allianceauth.notifications import notify class GroupRequest(models.Model): """Request from a user for joining or leaving a group.""" - leave_request = models.BooleanField(default=0) + leave_request = models.BooleanField(default=False) user = models.ForeignKey(User, on_delete=models.CASCADE) group = models.ForeignKey(Group, on_delete=models.CASCADE) @@ -49,7 +48,7 @@ class RequestLog(models.Model): request_type = models.BooleanField(null=True) group = models.ForeignKey(Group, on_delete=models.CASCADE) request_info = models.CharField(max_length=254) - action = models.BooleanField(default=0) + action = models.BooleanField(default=False) request_actor = models.ForeignKey(User, on_delete=models.CASCADE) date = models.DateTimeField(auto_now_add=True) diff --git a/allianceauth/groupmanagement/templates/groupmanagement/index.html b/allianceauth/groupmanagement/templates/groupmanagement/index.html index 5a383501..c8e7c298 100644 --- a/allianceauth/groupmanagement/templates/groupmanagement/index.html +++ b/allianceauth/groupmanagement/templates/groupmanagement/index.html @@ -29,7 +29,7 @@ - {% if not auto_leave %} + {% if not show_leave_tab %}
  • {% translate "Leave Requests" %} @@ -102,7 +102,7 @@ {% endif %} - {% if not auto_leave %} + {% if not show_leave_tab %}
    {% if leaverequests %}
    diff --git a/allianceauth/groupmanagement/tests/test_views.py b/allianceauth/groupmanagement/tests/test_views.py index e0c9245b..a8bcfe58 100644 --- a/allianceauth/groupmanagement/tests/test_views.py +++ b/allianceauth/groupmanagement/tests/test_views.py @@ -1,6 +1,7 @@ from django.test import RequestFactory, TestCase, override_settings from django.urls import reverse +from allianceauth.groupmanagement.models import Group, GroupRequest from allianceauth.tests.auth_utils import AuthUtils from .. import views @@ -16,6 +17,7 @@ class TestViews(TestCase): self.factory = RequestFactory() self.user = AuthUtils.create_user('Peter Parker') self.user_with_manage_permission = AuthUtils.create_user('Bruce Wayne') + self.group = Group.objects.create(name="Example group") # set permissions AuthUtils.add_permission_to_user_by_name( @@ -83,3 +85,19 @@ class TestViews(TestCase): self.assertEqual(response.status_code, 200) self.assertNotIn('', content) self.assertNotIn('
    ', content) + + @override_settings(GROUPMANAGEMENT_AUTO_LEAVE=True) + def test_should_not_hide_leave_requests_tab_when_there_are_open_requests(self): + # given + request = self.factory.get(reverse('groupmanagement:management')) + request.user = self.user_with_manage_permission + GroupRequest.objects.create(user=self.user, group=self.group, leave_request=True) + + # when + response = views.group_management(request) + + # then + content = response_content_to_str(response) + self.assertEqual(response.status_code, 200) + self.assertIn('', content) + self.assertIn('
    ', content) diff --git a/allianceauth/groupmanagement/views.py b/allianceauth/groupmanagement/views.py index 8ab1af22..13fe33bc 100644 --- a/allianceauth/groupmanagement/views.py +++ b/allianceauth/groupmanagement/views.py @@ -2,13 +2,12 @@ import logging from django.conf import settings from django.contrib import messages -from django.contrib.auth.decorators import login_required -from django.contrib.auth.decorators import user_passes_test +from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.models import Group from django.core.exceptions import ObjectDoesNotExist, PermissionDenied from django.db.models import Count from django.http import Http404 -from django.shortcuts import render, redirect, get_object_or_404 +from django.shortcuts import get_object_or_404, redirect, render from django.utils.translation import gettext_lazy as _ from allianceauth.notifications import notify @@ -16,7 +15,6 @@ from allianceauth.notifications import notify from .managers import GroupManager from .models import GroupRequest, RequestLog - logger = logging.getLogger(__name__) @@ -45,10 +43,15 @@ def group_management(request): logger.debug("Providing user {} with {} acceptrequests and {} leaverequests.".format( request.user, len(acceptrequests), len(leaverequests))) + show_leave_tab = ( + getattr(settings, 'GROUPMANAGEMENT_AUTO_LEAVE', False) + and not GroupRequest.objects.filter(leave_request=True).exists() + ) + render_items = { 'acceptrequests': acceptrequests, 'leaverequests': leaverequests, - 'auto_leave': getattr(settings, 'GROUPMANAGEMENT_AUTO_LEAVE', False), + 'show_leave_tab': show_leave_tab, } return render(request, 'groupmanagement/index.html', context=render_items)