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.SideEffectsTest do
9 alias Pleroma.Notification
12 alias Pleroma.Web.ActivityPub.ActivityPub
13 alias Pleroma.Web.ActivityPub.Builder
14 alias Pleroma.Web.ActivityPub.SideEffects
15 alias Pleroma.Web.CommonAPI
17 import Pleroma.Factory
19 describe "like objects" do
22 {:ok, post} = CommonAPI.post(user, %{"status" => "hey"})
24 {:ok, like_data, _meta} = Builder.like(user, post.object)
25 {:ok, like, _meta} = ActivityPub.persist(like_data, local: true)
27 %{like: like, user: user}
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"]
38 describe "creation of ChatMessages" do
39 test "notifies the recipient" do
40 author = insert(:user, local: false)
41 recipient = insert(:user, local: true)
43 {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey")
44 {:ok, chat_message_object} = Object.create(chat_message_data)
46 {:ok, create_activity_data, _meta} =
47 Builder.create(author, chat_message_object.data["id"], [recipient.ap_id])
49 {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
51 {:ok, _create_activity, _meta} = SideEffects.handle(create_activity)
53 assert Repo.get_by(Notification, user_id: recipient.id, activity_id: create_activity.id)
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)
60 {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey")
61 {:ok, chat_message_object} = Object.create(chat_message_data)
63 {:ok, create_activity_data, _meta} =
64 Builder.create(author, chat_message_object.data["id"], [recipient.ap_id])
66 {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
68 {:ok, _create_activity, _meta} = SideEffects.handle(create_activity)
70 # The remote user won't get a chat
71 chat = Chat.get(author.id, recipient.ap_id)
74 # The local user will get a chat
75 chat = Chat.get(recipient.id, author.ap_id)
78 author = insert(:user, local: true)
79 recipient = insert(:user, local: true)
81 {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey")
82 {:ok, chat_message_object} = Object.create(chat_message_data)
84 {:ok, create_activity_data, _meta} =
85 Builder.create(author, chat_message_object.data["id"], [recipient.ap_id])
87 {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
89 {:ok, _create_activity, _meta} = SideEffects.handle(create_activity)
91 # Both users are local and get the chat
92 chat = Chat.get(author.id, recipient.ap_id)
95 chat = Chat.get(recipient.id, author.ap_id)