Merge remote-tracking branch 'remotes/upstream/develop' into twitter_oauth
[akkoma] / test / web / mastodon_api / notification_view_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2018 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 = Repo.get(User, user.id)
25
26 expected = %{
27 id: to_string(notification.id),
28 pleroma: %{is_seen: false},
29 type: "mention",
30 account: AccountView.render("account.json", %{user: user, for: mentioned_user}),
31 status: StatusView.render("status.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, _object} = CommonAPI.favorite(create_activity.id, another_user)
46 {:ok, [notification]} = Notification.create_notifications(favorite_activity)
47 create_activity = Repo.get(Activity, create_activity.id)
48
49 expected = %{
50 id: to_string(notification.id),
51 pleroma: %{is_seen: false},
52 type: "favourite",
53 account: AccountView.render("account.json", %{user: another_user, for: user}),
54 status: StatusView.render("status.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 = Repo.get(Activity, create_activity.id)
70
71 expected = %{
72 id: to_string(notification.id),
73 pleroma: %{is_seen: false},
74 type: "reblog",
75 account: AccountView.render("account.json", %{user: another_user, for: user}),
76 status: StatusView.render("status.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("account.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 end
104 end