fix(activitypub): apply the Note fixups to incoming Questions

Ported from Akkoma 678f6fdb7.

Co-authored-by: Oneric <oneric@oneric.stub>
This commit is contained in:
Lain Soykaf 2026-10-31 13:43:59 +04:00
commit c3fb297b89
No known key found for this signature in database
4 changed files with 23 additions and 8 deletions

View file

@ -0,0 +1 @@
Apply the Note fixups to incoming Questions, so polls with a single non-array tag or attachment are accepted

View file

@ -213,7 +213,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
defp fix_misskey_content(object), do: object
defp fix(data) do
def fix(data) do
data
|> CommonFixes.fix_actor()
|> CommonFixes.fix_object_defaults()

View file

@ -6,10 +6,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do
use Ecto.Schema
alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
alias Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
alias Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator
alias Pleroma.Web.ActivityPub.Transmogrifier
import Ecto.Changeset
@ -62,11 +61,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do
defp fix(data) do
data
|> CommonFixes.fix_actor()
|> CommonFixes.fix_object_defaults()
|> CommonFixes.fix_quote_url()
|> CommonFixes.fix_likes()
|> Transmogrifier.fix_emoji()
|> ArticleNotePageValidator.fix()
|> fix_closed()
end

View file

@ -103,6 +103,25 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.QuestionHandlingTest do
assert Enum.sort(object.data["oneOf"]) == Enum.sort(options)
end
test "Question activity with a single, non-array tag" do
tag = %{
"href" => "https://gts.example/tags/caturday",
"name" => "#caturday",
"type" => "Hashtag"
}
data =
File.read!("test/fixtures/mastodon-question-activity.json")
|> Jason.decode!()
|> Kernel.put_in(["object", "tag"], tag)
{:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
object = Object.normalize(activity, fetch: false)
assert tag in object.data["tag"]
assert Object.hashtags(object) == ["caturday"]
end
test "Mastodon Question activity with custom emojis" do
options = [
%{