9271d5ba14a3f845d56f0996491a59bc4dc6d139
[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.Notification
9 alias Pleroma.Object
10 alias Pleroma.Repo
11 alias Pleroma.Web.ActivityPub.ActivityPub
12 alias Pleroma.Web.ActivityPub.Builder
13 alias Pleroma.Web.ActivityPub.SideEffects
14 alias Pleroma.Web.CommonAPI
15
16 import Pleroma.Factory
17
18 describe "EmojiReact objects" do
19 setup do
20 poster = insert(:user)
21 user = insert(:user)
22
23 {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"})
24
25 {:ok, emoji_react_data, []} = Builder.emoji_react(user, post.object, "👌")
26 {:ok, emoji_react, _meta} = ActivityPub.persist(emoji_react_data, local: true)
27
28 %{emoji_react: emoji_react, user: user, poster: poster}
29 end
30
31 test "adds the reaction to the object", %{emoji_react: emoji_react, user: user} do
32 {:ok, emoji_react, _} = SideEffects.handle(emoji_react)
33 object = Object.get_by_ap_id(emoji_react.data["object"])
34
35 assert object.data["reaction_count"] == 1
36 assert ["👌", [user.ap_id]] in object.data["reactions"]
37 end
38
39 test "creates a notification", %{emoji_react: emoji_react, poster: poster} do
40 {:ok, emoji_react, _} = SideEffects.handle(emoji_react)
41 assert Repo.get_by(Notification, user_id: poster.id, activity_id: emoji_react.id)
42 end
43 end
44
45 describe "like objects" do
46 setup do
47 poster = insert(:user)
48 user = insert(:user)
49 {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"})
50
51 {:ok, like_data, _meta} = Builder.like(user, post.object)
52 {:ok, like, _meta} = ActivityPub.persist(like_data, local: true)
53
54 %{like: like, user: user, poster: poster}
55 end
56
57 test "add the like to the original object", %{like: like, user: user} do
58 {:ok, like, _} = SideEffects.handle(like)
59 object = Object.get_by_ap_id(like.data["object"])
60 assert object.data["like_count"] == 1
61 assert user.ap_id in object.data["likes"]
62 end
63
64 test "creates a notification", %{like: like, poster: poster} do
65 {:ok, like, _} = SideEffects.handle(like)
66 assert Repo.get_by(Notification, user_id: poster.id, activity_id: like.id)
67 end
68 end
69 end