SideEffects: Handle deletions.
[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.User
14 alias Pleroma.Tests.ObanHelpers
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
22 describe "delete objects" do
23 setup do
24 user = insert(:user)
25 {:ok, post} = CommonAPI.post(user, %{"status" => "hey"})
26 object = Object.normalize(post)
27 {:ok, delete_data, _meta} = Builder.delete(user, object.data["id"])
28 {:ok, delete_user_data, _meta} = Builder.delete(user, user.ap_id)
29 {:ok, delete, _meta} = ActivityPub.persist(delete_data, local: true)
30 {:ok, delete_user, _meta} = ActivityPub.persist(delete_user_data, local: true)
31 %{user: user, delete: delete, post: post, object: object, delete_user: delete_user}
32 end
33
34 test "it handles object deletions", %{delete: delete, post: post, object: object} do
35 # In object deletions, the object is replaced by a tombstone and the
36 # create activity is deleted
37
38 {:ok, _delete, _} = SideEffects.handle(delete)
39
40 object = Object.get_by_id(object.id)
41 assert object.data["type"] == "Tombstone"
42 refute Activity.get_by_id(post.id)
43 end
44
45 test "it handles user deletions", %{delete_user: delete, user: user} do
46 {:ok, _delete, _} = SideEffects.handle(delete)
47 ObanHelpers.perform_all()
48
49 refute User.get_cached_by_ap_id(user.ap_id)
50 end
51 end
52
53 describe "like objects" do
54 setup do
55 poster = insert(:user)
56 user = insert(:user)
57 {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"})
58
59 {:ok, like_data, _meta} = Builder.like(user, post.object)
60 {:ok, like, _meta} = ActivityPub.persist(like_data, local: true)
61
62 %{like: like, user: user, poster: poster}
63 end
64
65 test "add the like to the original object", %{like: like, user: user} do
66 {:ok, like, _} = SideEffects.handle(like)
67 object = Object.get_by_ap_id(like.data["object"])
68 assert object.data["like_count"] == 1
69 assert user.ap_id in object.data["likes"]
70 end
71
72 test "creates a notification", %{like: like, poster: poster} do
73 {:ok, like, _} = SideEffects.handle(like)
74 assert Repo.get_by(Notification, user_id: poster.id, activity_id: like.id)
75 end
76 end
77 end