1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 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 test "Move notification" do
112 old_user = insert(:user)
113 new_user = insert(:user, also_known_as: [old_user.ap_id])
114 follower = insert(:user)
116 User.follow(follower, old_user)
117 Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
118 Pleroma.Tests.ObanHelpers.perform_all()
120 old_user = refresh_record(old_user)
121 new_user = refresh_record(new_user)
123 [notification] = Notification.for_user(follower, %{with_move: true})
126 id: to_string(notification.id),
127 pleroma: %{is_seen: false},
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)
135 NotificationView.render("index.json", %{notifications: [notification], for: follower})
138 test "EmojiReaction notification" do
140 other_user = insert(:user)
142 {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"})
143 {:ok, _activity, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")
145 activity = Repo.get(Activity, activity.id)
147 [notification] = Notification.for_user(user)
152 id: to_string(notification.id),
153 pleroma: %{is_seen: false},
154 type: "pleroma:emoji_reaction",
156 account: AccountView.render("show.json", %{user: other_user, for: user}),
157 status: StatusView.render("show.json", %{activity: activity, for: user}),
158 created_at: Utils.to_masto_date(notification.inserted_at)
162 NotificationView.render("show.json", %{notification: notification, for: user})