logo

pleroma

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

scheduled_activity_controller_test.exs (5031B)


  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.MastodonAPI.ScheduledActivityControllerTest do
  5. use Pleroma.Web.ConnCase, async: true
  6. alias Pleroma.Repo
  7. alias Pleroma.ScheduledActivity
  8. alias Pleroma.UnstubbedConfigMock, as: ConfigMock
  9. import Ecto.Query
  10. import Mox
  11. import Pleroma.Factory
  12. setup do
  13. ConfigMock
  14. |> stub(:get, fn
  15. [ScheduledActivity, :enabled] -> true
  16. path -> Pleroma.Test.StaticConfig.get(path)
  17. end)
  18. :ok
  19. end
  20. test "shows scheduled activities" do
  21. %{user: user, conn: conn} = oauth_access(["read:statuses"])
  22. scheduled_activity_id1 = insert(:scheduled_activity, user: user).id |> to_string()
  23. scheduled_activity_id2 = insert(:scheduled_activity, user: user).id |> to_string()
  24. scheduled_activity_id3 = insert(:scheduled_activity, user: user).id |> to_string()
  25. scheduled_activity_id4 = insert(:scheduled_activity, user: user).id |> to_string()
  26. # min_id
  27. conn_res = get(conn, "/api/v1/scheduled_statuses?limit=2&min_id=#{scheduled_activity_id1}")
  28. result = json_response_and_validate_schema(conn_res, 200)
  29. assert [%{"id" => ^scheduled_activity_id3}, %{"id" => ^scheduled_activity_id2}] = result
  30. # since_id
  31. conn_res = get(conn, "/api/v1/scheduled_statuses?limit=2&since_id=#{scheduled_activity_id1}")
  32. result = json_response_and_validate_schema(conn_res, 200)
  33. assert [%{"id" => ^scheduled_activity_id4}, %{"id" => ^scheduled_activity_id3}] = result
  34. # max_id
  35. conn_res = get(conn, "/api/v1/scheduled_statuses?limit=2&max_id=#{scheduled_activity_id4}")
  36. result = json_response_and_validate_schema(conn_res, 200)
  37. assert [%{"id" => ^scheduled_activity_id3}, %{"id" => ^scheduled_activity_id2}] = result
  38. end
  39. test "shows a scheduled activity" do
  40. %{user: user, conn: conn} = oauth_access(["read:statuses"])
  41. scheduled_activity = insert(:scheduled_activity, user: user)
  42. res_conn = get(conn, "/api/v1/scheduled_statuses/#{scheduled_activity.id}")
  43. assert %{"id" => scheduled_activity_id} = json_response_and_validate_schema(res_conn, 200)
  44. assert scheduled_activity_id == scheduled_activity.id |> to_string()
  45. res_conn = get(conn, "/api/v1/scheduled_statuses/404")
  46. assert %{"error" => "Record not found"} = json_response_and_validate_schema(res_conn, 404)
  47. end
  48. test "updates a scheduled activity" do
  49. %{user: user, conn: conn} = oauth_access(["write:statuses"])
  50. scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 60)
  51. {:ok, scheduled_activity} =
  52. ScheduledActivity.create(
  53. user,
  54. %{
  55. scheduled_at: scheduled_at,
  56. params: build(:note).data
  57. }
  58. )
  59. job = Repo.one(from(j in Oban.Job, where: j.queue == "scheduled_activities"))
  60. assert job.args == %{"activity_id" => scheduled_activity.id}
  61. assert DateTime.truncate(job.scheduled_at, :second) == to_datetime(scheduled_at)
  62. new_scheduled_at =
  63. NaiveDateTime.utc_now()
  64. |> Timex.shift(minutes: 120)
  65. |> Timex.format!("%Y-%m-%dT%H:%M:%S.%fZ", :strftime)
  66. res_conn =
  67. conn
  68. |> put_req_header("content-type", "application/json")
  69. |> put("/api/v1/scheduled_statuses/#{scheduled_activity.id}", %{
  70. scheduled_at: new_scheduled_at
  71. })
  72. assert %{"scheduled_at" => expected_scheduled_at} =
  73. json_response_and_validate_schema(res_conn, 200)
  74. assert expected_scheduled_at == Pleroma.Web.CommonAPI.Utils.to_masto_date(new_scheduled_at)
  75. job = refresh_record(job)
  76. assert DateTime.truncate(job.scheduled_at, :second) == to_datetime(new_scheduled_at)
  77. res_conn =
  78. conn
  79. |> put_req_header("content-type", "application/json")
  80. |> put("/api/v1/scheduled_statuses/404", %{scheduled_at: new_scheduled_at})
  81. assert %{"error" => "Record not found"} = json_response_and_validate_schema(res_conn, 404)
  82. end
  83. test "deletes a scheduled activity" do
  84. %{user: user, conn: conn} = oauth_access(["write:statuses"])
  85. scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 60)
  86. {:ok, scheduled_activity} =
  87. ScheduledActivity.create(
  88. user,
  89. %{
  90. scheduled_at: scheduled_at,
  91. params: build(:note).data
  92. }
  93. )
  94. job = Repo.one(from(j in Oban.Job, where: j.queue == "scheduled_activities"))
  95. assert job.args == %{"activity_id" => scheduled_activity.id}
  96. res_conn =
  97. conn
  98. |> assign(:user, user)
  99. |> delete("/api/v1/scheduled_statuses/#{scheduled_activity.id}")
  100. assert %{} = json_response_and_validate_schema(res_conn, 200)
  101. refute Repo.get(ScheduledActivity, scheduled_activity.id)
  102. refute Repo.get(Oban.Job, job.id)
  103. res_conn =
  104. conn
  105. |> assign(:user, user)
  106. |> delete("/api/v1/scheduled_statuses/#{scheduled_activity.id}")
  107. assert %{"error" => "Record not found"} = json_response_and_validate_schema(res_conn, 404)
  108. end
  109. end