notification_view_test.exs 4.79 KB
Newer Older
1
# Pleroma: A lightweight social networking server
2
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do
  use Pleroma.DataCase

  alias Pleroma.Activity
  alias Pleroma.Notification
  alias Pleroma.Repo
  alias Pleroma.User
  alias Pleroma.Web.CommonAPI
  alias Pleroma.Web.CommonAPI.Utils
  alias Pleroma.Web.MastodonAPI.AccountView
  alias Pleroma.Web.MastodonAPI.NotificationView
  alias Pleroma.Web.MastodonAPI.StatusView
  import Pleroma.Factory

  test "Mention notification" do
    user = insert(:user)
    mentioned_user = insert(:user)
    {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{mentioned_user.nickname}"})
    {:ok, [notification]} = Notification.create_notifications(activity)
minibikini's avatar
minibikini committed
24
    user = User.get_cached_by_id(user.id)
25 26 27 28 29

    expected = %{
      id: to_string(notification.id),
      pleroma: %{is_seen: false},
      type: "mention",
minibikini's avatar
minibikini committed
30
      account: AccountView.render("show.json", %{user: user, for: mentioned_user}),
31
      status: StatusView.render("show.json", %{activity: activity, for: mentioned_user}),
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
      created_at: Utils.to_masto_date(notification.inserted_at)
    }

    result =
      NotificationView.render("index.json", %{notifications: [notification], for: mentioned_user})

    assert [expected] == result
  end

  test "Favourite notification" do
    user = insert(:user)
    another_user = insert(:user)
    {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"})
    {:ok, favorite_activity, _object} = CommonAPI.favorite(create_activity.id, another_user)
    {:ok, [notification]} = Notification.create_notifications(favorite_activity)
47
    create_activity = Activity.get_by_id(create_activity.id)
48 49 50 51 52

    expected = %{
      id: to_string(notification.id),
      pleroma: %{is_seen: false},
      type: "favourite",
minibikini's avatar
minibikini committed
53
      account: AccountView.render("show.json", %{user: another_user, for: user}),
54
      status: StatusView.render("show.json", %{activity: create_activity, for: user}),
55 56 57 58 59 60 61 62 63 64 65 66 67 68
      created_at: Utils.to_masto_date(notification.inserted_at)
    }

    result = NotificationView.render("index.json", %{notifications: [notification], for: user})

    assert [expected] == result
  end

  test "Reblog notification" do
    user = insert(:user)
    another_user = insert(:user)
    {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"})
    {:ok, reblog_activity, _object} = CommonAPI.repeat(create_activity.id, another_user)
    {:ok, [notification]} = Notification.create_notifications(reblog_activity)
69
    reblog_activity = Activity.get_by_id(create_activity.id)
70 71 72 73 74

    expected = %{
      id: to_string(notification.id),
      pleroma: %{is_seen: false},
      type: "reblog",
minibikini's avatar
minibikini committed
75
      account: AccountView.render("show.json", %{user: another_user, for: user}),
76
      status: StatusView.render("show.json", %{activity: reblog_activity, for: user}),
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
      created_at: Utils.to_masto_date(notification.inserted_at)
    }

    result = NotificationView.render("index.json", %{notifications: [notification], for: user})

    assert [expected] == result
  end

  test "Follow notification" do
    follower = insert(:user)
    followed = insert(:user)
    {:ok, follower, followed, _activity} = CommonAPI.follow(follower, followed)
    notification = Notification |> Repo.one() |> Repo.preload(:activity)

    expected = %{
      id: to_string(notification.id),
      pleroma: %{is_seen: false},
      type: "follow",
minibikini's avatar
minibikini committed
95
      account: AccountView.render("show.json", %{user: follower, for: followed}),
96 97 98 99 100 101 102
      created_at: Utils.to_masto_date(notification.inserted_at)
    }

    result =
      NotificationView.render("index.json", %{notifications: [notification], for: followed})

    assert [expected] == result
103 104 105 106 107 108

    User.perform(:delete, follower)
    notification = Notification |> Repo.one() |> Repo.preload(:activity)

    assert [] ==
             NotificationView.render("index.json", %{notifications: [notification], for: followed})
109
  end
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

  test "Move notification" do
    %{ap_id: old_ap_id} = old_user = insert(:user)
    %{ap_id: _new_ap_id} = new_user = insert(:user, also_known_as: [old_ap_id])
    follower = insert(:user)

    User.follow(follower, old_user)
    Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
    Pleroma.Tests.ObanHelpers.perform_all()

    [notification] = Notification.for_user(follower)

    expected = %{
      id: to_string(notification.id),
      pleroma: %{is_seen: false},
      type: "move",
      account: AccountView.render("show.json", %{user: old_user, for: follower}),
      target: AccountView.render("show.json", %{user: new_user, for: follower}),
      created_at: Utils.to_masto_date(notification.inserted_at)
    }

    assert [expected] ==
             NotificationView.render("index.json", %{notifications: [notification], for: follower})
  end
134
end