61ef727427e38afd1fd618fc6df06e9545954680
[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 "Undo objects" do
20 setup do
21 poster = insert(:user)
22 user = insert(:user)
23 {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"})
24 {:ok, like} = CommonAPI.favorite(user, post.id)
25
26 {:ok, undo_data, _meta} = Builder.undo(user, like)
27 {:ok, like_undo, _meta} = ActivityPub.persist(undo_data, local: true)
28
29 %{like_undo: like_undo, post: post, like: like}
30 end
31
32 test "a like undo removes the like from the object", %{like_undo: like_undo, post: post} do
33 {:ok, _like_undo, _} = SideEffects.handle(like_undo)
34
35 object = Object.get_by_ap_id(post.data["object"])
36
37 assert object.data["like_count"] == 0
38 assert object.data["likes"] == []
39 end
40
41 test "deletes the original like", %{like_undo: like_undo, like: like} do
42 {:ok, _like_undo, _} = SideEffects.handle(like_undo)
43 refute Activity.get_by_id(like.id)
44 end
45 end
46
47 describe "like objects" do
48 setup do
49 poster = insert(:user)
50 user = insert(:user)
51 {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"})
52
53 {:ok, like_data, _meta} = Builder.like(user, post.object)
54 {:ok, like, _meta} = ActivityPub.persist(like_data, local: true)
55
56 %{like: like, user: user, poster: poster}
57 end
58
59 test "add the like to the original object", %{like: like, user: user} do
60 {:ok, like, _} = SideEffects.handle(like)
61 object = Object.get_by_ap_id(like.data["object"])
62 assert object.data["like_count"] == 1
63 assert user.ap_id in object.data["likes"]
64 end
65
66 test "creates a notification", %{like: like, poster: poster} do
67 {:ok, like, _} = SideEffects.handle(like)
68 assert Repo.get_by(Notification, user_id: poster.id, activity_id: like.id)
69 end
70 end
71 end