ash/test/resource/changes/lifecycle_hooks_test.exs
Zach Daniel fa5d4a1a96 fix: don't start async limiter tasks if async is disabled
fix: properly set default timeout to `:infinity`

this avoids unnecessary processes starting when in the vast majority of cases some external thing is imposing a timeout.

fix: pass down `identity` when doing upserts, for new feature support
2024-06-17 10:56:48 -04:00

115 lines
2.7 KiB
Elixir

defmodule Ash.Test.Resource.Changes.LifecycleHooksTest do
@moduledoc false
use ExUnit.Case, async: true
alias Ash.Test.Domain, as: Domain
defmodule TimeMachine do
@moduledoc false
use Ash.Resource, domain: Domain, data_layer: Ash.DataLayer.Ets
attributes do
uuid_primary_key :id
attribute :name, :string do
public?(true)
end
end
actions do
default_accept :*
defaults [:read, :destroy, update: :*]
create :create_with_before_action do
argument :caller, :term
change before_action(fn changeset, _context ->
send(changeset.arguments.caller, changeset.phase)
changeset
end)
end
create :create_with_before_transaction do
argument :caller, :term
change before_transaction(fn changeset, _context ->
send(changeset.arguments.caller, changeset.phase)
changeset
end)
end
create :create_with_after_action do
argument :caller, :term
change after_action(fn changeset, record, _context ->
send(changeset.arguments.caller, changeset.phase)
{:ok, record}
end)
end
create :create_with_after_transaction do
argument :caller, :term
change after_transaction(fn changeset, {:ok, record}, _context ->
send(changeset.arguments.caller, changeset.phase)
{:ok, record}
end)
end
end
end
describe "before_action/2" do
test "it is called before the action is run" do
TimeMachine
|> Ash.Changeset.for_create(:create_with_before_action,
name: "Delorean DMC-12",
caller: self()
)
|> Ash.create!()
assert_received :before_action
end
end
describe "before_transaction/2" do
test "it is called before the transaction is run" do
TimeMachine
|> Ash.Changeset.for_create(:create_with_before_transaction,
name: "Delorean DMC-12",
caller: self()
)
|> Ash.create!()
assert_received :before_transaction
end
end
describe "after_action/2" do
test "it is called after the action is run" do
TimeMachine
|> Ash.Changeset.for_create(:create_with_after_action,
name: "Delorean DMC-12",
caller: self()
)
|> Ash.create!()
assert_received :after_action
end
end
describe "after_transaction/2" do
test "it is called after the transaction is run" do
TimeMachine
|> Ash.Changeset.for_create(:create_with_after_transaction,
name: "Delorean DMC-12",
caller: self()
)
|> Ash.create!()
assert_received :after_transaction
end
end
end