fix(openapi): Add proper serialization for TextPreviewView
This commit is contained in:
parent
5081ec8a71
commit
7a81df8ec1
|
@ -359,3 +359,12 @@ class RateLimitSerializer(serializers.Serializer):
|
||||||
enabled = serializers.BooleanField()
|
enabled = serializers.BooleanField()
|
||||||
ident = IdentSerializer()
|
ident = IdentSerializer()
|
||||||
scopes = serializers.ListField(child=ScopesSerializer())
|
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)
|
||||||
|
|
|
@ -18,6 +18,11 @@ from config import plugins
|
||||||
|
|
||||||
from funkwhale_api.users.oauth import permissions as oauth_permissions
|
from funkwhale_api.users.oauth import permissions as oauth_permissions
|
||||||
|
|
||||||
|
from funkwhale_api.common.serializers import (
|
||||||
|
ErrorDetailSerializer,
|
||||||
|
TextPreviewSerializer,
|
||||||
|
)
|
||||||
|
|
||||||
from . import filters
|
from . import filters
|
||||||
from . import models
|
from . import models
|
||||||
from . import mutations
|
from . import mutations
|
||||||
|
@ -205,18 +210,21 @@ class AttachmentViewSet(
|
||||||
class TextPreviewView(views.APIView):
|
class TextPreviewView(views.APIView):
|
||||||
permission_classes = []
|
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):
|
def post(self, request, *args, **kwargs):
|
||||||
payload = request.data
|
payload = request.data
|
||||||
if "text" not in payload:
|
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)
|
permissive = payload.get("permissive", False)
|
||||||
data = {
|
data = TextPreviewSerializer(
|
||||||
"rendered": utils.render_html(
|
utils.render_html(payload["text"], "text/markdown", permissive=permissive)
|
||||||
payload["text"], "text/markdown", permissive=permissive
|
).data
|
||||||
)
|
|
||||||
}
|
|
||||||
return response.Response(data, status=200)
|
return response.Response(data, status=200)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -273,6 +273,16 @@ def test_attachment_destroy_not_owner(factories, logged_in_api_client):
|
||||||
attachment.refresh_from_db()
|
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):
|
def test_can_render_text_preview(api_client, db):
|
||||||
payload = {"text": "Hello world"}
|
payload = {"text": "Hello world"}
|
||||||
url = reverse("api:v1:text-preview")
|
url = reverse("api:v1:text-preview")
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add proper serialization for TextPreviewView (#1903)
|
Loading…
Reference in New Issue