57598d020f8e2d653155deafdb92f96e80f6fc66
[akkoma] / test / web / activity_pub / transmogrifier_test.exs
1 defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
2 use Pleroma.DataCase
3 alias Pleroma.Web.ActivityPub.Transmogrifier
4 alias Pleroma.Activity
5 alias Pleroma.User
6 import Pleroma.Factory
7 alias Pleroma.Web.CommonAPI
8
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!
12
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"
20 ]
21 assert data["actor"] == "http://mastodon.example.org/users/admin"
22
23 object = data["object"]
24 assert object["id"] == "http://mastodon.example.org/users/admin/statuses/99512778738411822"
25
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"
30 ]
31 assert object["actor"] == "http://mastodon.example.org/users/admin"
32 assert object["attributedTo"] == "http://mastodon.example.org/users/admin"
33 end
34
35 test "it works for incoming follow requests" do
36 user = insert(:user)
37 data = File.read!("test/fixtures/mastodon-follow-activity.json") |> Poison.decode!
38 |> Map.put("object", user.ap_id)
39
40 {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
41
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)
46
47 end
48 end
49
50 describe "prepare outgoing" do
51 test "it turns mentions into tags" do
52 user = insert(:user)
53 other_user = insert(:user)
54
55 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey, @#{other_user.nickname}, how are ya?"})
56
57 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
58 object = modified["object"]
59
60 expected_tag = %{
61 "href" => other_user.ap_id,
62 "name" => "@#{other_user.nickname}",
63 "type" => "Mention"
64 }
65
66 assert Enum.member?(object["tag"], expected_tag)
67 end
68
69 test "it adds the json-ld context" do
70 user = insert(:user)
71
72 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"})
73 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
74
75 assert modified["@context"] == "https://www.w3.org/ns/activitystreams"
76 end
77
78 test "it sets the 'attributedTo' property to the actor of the object if it doesn't have one" do
79 user = insert(:user)
80
81 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"})
82 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
83
84 assert modified["object"]["actor"] == modified["object"]["attributedTo"]
85 end
86 end
87 end