Do some transmogrifying for the output.
[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 import Pleroma.Factory
6 alias Pleroma.Web.CommonAPI
7
8 describe "handle_incoming" do
9 test "it works for incoming notices" do
10 data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!
11
12 {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
13 assert data["id"] == "http://mastodon.example.org/users/admin/statuses/99512778738411822/activity"
14 assert data["context"] == "tag:mastodon.example.org,2018-02-12:objectId=20:objectType=Conversation"
15 assert data["to"] == ["https://www.w3.org/ns/activitystreams#Public"]
16 assert data["cc"] == [
17 "http://mastodon.example.org/users/admin/followers",
18 "http://localtesting.pleroma.lol/users/lain"
19 ]
20 assert data["actor"] == "http://mastodon.example.org/users/admin"
21
22 object = data["object"]
23 assert object["id"] == "http://mastodon.example.org/users/admin/statuses/99512778738411822"
24
25 assert object["to"] == ["https://www.w3.org/ns/activitystreams#Public"]
26 assert object["cc"] == [
27 "http://mastodon.example.org/users/admin/followers",
28 "http://localtesting.pleroma.lol/users/lain"
29 ]
30 assert object["actor"] == "http://mastodon.example.org/users/admin"
31 assert object["attributedTo"] == "http://mastodon.example.org/users/admin"
32 end
33 end
34
35 describe "prepare outgoing" do
36 test "it turns mentions into tags" do
37 user = insert(:user)
38 other_user = insert(:user)
39
40 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey, @#{other_user.nickname}, how are ya?"})
41
42 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
43 object = modified["object"]
44
45 expected_tag = %{
46 "href" => other_user.ap_id,
47 "name" => "@#{other_user.nickname}",
48 "type" => "mention"
49 }
50
51 assert Enum.member?(object["tags"], expected_tag)
52 end
53
54 test "it adds the json-ld context" do
55 user = insert(:user)
56
57 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"})
58 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
59
60 assert modified["@context"] == "https://www.w3.org/ns/activitystreams"
61 end
62
63 test "it sets the 'attributedTo' property to the actor of the object if it doesn't have one" do
64 user = insert(:user)
65
66 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"})
67 {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
68
69 assert modified["object"]["actor"] == modified["object"]["attributedTo"]
70 end
71 end
72 end