logo

pleroma

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

answer_handling_test.exs (2549B)


  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.Transmogrifier.AnswerHandlingTest do
  5. use Pleroma.DataCase
  6. alias Pleroma.Activity
  7. alias Pleroma.Object
  8. alias Pleroma.Web.ActivityPub.Transmogrifier
  9. alias Pleroma.Web.CommonAPI
  10. import Pleroma.Factory
  11. setup_all do
  12. Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
  13. :ok
  14. end
  15. test "incoming, rewrites Note to Answer and increments vote counters" do
  16. user = insert(:user)
  17. {:ok, activity} =
  18. CommonAPI.post(user, %{
  19. status: "suya...",
  20. poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10}
  21. })
  22. object = Object.normalize(activity, fetch: false)
  23. assert object.data["repliesCount"] == nil
  24. data =
  25. File.read!("test/fixtures/mastodon-vote.json")
  26. |> Jason.decode!()
  27. |> Kernel.put_in(["to"], user.ap_id)
  28. |> Kernel.put_in(["object", "inReplyTo"], object.data["id"])
  29. |> Kernel.put_in(["object", "to"], user.ap_id)
  30. {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
  31. answer_object = Object.normalize(activity, fetch: false)
  32. assert answer_object.data["type"] == "Answer"
  33. assert answer_object.data["inReplyTo"] == object.data["id"]
  34. new_object = Object.get_by_ap_id(object.data["id"])
  35. assert new_object.data["repliesCount"] == nil
  36. assert Enum.any?(
  37. new_object.data["oneOf"],
  38. fn
  39. %{"name" => "suya..", "replies" => %{"totalItems" => 1}} -> true
  40. _ -> false
  41. end
  42. )
  43. end
  44. test "outgoing, rewrites Answer to Note" do
  45. user = insert(:user)
  46. {:ok, poll_activity} =
  47. CommonAPI.post(user, %{
  48. status: "suya...",
  49. poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10}
  50. })
  51. poll_object = Object.normalize(poll_activity, fetch: false)
  52. # TODO: Replace with CommonAPI vote creation when implemented
  53. data =
  54. File.read!("test/fixtures/mastodon-vote.json")
  55. |> Jason.decode!()
  56. |> Kernel.put_in(["to"], user.ap_id)
  57. |> Kernel.put_in(["object", "inReplyTo"], poll_object.data["id"])
  58. |> Kernel.put_in(["object", "to"], user.ap_id)
  59. {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
  60. {:ok, data} = Transmogrifier.prepare_outgoing(activity.data)
  61. assert data["object"]["type"] == "Note"
  62. end
  63. end