forked from AkkomaGang/akkoma
transmogrifier tests: Move & enhance in specialised modules
This commit is contained in:
parent
82895a4012
commit
39870d99b8
3 changed files with 143 additions and 92 deletions
|
@ -0,0 +1,78 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.ActivityPub.Transmogrifier.AnswerHandlingTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
alias Pleroma.Activity
|
||||||
|
alias Pleroma.Object
|
||||||
|
alias Pleroma.Web.ActivityPub.Transmogrifier
|
||||||
|
alias Pleroma.Web.CommonAPI
|
||||||
|
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
|
test "incoming, rewrites Note to Answer and increments vote counters" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, activity} =
|
||||||
|
CommonAPI.post(user, %{
|
||||||
|
status: "suya...",
|
||||||
|
poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10}
|
||||||
|
})
|
||||||
|
|
||||||
|
object = Object.normalize(activity)
|
||||||
|
|
||||||
|
data =
|
||||||
|
File.read!("test/fixtures/mastodon-vote.json")
|
||||||
|
|> Poison.decode!()
|
||||||
|
|> Kernel.put_in(["to"], user.ap_id)
|
||||||
|
|> Kernel.put_in(["object", "inReplyTo"], object.data["id"])
|
||||||
|
|> Kernel.put_in(["object", "to"], user.ap_id)
|
||||||
|
|
||||||
|
{:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
|
||||||
|
answer_object = Object.normalize(activity)
|
||||||
|
assert answer_object.data["type"] == "Answer"
|
||||||
|
assert answer_object.data["inReplyTo"] == object.data["id"]
|
||||||
|
|
||||||
|
new_object = Object.get_by_ap_id(object.data["id"])
|
||||||
|
assert new_object.data["replies_count"] == object.data["replies_count"]
|
||||||
|
|
||||||
|
assert Enum.any?(
|
||||||
|
new_object.data["oneOf"],
|
||||||
|
fn
|
||||||
|
%{"name" => "suya..", "replies" => %{"totalItems" => 1}} -> true
|
||||||
|
_ -> false
|
||||||
|
end
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "outgoing, rewrites Answer to Note" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, poll_activity} =
|
||||||
|
CommonAPI.post(user, %{
|
||||||
|
status: "suya...",
|
||||||
|
poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10}
|
||||||
|
})
|
||||||
|
|
||||||
|
poll_object = Object.normalize(poll_activity)
|
||||||
|
# TODO: Replace with CommonAPI vote creation when implemented
|
||||||
|
data =
|
||||||
|
File.read!("test/fixtures/mastodon-vote.json")
|
||||||
|
|> Poison.decode!()
|
||||||
|
|> Kernel.put_in(["to"], user.ap_id)
|
||||||
|
|> Kernel.put_in(["object", "inReplyTo"], poll_object.data["id"])
|
||||||
|
|> Kernel.put_in(["object", "to"], user.ap_id)
|
||||||
|
|
||||||
|
{:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
|
||||||
|
{:ok, data} = Transmogrifier.prepare_outgoing(activity.data)
|
||||||
|
|
||||||
|
assert data["object"]["type"] == "Note"
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.ActivityPub.Transmogrifier.QuestionHandlingTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
alias Pleroma.Activity
|
||||||
|
alias Pleroma.Object
|
||||||
|
alias Pleroma.Web.ActivityPub.Transmogrifier
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
|
test "Mastodon Question activity" do
|
||||||
|
data = File.read!("test/fixtures/mastodon-question-activity.json") |> Poison.decode!()
|
||||||
|
|
||||||
|
{:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
|
||||||
|
|
||||||
|
object = Object.normalize(activity, false)
|
||||||
|
|
||||||
|
assert object.data["closed"] == "2019-05-11T09:03:36Z"
|
||||||
|
|
||||||
|
assert object.data["context"] ==
|
||||||
|
"tag:mastodon.sdf.org,2019-05-10:objectId=15095122:objectType=Conversation"
|
||||||
|
|
||||||
|
assert object.data["context_id"]
|
||||||
|
|
||||||
|
assert object.data["anyOf"] == []
|
||||||
|
|
||||||
|
assert Enum.sort(object.data["oneOf"]) ==
|
||||||
|
Enum.sort([
|
||||||
|
%{
|
||||||
|
"name" => "25 char limit is dumb",
|
||||||
|
"replies" => %{"totalItems" => 0, "type" => "Collection"},
|
||||||
|
"type" => "Note"
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
"name" => "Dunno",
|
||||||
|
"replies" => %{"totalItems" => 0, "type" => "Collection"},
|
||||||
|
"type" => "Note"
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
"name" => "Everyone knows that!",
|
||||||
|
"replies" => %{"totalItems" => 1, "type" => "Collection"},
|
||||||
|
"type" => "Note"
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
"name" => "I can't even fit a funny",
|
||||||
|
"replies" => %{"totalItems" => 1, "type" => "Collection"},
|
||||||
|
"type" => "Note"
|
||||||
|
}
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns an error if received a second time" do
|
||||||
|
data = File.read!("test/fixtures/mastodon-question-activity.json") |> Poison.decode!()
|
||||||
|
|
||||||
|
assert {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
|
||||||
|
|
||||||
|
assert {:error, {:validate_object, {:error, _}}} = Transmogrifier.handle_incoming(data)
|
||||||
|
end
|
||||||
|
end
|
|
@ -217,42 +217,6 @@ test "it works for incoming notices with hashtags" do
|
||||||
assert Enum.at(object.data["tag"], 2) == "moo"
|
assert Enum.at(object.data["tag"], 2) == "moo"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it works for incoming questions" do
|
|
||||||
data = File.read!("test/fixtures/mastodon-question-activity.json") |> Poison.decode!()
|
|
||||||
|
|
||||||
{:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
|
|
||||||
|
|
||||||
object = Object.normalize(activity, false)
|
|
||||||
|
|
||||||
assert object.data["closed"] == "2019-05-11T09:03:36Z"
|
|
||||||
|
|
||||||
assert object.data["anyOf"] == []
|
|
||||||
|
|
||||||
assert Enum.sort(object.data["oneOf"]) ==
|
|
||||||
Enum.sort([
|
|
||||||
%{
|
|
||||||
"name" => "25 char limit is dumb",
|
|
||||||
"replies" => %{"totalItems" => 0, "type" => "Collection"},
|
|
||||||
"type" => "Note"
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
"name" => "Dunno",
|
|
||||||
"replies" => %{"totalItems" => 0, "type" => "Collection"},
|
|
||||||
"type" => "Note"
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
"name" => "Everyone knows that!",
|
|
||||||
"replies" => %{"totalItems" => 1, "type" => "Collection"},
|
|
||||||
"type" => "Note"
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
"name" => "I can't even fit a funny",
|
|
||||||
"replies" => %{"totalItems" => 1, "type" => "Collection"},
|
|
||||||
"type" => "Note"
|
|
||||||
}
|
|
||||||
])
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it works for incoming listens" do
|
test "it works for incoming listens" do
|
||||||
data = %{
|
data = %{
|
||||||
"@context" => "https://www.w3.org/ns/activitystreams",
|
"@context" => "https://www.w3.org/ns/activitystreams",
|
||||||
|
@ -282,38 +246,6 @@ test "it works for incoming listens" do
|
||||||
assert object.data["length"] == 180_000
|
assert object.data["length"] == 180_000
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it rewrites Note votes to Answer and increments vote counters on Question activities" do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
{:ok, activity} =
|
|
||||||
CommonAPI.post(user, %{
|
|
||||||
status: "suya...",
|
|
||||||
poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10}
|
|
||||||
})
|
|
||||||
|
|
||||||
object = Object.normalize(activity)
|
|
||||||
|
|
||||||
data =
|
|
||||||
File.read!("test/fixtures/mastodon-vote.json")
|
|
||||||
|> Poison.decode!()
|
|
||||||
|> Kernel.put_in(["to"], user.ap_id)
|
|
||||||
|> Kernel.put_in(["object", "inReplyTo"], object.data["id"])
|
|
||||||
|> Kernel.put_in(["object", "to"], user.ap_id)
|
|
||||||
|
|
||||||
{:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
|
|
||||||
answer_object = Object.normalize(activity)
|
|
||||||
assert answer_object.data["type"] == "Answer"
|
|
||||||
object = Object.get_by_ap_id(object.data["id"])
|
|
||||||
|
|
||||||
assert Enum.any?(
|
|
||||||
object.data["oneOf"],
|
|
||||||
fn
|
|
||||||
%{"name" => "suya..", "replies" => %{"totalItems" => 1}} -> true
|
|
||||||
_ -> false
|
|
||||||
end
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it works for incoming notices with contentMap" do
|
test "it works for incoming notices with contentMap" do
|
||||||
data =
|
data =
|
||||||
File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Poison.decode!()
|
File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Poison.decode!()
|
||||||
|
@ -1280,30 +1212,6 @@ test "successfully reserializes a message with AS2 objects in IR" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "Rewrites Answers to Notes" do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
{:ok, poll_activity} =
|
|
||||||
CommonAPI.post(user, %{
|
|
||||||
status: "suya...",
|
|
||||||
poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10}
|
|
||||||
})
|
|
||||||
|
|
||||||
poll_object = Object.normalize(poll_activity)
|
|
||||||
# TODO: Replace with CommonAPI vote creation when implemented
|
|
||||||
data =
|
|
||||||
File.read!("test/fixtures/mastodon-vote.json")
|
|
||||||
|> Poison.decode!()
|
|
||||||
|> Kernel.put_in(["to"], user.ap_id)
|
|
||||||
|> Kernel.put_in(["object", "inReplyTo"], poll_object.data["id"])
|
|
||||||
|> Kernel.put_in(["object", "to"], user.ap_id)
|
|
||||||
|
|
||||||
{:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
|
|
||||||
{:ok, data} = Transmogrifier.prepare_outgoing(activity.data)
|
|
||||||
|
|
||||||
assert data["object"]["type"] == "Note"
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "fix_explicit_addressing" do
|
describe "fix_explicit_addressing" do
|
||||||
setup do
|
setup do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
Loading…
Reference in a new issue