Add API for django messages
This commit is contained in:
55
src/documents/tests/test_api_messages.py
Normal file
55
src/documents/tests/test_api_messages.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.messages.storage.fallback import FallbackStorage
|
||||
from django.test import RequestFactory
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from documents.tests.utils import DirectoriesMixin
|
||||
from paperless.views import MessagesView
|
||||
|
||||
|
||||
class TestApiMessages(DirectoriesMixin, APITestCase):
|
||||
ENDPOINT = "/api/messages/"
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
self.user = User.objects.create_superuser(
|
||||
username="temp_admin",
|
||||
first_name="firstname",
|
||||
last_name="surname",
|
||||
)
|
||||
self.client.force_authenticate(user=self.user)
|
||||
|
||||
def test_get_django_messages(self):
|
||||
"""
|
||||
GIVEN:
|
||||
- Configured user
|
||||
- Pending django message
|
||||
WHEN:
|
||||
- API call is made to get the django messages
|
||||
THEN:
|
||||
- Pending message is returned
|
||||
- No more messages are pending
|
||||
"""
|
||||
|
||||
factory = RequestFactory()
|
||||
|
||||
request = factory.get(self.ENDPOINT)
|
||||
request.user = self.user
|
||||
|
||||
# Fake middleware support for RequestFactory
|
||||
# See https://stackoverflow.com/a/66473588/1022690
|
||||
setattr(request, "session", "session")
|
||||
setattr(request, "_messages", FallbackStorage(request))
|
||||
|
||||
msg = "Test message"
|
||||
messages.error(request, msg)
|
||||
|
||||
response = MessagesView.as_view()(request)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data), 1)
|
||||
self.assertEqual(response.data[0]["level"], "error")
|
||||
self.assertEqual(response.data[0]["message"], msg)
|
||||
@@ -45,6 +45,7 @@ from paperless.views import DisconnectSocialAccountView
|
||||
from paperless.views import FaviconView
|
||||
from paperless.views import GenerateAuthTokenView
|
||||
from paperless.views import GroupViewSet
|
||||
from paperless.views import MessagesView
|
||||
from paperless.views import ProfileView
|
||||
from paperless.views import SocialAccountProvidersView
|
||||
from paperless.views import UserViewSet
|
||||
@@ -147,6 +148,7 @@ urlpatterns = [
|
||||
ProfileView.as_view(),
|
||||
name="profile_view",
|
||||
),
|
||||
path("messages/", MessagesView.as_view()),
|
||||
*api_router.urls,
|
||||
],
|
||||
),
|
||||
|
||||
@@ -2,6 +2,7 @@ import os
|
||||
from collections import OrderedDict
|
||||
|
||||
from allauth.socialaccount.adapter import get_adapter
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.models import Group
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models.functions import Lower
|
||||
@@ -222,3 +223,18 @@ class SocialAccountProvidersView(APIView):
|
||||
]
|
||||
|
||||
return Response(sorted(resp, key=lambda p: p["name"]))
|
||||
|
||||
|
||||
class MessagesView(APIView):
|
||||
"""
|
||||
Expose django messages. This clears the messages in django
|
||||
"""
|
||||
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
data = [
|
||||
{"level": m.level_tag, "message": m.message, "tags": m.extra_tags}
|
||||
for m in messages.get_messages(request)
|
||||
]
|
||||
return Response(data)
|
||||
|
||||
Reference in New Issue
Block a user