1 defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
3 alias Pleroma.Web.ActivityPub.Transmogrifier
7 alias Pleroma.Web.CommonAPI
9 describe "handle_incoming" do
10 test "it works for incoming notices" do
11 data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!
13 {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
14 assert data["id"] == "http://mastodon.example.org/users/admin/statuses/99512778738411822/activity"
15 assert data["context"] == "tag:mastodon.example.org,2018-02-12:objectId=20:objectType=Conversation"
16 assert data["to"] == ["https://www.w3.org/ns/activitystreams#Public"]
17 assert data["cc"] == [
18 "http://mastodon.example.org/users/admin/followers",
19 "http://localtesting.pleroma.lol/users/lain"
21 assert data["actor"] == "http://mastodon.example.org/users/admin"
23 object = data["object"]
24 assert object["id"] == "http://mastodon.example.org/users/admin/statuses/99512778738411822"
26 assert object["to"] == ["https://www.w3.org/ns/activitystreams#Public"]
27 assert object["cc"] == [
28 "http://mastodon.example.org/users/admin/followers",
29 "http://localtesting.pleroma.lol/users/lain"
31 assert object["actor"] == "http://mastodon.example.org/users/admin"
32 assert object["attributedTo"] == "http://mastodon.example.org/users/admin"
35 test "it works for incoming follow requests" do
37 data = File.read!("test/fixtures/mastodon-follow-activity.json") |> Poison.decode!
38 |> Map.put("object", user.ap_id)
40 {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
42 assert data["actor"] == "http://mastodon.example.org/users/admin"
43 assert data["type"] == "Follow"
44 assert data["id"] == "http://mastodon.example.org/users/admin#follows/2"
45 assert User.following?(User.get_by_ap_id(data["actor"]), user)
50 describe "prepare outgoing" do
51 test "it turns mentions into tags" do
53 other_user = insert(:user)
55 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey, @#{other_user.nickname}, how are ya?"})
57 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
58 object = modified["object"]
61 "href" => other_user.ap_id,
62 "name" => "@#{other_user.nickname}",
66 assert Enum.member?(object["tag"], expected_tag)
69 test "it adds the json-ld context" do
72 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"})
73 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
75 assert modified["@context"] == "https://www.w3.org/ns/activitystreams"
78 test "it sets the 'attributedTo' property to the actor of the object if it doesn't have one" do
81 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"})
82 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
84 assert modified["object"]["actor"] == modified["object"]["attributedTo"]