notification_view_test.exs (3824B)
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 = 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("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 = 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("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 = 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("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