@impl true
def publish(%{data: %{"object" => object}} = activity) when is_binary(object) do
- PublisherWorker.enqueue("publish", %{"activity_id" => activity.id, "object_data" => nil})
+ PublisherWorker.enqueue("publish", %{"activity_id" => activity.id, "object_data" => nil},
+ priority: publish_priority(activity)
+ )
end
@impl true
)
end
- defp publish_priority(%{type: "Delete"}), do: 3
+ defp publish_priority(%{data: %{"type" => "Delete"}}), do: 3
defp publish_priority(_), do: 0
# Job Worker Callbacks
--- /dev/null
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Workers.PublisherWorkerTest do
+ use Pleroma.DataCase, async: true
+ use Oban.Testing, repo: Pleroma.Repo
+
+ import Pleroma.Factory
+
+ alias Pleroma.Object
+ alias Pleroma.Web.ActivityPub.ActivityPub
+ alias Pleroma.Web.ActivityPub.Builder
+ alias Pleroma.Web.CommonAPI
+ alias Pleroma.Web.Federator
+
+ describe "Oban job priority:" do
+ setup do
+ user = insert(:user)
+
+ {:ok, post} = CommonAPI.post(user, %{status: "Regrettable post"})
+ object = Object.normalize(post, fetch: false)
+ {:ok, delete_data, _meta} = Builder.delete(user, object.data["id"])
+ {:ok, delete, _meta} = ActivityPub.persist(delete_data, local: true)
+
+ %{
+ post: post,
+ delete: delete
+ }
+ end
+
+ test "Deletions are lower priority", %{delete: delete} do
+ assert {:ok, %Oban.Job{priority: 3}} = Federator.publish(delete)
+ end
+
+ test "Creates are normal priority", %{post: post} do
+ assert {:ok, %Oban.Job{priority: 0}} = Federator.publish(post)
+ end
+ end
+
+ describe "Oban job timeout" do
+ test "should have a timeout" do
+ clear_config([:workers, :timeout, :federator_outgoing], :timer.minutes(2))
+ assert Pleroma.Workers.PublisherWorker.timeout(nil) == :timer.minutes(2)
+ end
+
+ test "should use a default timeout if none specified" do
+ clear_config([:workers, :timeout, :federator_outgoing])
+ assert Pleroma.Workers.PublisherWorker.timeout(nil) == :timer.seconds(10)
+ end
+ end
+end