fix(openapi): Add proper serialization for TextPreviewView

This commit is contained in:
Georg Krause 2022-10-12 12:13:00 +02:00 committed by Georg Krause
parent 5081ec8a71
commit 7a81df8ec1
4 changed files with 35 additions and 7 deletions

View File

@ -359,3 +359,12 @@ class RateLimitSerializer(serializers.Serializer):
enabled = serializers.BooleanField()
ident = IdentSerializer()
scopes = serializers.ListField(child=ScopesSerializer())
class ErrorDetailSerializer(serializers.Serializer):
detail = serializers.CharField(source="*")
class TextPreviewSerializer(serializers.Serializer):
rendered = serializers.CharField(read_only=True, source="*")
text = serializers.CharField(write_only=True)

View File

@ -18,6 +18,11 @@ from config import plugins
from funkwhale_api.users.oauth import permissions as oauth_permissions
from funkwhale_api.common.serializers import (
ErrorDetailSerializer,
TextPreviewSerializer,
)
from . import filters
from . import models
from . import mutations
@ -205,18 +210,21 @@ class AttachmentViewSet(
class TextPreviewView(views.APIView):
permission_classes = []
@extend_schema(operation_id="preview_text")
@extend_schema(
operation_id="preview_text",
responses={200: TextPreviewSerializer, 400: ErrorDetailSerializer},
)
def post(self, request, *args, **kwargs):
payload = request.data
if "text" not in payload:
return response.Response({"detail": "Invalid input"}, status=400)
return response.Response(
ErrorDetailSerializer("Invalid input").data, status=400
)
permissive = payload.get("permissive", False)
data = {
"rendered": utils.render_html(
payload["text"], "text/markdown", permissive=permissive
)
}
data = TextPreviewSerializer(
utils.render_html(payload["text"], "text/markdown", permissive=permissive)
).data
return response.Response(data, status=200)

View File

@ -273,6 +273,16 @@ def test_attachment_destroy_not_owner(factories, logged_in_api_client):
attachment.refresh_from_db()
def test_render_fails_for_no_text(api_client):
payload = {}
url = reverse("api:v1:text-preview")
response = api_client.post(url, payload)
expected = {"detail": "Invalid input"}
assert response.status_code == 400
assert response.data == expected
def test_can_render_text_preview(api_client, db):
payload = {"text": "Hello world"}
url = reverse("api:v1:text-preview")

View File

@ -0,0 +1 @@
Add proper serialization for TextPreviewView (#1903)