Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.3KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.MastodonAPI.MastodonAPITest do
  5. use Pleroma.Web.ConnCase
  6. alias Pleroma.Notification
  7. alias Pleroma.ScheduledActivity
  8. alias Pleroma.User
  9. alias Pleroma.Web.CommonAPI
  10. alias Pleroma.Web.MastodonAPI.MastodonAPI
  11. import Pleroma.Factory
  12. describe "follow/3" do
  13. test "returns error when followed user is deactivated" do
  14. follower = insert(:user)
  15. user = insert(:user, local: true, deactivated: true)
  16. {:error, error} = MastodonAPI.follow(follower, user)
  17. assert error == "Could not follow user: #{user.nickname} is deactivated."
  18. end
  19. test "following for user" do
  20. follower = insert(:user)
  21. user = insert(:user)
  22. {:ok, follower} = MastodonAPI.follow(follower, user)
  23. assert User.following?(follower, user)
  24. end
  25. test "returns ok if user already followed" do
  26. follower = insert(:user)
  27. user = insert(:user)
  28. {:ok, follower} = User.follow(follower, user)
  29. {:ok, follower} = MastodonAPI.follow(follower, refresh_record(user))
  30. assert User.following?(follower, user)
  31. end
  32. end
  33. describe "get_followers/2" do
  34. test "returns user followers" do
  35. follower1_user = insert(:user)
  36. follower2_user = insert(:user)
  37. user = insert(:user)
  38. {:ok, _follower1_user} = User.follow(follower1_user, user)
  39. {:ok, follower2_user} = User.follow(follower2_user, user)
  40. assert MastodonAPI.get_followers(user, %{"limit" => 1}) == [follower2_user]
  41. end
  42. end
  43. describe "get_friends/2" do
  44. test "returns user friends" do
  45. user = insert(:user)
  46. followed_one = insert(:user)
  47. followed_two = insert(:user)
  48. followed_three = insert(:user)
  49. {:ok, user} = User.follow(user, followed_one)
  50. {:ok, user} = User.follow(user, followed_two)
  51. {:ok, user} = User.follow(user, followed_three)
  52. res = MastodonAPI.get_friends(user)
  53. assert length(res) == 3
  54. assert Enum.member?(res, refresh_record(followed_three))
  55. assert Enum.member?(res, refresh_record(followed_two))
  56. assert Enum.member?(res, refresh_record(followed_one))
  57. end
  58. end
  59. describe "get_notifications/2" do
  60. test "returns notifications for user" do
  61. user = insert(:user)
  62. subscriber = insert(:user)
  63. User.subscribe(subscriber, user)
  64. {:ok, status} = CommonAPI.post(user, %{status: "Akariiiin"})
  65. {:ok, status1} = CommonAPI.post(user, %{status: "Magi"})
  66. {:ok, [notification]} = Notification.create_notifications(status)
  67. {:ok, [notification1]} = Notification.create_notifications(status1)
  68. res = MastodonAPI.get_notifications(subscriber)
  69. assert Enum.member?(Enum.map(res, & &1.id), notification.id)
  70. assert Enum.member?(Enum.map(res, & &1.id), notification1.id)
  71. end
  72. end
  73. describe "get_scheduled_activities/2" do
  74. test "returns user scheduled activities" do
  75. user = insert(:user)
  76. today =
  77. NaiveDateTime.utc_now()
  78. |> NaiveDateTime.add(:timer.minutes(6), :millisecond)
  79. |> NaiveDateTime.to_iso8601()
  80. attrs = %{params: %{}, scheduled_at: today}
  81. {:ok, schedule} = ScheduledActivity.create(user, attrs)
  82. assert MastodonAPI.get_scheduled_activities(user) == [schedule]
  83. end
  84. end
  85. end