Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into remake-remodel
[akkoma] / test / web / mastodon_api / views / notification_view_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do
6 use Pleroma.DataCase
7
8 alias Pleroma.Activity
9 alias Pleroma.Notification
10 alias Pleroma.Repo
11 alias Pleroma.User
12 alias Pleroma.Web.CommonAPI
13 alias Pleroma.Web.CommonAPI.Utils
14 alias Pleroma.Web.MastodonAPI.AccountView
15 alias Pleroma.Web.MastodonAPI.NotificationView
16 alias Pleroma.Web.MastodonAPI.StatusView
17 import Pleroma.Factory
18
19 test "Mention notification" do
20 user = insert(:user)
21 mentioned_user = insert(:user)
22 {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{mentioned_user.nickname}"})
23 {:ok, [notification]} = Notification.create_notifications(activity)
24 user = User.get_cached_by_id(user.id)
25
26 expected = %{
27 id: to_string(notification.id),
28 pleroma: %{is_seen: false},
29 type: "mention",
30 account: AccountView.render("show.json", %{user: user, for: mentioned_user}),
31 status: StatusView.render("show.json", %{activity: activity, for: mentioned_user}),
32 created_at: Utils.to_masto_date(notification.inserted_at)
33 }
34
35 result =
36 NotificationView.render("index.json", %{notifications: [notification], for: mentioned_user})
37
38 assert [expected] == result
39 end
40
41 test "Favourite notification" do
42 user = insert(:user)
43 another_user = insert(:user)
44 {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"})
45 {:ok, favorite_activity} = CommonAPI.favorite(another_user, create_activity.id)
46 {:ok, [notification]} = Notification.create_notifications(favorite_activity)
47 create_activity = Activity.get_by_id(create_activity.id)
48
49 expected = %{
50 id: to_string(notification.id),
51 pleroma: %{is_seen: false},
52 type: "favourite",
53 account: AccountView.render("show.json", %{user: another_user, for: user}),
54 status: StatusView.render("show.json", %{activity: create_activity, for: user}),
55 created_at: Utils.to_masto_date(notification.inserted_at)
56 }
57
58 result = NotificationView.render("index.json", %{notifications: [notification], for: user})
59
60 assert [expected] == result
61 end
62
63 test "Reblog notification" do
64 user = insert(:user)
65 another_user = insert(:user)
66 {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"})
67 {:ok, reblog_activity, _object} = CommonAPI.repeat(create_activity.id, another_user)
68 {:ok, [notification]} = Notification.create_notifications(reblog_activity)
69 reblog_activity = Activity.get_by_id(create_activity.id)
70
71 expected = %{
72 id: to_string(notification.id),
73 pleroma: %{is_seen: false},
74 type: "reblog",
75 account: AccountView.render("show.json", %{user: another_user, for: user}),
76 status: StatusView.render("show.json", %{activity: reblog_activity, for: user}),
77 created_at: Utils.to_masto_date(notification.inserted_at)
78 }
79
80 result = NotificationView.render("index.json", %{notifications: [notification], for: user})
81
82 assert [expected] == result
83 end
84
85 test "Follow notification" do
86 follower = insert(:user)
87 followed = insert(:user)
88 {:ok, follower, followed, _activity} = CommonAPI.follow(follower, followed)
89 notification = Notification |> Repo.one() |> Repo.preload(:activity)
90
91 expected = %{
92 id: to_string(notification.id),
93 pleroma: %{is_seen: false},
94 type: "follow",
95 account: AccountView.render("show.json", %{user: follower, for: followed}),
96 created_at: Utils.to_masto_date(notification.inserted_at)
97 }
98
99 result =
100 NotificationView.render("index.json", %{notifications: [notification], for: followed})
101
102 assert [expected] == result
103
104 User.perform(:delete, follower)
105 notification = Notification |> Repo.one() |> Repo.preload(:activity)
106
107 assert [] ==
108 NotificationView.render("index.json", %{notifications: [notification], for: followed})
109 end
110
111 test "Move notification" do
112 %{ap_id: old_ap_id} = old_user = insert(:user)
113 %{ap_id: _new_ap_id} = new_user = insert(:user, also_known_as: [old_ap_id])
114 follower = insert(:user)
115
116 User.follow(follower, old_user)
117 Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
118 Pleroma.Tests.ObanHelpers.perform_all()
119
120 old_user = refresh_record(old_user)
121 new_user = refresh_record(new_user)
122
123 [notification] = Notification.for_user(follower)
124
125 expected = %{
126 id: to_string(notification.id),
127 pleroma: %{is_seen: false},
128 type: "move",
129 account: AccountView.render("show.json", %{user: old_user, for: follower}),
130 target: AccountView.render("show.json", %{user: new_user, for: follower}),
131 created_at: Utils.to_masto_date(notification.inserted_at)
132 }
133
134 assert [expected] ==
135 NotificationView.render("index.json", %{notifications: [notification], for: follower})
136 end
137 end