logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

announce_validation_test.exs (3613B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidationTest do
  5. use Pleroma.DataCase, async: true
  6. alias Pleroma.Object
  7. alias Pleroma.Web.ActivityPub.Builder
  8. alias Pleroma.Web.ActivityPub.ObjectValidator
  9. alias Pleroma.Web.CommonAPI
  10. import Pleroma.Factory
  11. describe "announces" do
  12. setup do
  13. user = insert(:user)
  14. announcer = insert(:user)
  15. {:ok, post_activity} = CommonAPI.post(user, %{status: "uguu"})
  16. object = Object.normalize(post_activity, fetch: false)
  17. {:ok, valid_announce, []} = Builder.announce(announcer, object)
  18. %{
  19. valid_announce: valid_announce,
  20. user: user,
  21. post_activity: post_activity,
  22. announcer: announcer
  23. }
  24. end
  25. test "returns ok for a valid announce", %{valid_announce: valid_announce} do
  26. assert {:ok, _object, _meta} = ObjectValidator.validate(valid_announce, [])
  27. end
  28. test "keeps announced object context", %{valid_announce: valid_announce} do
  29. assert %Object{data: %{"context" => object_context}} =
  30. Object.get_cached_by_ap_id(valid_announce["object"])
  31. {:ok, %{"context" => context}, _} =
  32. valid_announce
  33. |> Map.put("context", "https://example.org/invalid_context_id")
  34. |> ObjectValidator.validate([])
  35. assert context == object_context
  36. end
  37. test "returns an error if the object can't be found", %{valid_announce: valid_announce} do
  38. without_object =
  39. valid_announce
  40. |> Map.delete("object")
  41. {:error, cng} = ObjectValidator.validate(without_object, [])
  42. assert {:object, {"can't be blank", [validation: :required]}} in cng.errors
  43. nonexisting_object =
  44. valid_announce
  45. |> Map.put("object", "https://gensokyo.2hu/objects/99999999")
  46. {:error, cng} = ObjectValidator.validate(nonexisting_object, [])
  47. assert {:object, {"can't find object", []}} in cng.errors
  48. end
  49. test "returns an error if the actor already announced the object", %{
  50. valid_announce: valid_announce,
  51. announcer: announcer,
  52. post_activity: post_activity
  53. } do
  54. _announce = CommonAPI.repeat(post_activity.id, announcer)
  55. {:error, cng} = ObjectValidator.validate(valid_announce, [])
  56. assert {:actor, {"already announced this object", []}} in cng.errors
  57. assert {:object, {"already announced by this actor", []}} in cng.errors
  58. end
  59. test "returns an error if the actor can't announce the object", %{
  60. announcer: announcer,
  61. user: user
  62. } do
  63. {:ok, post_activity} =
  64. CommonAPI.post(user, %{status: "a secret post", visibility: "private"})
  65. object = Object.normalize(post_activity, fetch: false)
  66. # Another user can't announce it
  67. {:ok, announce, []} = Builder.announce(announcer, object, public: false)
  68. {:error, cng} = ObjectValidator.validate(announce, [])
  69. assert {:actor, {"can not announce this object", []}} in cng.errors
  70. # The actor of the object can announce it
  71. {:ok, announce, []} = Builder.announce(user, object, public: false)
  72. assert {:ok, _, _} = ObjectValidator.validate(announce, [])
  73. # The actor of the object can not announce it publicly
  74. {:ok, announce, []} = Builder.announce(user, object, public: true)
  75. {:error, cng} = ObjectValidator.validate(announce, [])
  76. assert {:actor, {"can not announce this object publicly", []}} in cng.errors
  77. end
  78. end
  79. end