summaryrefslogtreecommitdiff
path: root/test/support/oban_helpers.ex
blob: 94170a0f8d7a166c9074a9c68ff300cf275b4fc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Tests.ObanHelpers do
  @moduledoc """
  Oban test helpers.
  """

  require Ecto.Query

  alias Pleroma.Repo

  def wipe_all do
    Repo.delete_all(Oban.Job)
  end

  def perform_all do
    Oban.Job
    |> Ecto.Query.where(state: "available")
    |> Repo.all()
    |> perform()
  end

  def perform(%Oban.Job{} = job) do
    res = apply(String.to_existing_atom("Elixir." <> job.worker), :perform, [job])
    Repo.delete(job)
    res
  end

  def perform(jobs) when is_list(jobs) do
    for job <- jobs, do: perform(job)
  end

  def member?(%{} = job_args, jobs) when is_list(jobs) do
    Enum.any?(jobs, fn job ->
      member?(job_args, job.args)
    end)
  end

  def member?(%{} = test_attrs, %{} = attrs) do
    Enum.all?(
      test_attrs,
      fn {k, _v} -> member?(test_attrs[k], attrs[k]) end
    )
  end

  def member?(x, y), do: x == y
end