SideEffects: Extend ChatMessage test.
[akkoma] / test / web / activity_pub / side_effects_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.SideEffectsTest do
6 use Pleroma.DataCase
7
8 alias Pleroma.Chat
9 alias Pleroma.Object
10 alias Pleroma.Web.ActivityPub.ActivityPub
11 alias Pleroma.Web.ActivityPub.Builder
12 alias Pleroma.Web.ActivityPub.SideEffects
13 alias Pleroma.Web.CommonAPI
14
15 import Pleroma.Factory
16
17 describe "like objects" do
18 setup do
19 user = insert(:user)
20 {:ok, post} = CommonAPI.post(user, %{"status" => "hey"})
21
22 {:ok, like_data, _meta} = Builder.like(user, post.object)
23 {:ok, like, _meta} = ActivityPub.persist(like_data, local: true)
24
25 %{like: like, user: user}
26 end
27
28 test "add the like to the original object", %{like: like, user: user} do
29 {:ok, like, _} = SideEffects.handle(like)
30 object = Object.get_by_ap_id(like.data["object"])
31 assert object.data["like_count"] == 1
32 assert user.ap_id in object.data["likes"]
33 end
34 end
35
36 describe "creation of ChatMessages" do
37 test "it creates a Chat for the local users and bumps the unread count" do
38 author = insert(:user, local: false)
39 recipient = insert(:user, local: true)
40
41 {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey")
42 {:ok, chat_message_object} = Object.create(chat_message_data)
43
44 {:ok, create_activity_data, _meta} =
45 Builder.create(author, chat_message_object.data["id"], [recipient.ap_id])
46
47 {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
48
49 {:ok, _create_activity, _meta} = SideEffects.handle(create_activity)
50
51 # The remote user won't get a chat
52 chat = Chat.get(author.id, recipient.ap_id)
53 refute chat
54
55 # The local user will get a chat
56 chat = Chat.get(recipient.id, author.ap_id)
57 assert chat
58
59 author = insert(:user, local: true)
60 recipient = insert(:user, local: true)
61
62 {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey")
63 {:ok, chat_message_object} = Object.create(chat_message_data)
64
65 {:ok, create_activity_data, _meta} =
66 Builder.create(author, chat_message_object.data["id"], [recipient.ap_id])
67
68 {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
69
70 {:ok, _create_activity, _meta} = SideEffects.handle(create_activity)
71
72 # Both users are local and get the chat
73 chat = Chat.get(author.id, recipient.ap_id)
74 assert chat
75
76 chat = Chat.get(recipient.id, author.ap_id)
77 assert chat
78 end
79 end
80 end