1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do
9 alias Pleroma.Notification
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
19 test "Mention notification" do
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)
27 id: to_string(notification.id),
28 pleroma: %{is_seen: false},
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)
36 NotificationView.render("index.json", %{notifications: [notification], for: mentioned_user})
38 assert [expected] == result
41 test "Favourite notification" do
43 another_user = insert(:user)
44 {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"})
45 {:ok, favorite_activity, _object} = CommonAPI.favorite(create_activity.id, another_user)
46 {:ok, [notification]} = Notification.create_notifications(favorite_activity)
47 create_activity = Activity.get_by_id(create_activity.id)
50 id: to_string(notification.id),
51 pleroma: %{is_seen: false},
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)
58 result = NotificationView.render("index.json", %{notifications: [notification], for: user})
60 assert [expected] == result
63 test "Reblog notification" do
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)
72 id: to_string(notification.id),
73 pleroma: %{is_seen: false},
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)
80 result = NotificationView.render("index.json", %{notifications: [notification], for: user})
82 assert [expected] == result
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)
92 id: to_string(notification.id),
93 pleroma: %{is_seen: false},
95 account: AccountView.render("show.json", %{user: follower, for: followed}),
96 created_at: Utils.to_masto_date(notification.inserted_at)
100 NotificationView.render("index.json", %{notifications: [notification], for: followed})
102 assert [expected] == result
104 User.perform(:delete, follower)
105 notification = Notification |> Repo.one() |> Repo.preload(:activity)
108 NotificationView.render("index.json", %{notifications: [notification], for: followed})
111 @tag capture_log: true
112 test "Move notification" do
113 old_user = insert(:user)
114 new_user = insert(:user, also_known_as: [old_user.ap_id])
115 follower = insert(:user)
117 old_user_url = old_user.ap_id
120 File.read!("test/fixtures/users_mock/localhost.json")
121 |> String.replace("{{nickname}}", old_user.nickname)
125 %{method: :get, url: ^old_user_url} ->
126 %Tesla.Env{status: 200, body: body}
129 User.follow(follower, old_user)
130 Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
131 Pleroma.Tests.ObanHelpers.perform_all()
133 old_user = refresh_record(old_user)
134 new_user = refresh_record(new_user)
136 [notification] = Notification.for_user(follower)
139 id: to_string(notification.id),
140 pleroma: %{is_seen: false},
142 account: AccountView.render("show.json", %{user: old_user, for: follower}),
143 target: AccountView.render("show.json", %{user: new_user, for: follower}),
144 created_at: Utils.to_masto_date(notification.inserted_at)
148 NotificationView.render("index.json", %{notifications: [notification], for: follower})
151 test "EmojiReact notification" do
153 other_user = insert(:user)
155 {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"})
156 {:ok, _activity, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")
158 activity = Repo.get(Activity, activity.id)
160 [notification] = Notification.for_user(user)
165 id: to_string(notification.id),
166 pleroma: %{is_seen: false},
167 type: "pleroma:emoji_reaction",
169 account: AccountView.render("show.json", %{user: other_user, for: user}),
170 status: StatusView.render("show.json", %{activity: activity, for: user}),
171 created_at: Utils.to_masto_date(notification.inserted_at)
175 NotificationView.render("show.json", %{notification: notification, for: user})