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.

168 lines
5.4KB

  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. defmodule Pleroma.ActivityTest do
  5. use Pleroma.DataCase
  6. alias Pleroma.Activity
  7. alias Pleroma.Bookmark
  8. alias Pleroma.Object
  9. alias Pleroma.ThreadMute
  10. import Pleroma.Factory
  11. test "returns an activity by it's AP id" do
  12. activity = insert(:note_activity)
  13. found_activity = Activity.get_by_ap_id(activity.data["id"])
  14. assert activity == found_activity
  15. end
  16. test "returns activities by it's objects AP ids" do
  17. activity = insert(:note_activity)
  18. object_data = Object.normalize(activity).data
  19. [found_activity] = Activity.get_all_create_by_object_ap_id(object_data["id"])
  20. assert activity == found_activity
  21. end
  22. test "returns the activity that created an object" do
  23. activity = insert(:note_activity)
  24. object_data = Object.normalize(activity).data
  25. found_activity = Activity.get_create_by_object_ap_id(object_data["id"])
  26. assert activity == found_activity
  27. end
  28. test "preloading a bookmark" do
  29. user = insert(:user)
  30. user2 = insert(:user)
  31. user3 = insert(:user)
  32. activity = insert(:note_activity)
  33. {:ok, _bookmark} = Bookmark.create(user.id, activity.id)
  34. {:ok, _bookmark2} = Bookmark.create(user2.id, activity.id)
  35. {:ok, bookmark3} = Bookmark.create(user3.id, activity.id)
  36. queried_activity =
  37. Ecto.Query.from(Pleroma.Activity)
  38. |> Activity.with_preloaded_bookmark(user3)
  39. |> Repo.one()
  40. assert queried_activity.bookmark == bookmark3
  41. end
  42. test "setting thread_muted?" do
  43. activity = insert(:note_activity)
  44. user = insert(:user)
  45. annoyed_user = insert(:user)
  46. {:ok, _} = ThreadMute.add_mute(annoyed_user.id, activity.data["context"])
  47. activity_with_unset_thread_muted_field =
  48. Ecto.Query.from(Activity)
  49. |> Repo.one()
  50. activity_for_user =
  51. Ecto.Query.from(Activity)
  52. |> Activity.with_set_thread_muted_field(user)
  53. |> Repo.one()
  54. activity_for_annoyed_user =
  55. Ecto.Query.from(Activity)
  56. |> Activity.with_set_thread_muted_field(annoyed_user)
  57. |> Repo.one()
  58. assert activity_with_unset_thread_muted_field.thread_muted? == nil
  59. assert activity_for_user.thread_muted? == false
  60. assert activity_for_annoyed_user.thread_muted? == true
  61. end
  62. describe "getting a bookmark" do
  63. test "when association is loaded" do
  64. user = insert(:user)
  65. activity = insert(:note_activity)
  66. {:ok, bookmark} = Bookmark.create(user.id, activity.id)
  67. queried_activity =
  68. Ecto.Query.from(Pleroma.Activity)
  69. |> Activity.with_preloaded_bookmark(user)
  70. |> Repo.one()
  71. assert Activity.get_bookmark(queried_activity, user) == bookmark
  72. end
  73. test "when association is not loaded" do
  74. user = insert(:user)
  75. activity = insert(:note_activity)
  76. {:ok, bookmark} = Bookmark.create(user.id, activity.id)
  77. queried_activity =
  78. Ecto.Query.from(Pleroma.Activity)
  79. |> Repo.one()
  80. assert Activity.get_bookmark(queried_activity, user) == bookmark
  81. end
  82. end
  83. describe "search" do
  84. setup do
  85. Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
  86. user = insert(:user)
  87. params = %{
  88. "@context" => "https://www.w3.org/ns/activitystreams",
  89. "actor" => "http://mastodon.example.org/users/admin",
  90. "type" => "Create",
  91. "id" => "http://mastodon.example.org/users/admin/activities/1",
  92. "object" => %{
  93. "type" => "Note",
  94. "content" => "find me!",
  95. "id" => "http://mastodon.example.org/users/admin/objects/1",
  96. "attributedTo" => "http://mastodon.example.org/users/admin"
  97. },
  98. "to" => ["https://www.w3.org/ns/activitystreams#Public"]
  99. }
  100. {:ok, local_activity} = Pleroma.Web.CommonAPI.post(user, %{"status" => "find me!"})
  101. {:ok, remote_activity} = Pleroma.Web.Federator.incoming_ap_doc(params)
  102. %{local_activity: local_activity, remote_activity: remote_activity, user: user}
  103. end
  104. test "find local and remote statuses for authenticated users", %{
  105. local_activity: local_activity,
  106. remote_activity: remote_activity,
  107. user: user
  108. } do
  109. activities = Enum.sort_by(Activity.search(user, "find me"), & &1.id)
  110. assert [^local_activity, ^remote_activity] = activities
  111. end
  112. test "find only local statuses for unauthenticated users", %{local_activity: local_activity} do
  113. assert [^local_activity] = Activity.search(nil, "find me")
  114. end
  115. test "find only local statuses for unauthenticated users when `limit_to_local_content` is `:all`",
  116. %{local_activity: local_activity} do
  117. Pleroma.Config.put([:instance, :limit_to_local_content], :all)
  118. assert [^local_activity] = Activity.search(nil, "find me")
  119. Pleroma.Config.put([:instance, :limit_to_local_content], :unauthenticated)
  120. end
  121. test "find all statuses for unauthenticated users when `limit_to_local_content` is `false`",
  122. %{
  123. local_activity: local_activity,
  124. remote_activity: remote_activity
  125. } do
  126. Pleroma.Config.put([:instance, :limit_to_local_content], false)
  127. activities = Enum.sort_by(Activity.search(nil, "find me"), & &1.id)
  128. assert [^local_activity, ^remote_activity] = activities
  129. Pleroma.Config.put([:instance, :limit_to_local_content], :unauthenticated)
  130. end
  131. end
  132. end