summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMark Felder <feld@feld.me>2024-07-20 13:32:56 -0400
committerMark Felder <feld@feld.me>2024-07-20 14:54:04 -0400
commit62280a3b9f556f7eb5c2940b0ddc20c79fbcc758 (patch)
tree690a39e9bcb75d2de820dbfcae37c9bd16ab6453 /test
parentc45ee5fc820573f120d7790b342f64f6c77fdf35 (diff)
downloadpleroma-62280a3b9f556f7eb5c2940b0ddc20c79fbcc758.tar.gz
pleroma-62280a3b9f556f7eb5c2940b0ddc20c79fbcc758.zip
Cancel queued (undelivered) publishing jobs for an activity when deleting that activity.
Diffstat (limited to 'test')
-rw-r--r--test/pleroma/web/common_api_test.exs68
1 files changed, 67 insertions, 1 deletions
diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs
index 58cd1fd42..a2c0432b8 100644
--- a/test/pleroma/web/common_api_test.exs
+++ b/test/pleroma/web/common_api_test.exs
@@ -13,6 +13,7 @@ defmodule Pleroma.Web.CommonAPITest do
alias Pleroma.Object
alias Pleroma.Repo
alias Pleroma.Rule
+ alias Pleroma.Tests.ObanHelpers
alias Pleroma.UnstubbedConfigMock, as: ConfigMock
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ActivityPub
@@ -22,7 +23,7 @@ defmodule Pleroma.Web.CommonAPITest do
alias Pleroma.Web.CommonAPI
alias Pleroma.Workers.PollWorker
- import Ecto.Query, only: [from: 2]
+ import Ecto.Query, only: [from: 2, where: 3]
import Mock
import Mox
import Pleroma.Factory
@@ -1920,4 +1921,69 @@ defmodule Pleroma.Web.CommonAPITest do
assert [] = announces
end
end
+
+ describe "Oban jobs are cancelled" do
+ setup do: clear_config([:instance, :federating], true)
+
+ test "when deleting posts" do
+ user = insert(:user)
+
+ follower_one =
+ insert(:user, %{
+ local: false,
+ nickname: "nick1@domain.com",
+ ap_id: "https://domain.com/users/nick1",
+ inbox: "https://domain.com/users/nick1/inbox",
+ shared_inbox: "https://domain.com/inbox"
+ })
+
+ follower_two =
+ insert(:user, %{
+ local: false,
+ nickname: "nick2@example.com",
+ ap_id: "https://example.com/users/nick2",
+ inbox: "https://example.com/users/nick2/inbox",
+ shared_inbox: "https://example.com/inbox"
+ })
+
+ {:ok, _, _} = Pleroma.User.follow(follower_one, user)
+ {:ok, _, _} = Pleroma.User.follow(follower_two, user)
+
+ {:ok, %{data: %{"id" => ap_id}} = activity} =
+ CommonAPI.post(user, %{status: "Happy Friday everyone!"})
+
+ # Generate the publish_one jobs
+ ObanHelpers.perform_all()
+
+ publish_one_jobs =
+ all_enqueued()
+ |> Enum.filter(fn job ->
+ match?(
+ %{
+ state: "available",
+ queue: "federator_outgoing",
+ worker: "Pleroma.Workers.PublisherWorker",
+ args: %{"op" => "publish_one", "params" => %{"id" => ^ap_id}}
+ },
+ job
+ )
+ end)
+
+ assert length(publish_one_jobs) == 2
+
+ # The delete should have triggered cancelling the publish_one jobs
+ assert {:ok, _delete} = CommonAPI.delete(activity.id, user)
+
+ # all_enqueued/1 will not return cancelled jobs
+ cancelled_jobs =
+ Oban.Job
+ |> where([j], j.worker == "Pleroma.Workers.PublisherWorker")
+ |> where([j], j.state == "cancelled")
+ |> where([j], j.args["op"] == "publish_one")
+ |> where([j], j.args["params"]["id"] == ^ap_id)
+ |> Pleroma.Repo.all()
+
+ assert length(cancelled_jobs) == 2
+ end
+ end
end