events: optimise marking events as seen (#11297) * events: optimise marking events as seen * add tests --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io> Co-authored-by: Jens L. <jens@goauthentik.io>
This commit is contained in:
![98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com](/assets/img/avatar_default.png)
committed by
GitHub

parent
96e1636be3
commit
2ea04440db
@ -69,8 +69,5 @@ class NotificationViewSet(
|
|||||||
@action(detail=False, methods=["post"])
|
@action(detail=False, methods=["post"])
|
||||||
def mark_all_seen(self, request: Request) -> Response:
|
def mark_all_seen(self, request: Request) -> Response:
|
||||||
"""Mark all the user's notifications as seen"""
|
"""Mark all the user's notifications as seen"""
|
||||||
notifications = Notification.objects.filter(user=request.user)
|
Notification.objects.filter(user=request.user, seen=False).update(seen=True)
|
||||||
for notification in notifications:
|
|
||||||
notification.seen = True
|
|
||||||
Notification.objects.bulk_update(notifications, ["seen"])
|
|
||||||
return Response({}, status=204)
|
return Response({}, status=204)
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.urls import reverse
|
||||||
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from authentik.core.models import Group, User
|
from authentik.core.models import Group, User
|
||||||
from authentik.events.models import (
|
from authentik.events.models import (
|
||||||
@ -10,6 +11,7 @@ from authentik.events.models import (
|
|||||||
EventAction,
|
EventAction,
|
||||||
Notification,
|
Notification,
|
||||||
NotificationRule,
|
NotificationRule,
|
||||||
|
NotificationSeverity,
|
||||||
NotificationTransport,
|
NotificationTransport,
|
||||||
NotificationWebhookMapping,
|
NotificationWebhookMapping,
|
||||||
TransportMode,
|
TransportMode,
|
||||||
@ -20,7 +22,7 @@ from authentik.policies.exceptions import PolicyException
|
|||||||
from authentik.policies.models import PolicyBinding
|
from authentik.policies.models import PolicyBinding
|
||||||
|
|
||||||
|
|
||||||
class TestEventsNotifications(TestCase):
|
class TestEventsNotifications(APITestCase):
|
||||||
"""Test Event Notifications"""
|
"""Test Event Notifications"""
|
||||||
|
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
@ -131,3 +133,15 @@ class TestEventsNotifications(TestCase):
|
|||||||
Notification.objects.all().delete()
|
Notification.objects.all().delete()
|
||||||
Event.new(EventAction.CUSTOM_PREFIX).save()
|
Event.new(EventAction.CUSTOM_PREFIX).save()
|
||||||
self.assertEqual(Notification.objects.first().body, "foo")
|
self.assertEqual(Notification.objects.first().body, "foo")
|
||||||
|
|
||||||
|
def test_api_mark_all_seen(self):
|
||||||
|
"""Test mark_all_seen"""
|
||||||
|
self.client.force_login(self.user)
|
||||||
|
|
||||||
|
Notification.objects.create(
|
||||||
|
severity=NotificationSeverity.NOTICE, body="foo", user=self.user, seen=False
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.post(reverse("authentik_api:notification-mark-all-seen"))
|
||||||
|
self.assertEqual(response.status_code, 204)
|
||||||
|
self.assertFalse(Notification.objects.filter(body="foo", seen=False).exists())
|
||||||
|
Reference in New Issue
Block a user