1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.ActivityPub.Transmogrifier.ChatMessageTest do
10 alias Pleroma.Activity
13 alias Pleroma.Web.ActivityPub.Transmogrifier
15 describe "handle_incoming" do
16 test "it rejects messages that don't contain content" do
18 File.read!("test/fixtures/create-chat-message.json")
23 |> Map.delete("content")
27 |> Map.put("object", object)
30 insert(:user, ap_id: data["actor"], local: false, last_refreshed_at: DateTime.utc_now())
34 ap_id: List.first(data["to"]),
36 last_refreshed_at: DateTime.utc_now()
39 {:error, _} = Transmogrifier.handle_incoming(data)
42 test "it rejects messages that don't concern local users" do
44 File.read!("test/fixtures/create-chat-message.json")
48 insert(:user, ap_id: data["actor"], local: false, last_refreshed_at: DateTime.utc_now())
52 ap_id: List.first(data["to"]),
54 last_refreshed_at: DateTime.utc_now()
57 {:error, _} = Transmogrifier.handle_incoming(data)
60 test "it rejects messages where the `to` field of activity and object don't match" do
62 File.read!("test/fixtures/create-chat-message.json")
65 author = insert(:user, ap_id: data["actor"])
66 _recipient = insert(:user, ap_id: List.first(data["to"]))
70 |> Map.put("to", author.ap_id)
72 assert match?({:error, _}, Transmogrifier.handle_incoming(data))
73 refute Object.get_by_ap_id(data["object"]["id"])
76 test "it fetches the actor if they aren't in our system" do
77 Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
80 File.read!("test/fixtures/create-chat-message.json")
82 |> Map.put("actor", "http://mastodon.example.org/users/admin")
83 |> put_in(["object", "actor"], "http://mastodon.example.org/users/admin")
85 _recipient = insert(:user, ap_id: List.first(data["to"]), local: true)
87 {:ok, %Activity{} = _activity} = Transmogrifier.handle_incoming(data)
90 test "it inserts it and creates a chat" do
92 File.read!("test/fixtures/create-chat-message.json")
96 insert(:user, ap_id: data["actor"], local: false, last_refreshed_at: DateTime.utc_now())
98 recipient = insert(:user, ap_id: List.first(data["to"]), local: true)
100 {:ok, %Activity{} = activity} = Transmogrifier.handle_incoming(data)
101 assert activity.local == false
103 assert activity.actor == author.ap_id
104 assert activity.recipients == [recipient.ap_id, author.ap_id]
106 %Object{} = object = Object.get_by_ap_id(activity.data["object"])
109 assert object.data["content"] == "You expected a cute girl? Too bad. alert('XSS')"
110 assert match?(%{"firefox" => _}, object.data["emoji"])
112 refute Chat.get(author.id, recipient.ap_id)
113 assert Chat.get(recipient.id, author.ap_id)