Notifications: Create a chat notification.
[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.Notification
10 alias Pleroma.Object
11 alias Pleroma.Repo
12 alias Pleroma.Web.ActivityPub.ActivityPub
13 alias Pleroma.Web.ActivityPub.Builder
14 alias Pleroma.Web.ActivityPub.SideEffects
15 alias Pleroma.Web.CommonAPI
16
17 import Pleroma.Factory
18
19 describe "like objects" do
20 setup do
21 user = insert(:user)
22 {:ok, post} = CommonAPI.post(user, %{"status" => "hey"})
23
24 {:ok, like_data, _meta} = Builder.like(user, post.object)
25 {:ok, like, _meta} = ActivityPub.persist(like_data, local: true)
26
27 %{like: like, user: user}
28 end
29
30 test "add the like to the original object", %{like: like, user: user} do
31 {:ok, like, _} = SideEffects.handle(like)
32 object = Object.get_by_ap_id(like.data["object"])
33 assert object.data["like_count"] == 1
34 assert user.ap_id in object.data["likes"]
35 end
36 end
37
38 describe "creation of ChatMessages" do
39 test "notifies the recipient" do
40 author = insert(:user, local: false)
41 recipient = insert(:user, local: true)
42
43 {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey")
44 {:ok, chat_message_object} = Object.create(chat_message_data)
45
46 {:ok, create_activity_data, _meta} =
47 Builder.create(author, chat_message_object.data["id"], [recipient.ap_id])
48
49 {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
50
51 {:ok, _create_activity, _meta} = SideEffects.handle(create_activity)
52
53 assert Repo.get_by(Notification, user_id: recipient.id, activity_id: create_activity.id)
54 end
55
56 test "it creates a Chat for the local users and bumps the unread count" do
57 author = insert(:user, local: false)
58 recipient = insert(:user, local: true)
59
60 {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey")
61 {:ok, chat_message_object} = Object.create(chat_message_data)
62
63 {:ok, create_activity_data, _meta} =
64 Builder.create(author, chat_message_object.data["id"], [recipient.ap_id])
65
66 {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
67
68 {:ok, _create_activity, _meta} = SideEffects.handle(create_activity)
69
70 # The remote user won't get a chat
71 chat = Chat.get(author.id, recipient.ap_id)
72 refute chat
73
74 # The local user will get a chat
75 chat = Chat.get(recipient.id, author.ap_id)
76 assert chat
77
78 author = insert(:user, local: true)
79 recipient = insert(:user, local: true)
80
81 {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey")
82 {:ok, chat_message_object} = Object.create(chat_message_data)
83
84 {:ok, create_activity_data, _meta} =
85 Builder.create(author, chat_message_object.data["id"], [recipient.ap_id])
86
87 {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
88
89 {:ok, _create_activity, _meta} = SideEffects.handle(create_activity)
90
91 # Both users are local and get the chat
92 chat = Chat.get(author.id, recipient.ap_id)
93 assert chat
94
95 chat = Chat.get(recipient.id, author.ap_id)
96 assert chat
97 end
98 end
99 end