SideEffectsTest: Test streaming.
[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 Oban.Testing, repo: Pleroma.Repo
7 use Pleroma.DataCase
8
9 alias Pleroma.Activity
10 alias Pleroma.Notification
11 alias Pleroma.Object
12 alias Pleroma.Repo
13 alias Pleroma.Tests.ObanHelpers
14 alias Pleroma.User
15 alias Pleroma.Web.ActivityPub.ActivityPub
16 alias Pleroma.Web.ActivityPub.Builder
17 alias Pleroma.Web.ActivityPub.SideEffects
18 alias Pleroma.Web.CommonAPI
19
20 import Pleroma.Factory
21 import Mock
22
23 describe "delete objects" do
24 setup do
25 user = insert(:user)
26 {:ok, post} = CommonAPI.post(user, %{"status" => "hey"})
27 object = Object.normalize(post)
28 {:ok, delete_data, _meta} = Builder.delete(user, object.data["id"])
29 {:ok, delete_user_data, _meta} = Builder.delete(user, user.ap_id)
30 {:ok, delete, _meta} = ActivityPub.persist(delete_data, local: true)
31 {:ok, delete_user, _meta} = ActivityPub.persist(delete_user_data, local: true)
32 %{user: user, delete: delete, post: post, object: object, delete_user: delete_user}
33 end
34
35 test "it handles object deletions", %{delete: delete, post: post, object: object} do
36 # In object deletions, the object is replaced by a tombstone and the
37 # create activity is deleted.
38
39 with_mock Pleroma.Web.ActivityPub.ActivityPub,
40 stream_out: fn _ -> nil end,
41 stream_out_participations: fn _, _ -> nil end do
42 {:ok, delete, _} = SideEffects.handle(delete)
43 user = User.get_cached_by_ap_id(object.data["actor"])
44 assert called(Pleroma.Web.ActivityPub.ActivityPub.stream_out(delete))
45 assert called(Pleroma.Web.ActivityPub.ActivityPub.stream_out_participations(object, user))
46 end
47
48 object = Object.get_by_id(object.id)
49 assert object.data["type"] == "Tombstone"
50 refute Activity.get_by_id(post.id)
51 end
52
53 test "it handles user deletions", %{delete_user: delete, user: user} do
54 {:ok, _delete, _} = SideEffects.handle(delete)
55 ObanHelpers.perform_all()
56
57 refute User.get_cached_by_ap_id(user.ap_id)
58 end
59 end
60
61 describe "like objects" do
62 setup do
63 poster = insert(:user)
64 user = insert(:user)
65 {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"})
66
67 {:ok, like_data, _meta} = Builder.like(user, post.object)
68 {:ok, like, _meta} = ActivityPub.persist(like_data, local: true)
69
70 %{like: like, user: user, poster: poster}
71 end
72
73 test "add the like to the original object", %{like: like, user: user} do
74 {:ok, like, _} = SideEffects.handle(like)
75 object = Object.get_by_ap_id(like.data["object"])
76 assert object.data["like_count"] == 1
77 assert user.ap_id in object.data["likes"]
78 end
79
80 test "creates a notification", %{like: like, poster: poster} do
81 {:ok, like, _} = SideEffects.handle(like)
82 assert Repo.get_by(Notification, user_id: poster.id, activity_id: like.id)
83 end
84 end
85 end