Allow statusless posts (#677)

This commit is contained in:
Jamie Bliss 2023-12-07 18:32:18 -05:00 committed by GitHub
parent 123c20efb1
commit d07482f5a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 4 deletions

View file

@ -39,7 +39,7 @@ class PostPollSchema(Schema):
class PostStatusSchema(Schema): class PostStatusSchema(Schema):
status: str status: str | None
in_reply_to_id: str | None = None in_reply_to_id: str | None = None
sensitive: bool = False sensitive: bool = False
spoiler_text: str | None = None spoiler_text: str | None = None
@ -82,9 +82,9 @@ def post_for_id(request: HttpRequest, id: str) -> Post:
@api_view.post @api_view.post
def post_status(request, details: PostStatusSchema) -> schemas.Status: def post_status(request, details: PostStatusSchema) -> schemas.Status:
# Check text length # Check text length
if len(details.status) > Config.system.post_length: if details.status and len(details.status) > Config.system.post_length:
raise ApiError(400, "Status is too long") raise ApiError(400, "Status is too long")
if len(details.status) == 0 and not details.media_ids: if not details.status and not details.media_ids:
raise ApiError(400, "Status is empty") raise ApiError(400, "Status is empty")
# Grab attachments # Grab attachments
attachments = [get_object_or_404(PostAttachment, pk=id) for id in details.media_ids] attachments = [get_object_or_404(PostAttachment, pk=id) for id in details.media_ids]
@ -103,7 +103,7 @@ def post_status(request, details: PostStatusSchema) -> schemas.Status:
pass pass
post = Post.create_local( post = Post.create_local(
author=request.identity, author=request.identity,
content=details.status, content=details.status or "",
summary=details.spoiler_text, summary=details.spoiler_text,
sensitive=details.sensitive, sensitive=details.sensitive,
visibility=visibility_map[details.visibility], visibility=visibility_map[details.visibility],

View file

@ -56,6 +56,32 @@ def test_post_status(api_client, identity):
assert response.status_code == 404 assert response.status_code == 404
@pytest.mark.django_db
def test_post_statusless(api_client, identity):
"""
Tests we can post with media but no status
"""
# Create media attachment
attachment = PostAttachment.objects.create(
mimetype="image/webp",
name=None,
state=PostAttachmentStates.fetched,
author=identity,
)
# Post new one
response = api_client.post(
"/api/v1/statuses",
content_type="application/json",
data={
"media_ids": [attachment.id],
},
)
assert 200 <= response.status_code < 300
body = response.json()
assert body["content"] == "<p></p>"
assert body["media_attachments"][0]["description"] is None
@pytest.mark.django_db @pytest.mark.django_db
def test_mention_format(api_client, identity, remote_identity): def test_mention_format(api_client, identity, remote_identity):
""" """