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