ash_oban/test/ash_oban_test.exs
2024-03-29 19:52:22 -04:00

83 lines
2.1 KiB
Elixir

defmodule AshObanTest do
use ExUnit.Case, async: false
doctest AshOban
alias AshOban.Test.Domain
alias AshOban.Test.Triggered
setup_all do
AshOban.Test.Repo.start_link()
Oban.start_link(AshOban.config([Domain], Application.get_env(:ash_oban, :oban)))
:ok
end
setup do
Enum.each(
[:triggered_process, :triggered_process_2, :triggered_say_hello],
&Oban.drain_queue(queue: &1)
)
end
test "nothing happens if no records exist" do
assert %{success: 1} = AshOban.Test.schedule_and_run_triggers(Triggered)
end
test "if a record exists, it is processed" do
Triggered
|> Ash.Changeset.for_create(:create, %{})
|> Ash.create!()
assert %{success: 2} =
AshOban.Test.schedule_and_run_triggers(Triggered,
actor: %AshOban.Test.ActorPersister.FakeActor{id: 1}
)
end
test "if an actor is not set, it is nil when executing the job" do
Triggered
|> Ash.Changeset.for_create(:create)
|> Ash.create!()
assert %{success: 1, failure: 1} =
AshOban.Test.schedule_and_run_triggers(Triggered)
end
test "dsl introspection" do
assert [
%AshOban.Trigger{action: :process},
%AshOban.Trigger{action: :process, scheduler: nil}
] = AshOban.Info.oban_triggers(Triggered)
end
test "cron configuration" do
config =
AshOban.config([Domain],
plugins: [
{Oban.Plugins.Cron, []}
],
queues: [
triggered_process: 10,
triggered_process_2: 10,
triggered_say_hello: 10
]
)
assert [
plugins: [
{Oban.Plugins.Cron,
[
crontab: [
{"0 0 1 1 *", AshOban.Test.Triggered.AshOban.ActionWorker.SayHello, []},
{"* * * * *", AshOban.Test.Triggered.AshOban.Scheduler.Process, []}
]
]}
],
queues: [
triggered_process: 10,
triggered_process_2: 10,
triggered_say_hello: 10
]
] = config
end
end