ash/test/actions/timeout_test.exs

67 lines
1.4 KiB
Elixir

defmodule Ash.Test.Actions.TimeoutTest do
@moduledoc false
use ExUnit.Case, async: false
defmodule Sleep do
@moduledoc false
use Ash.Resource.Change
def change(changeset, opts, _) do
changeset
|> Ash.Changeset.before_action(fn changeset ->
:timer.sleep(opts[:ms] || :timer.seconds(1))
changeset
end)
end
end
defmodule Author do
@moduledoc false
use Ash.Resource, data_layer: Ash.DataLayer.Ets
actions do
defaults [:read, :update, :destroy]
create :create do
primary? true
change {Sleep, ms: 1000}
end
end
attributes do
uuid_primary_key :id
attribute(:name, :string)
attribute(:bio, :string)
end
end
defmodule Registry do
@moduledoc false
use Ash.Registry
entries do
entry(Author)
end
end
defmodule Api do
@moduledoc false
use Ash.Api
resources do
registry Registry
end
end
describe "simple timeout" do
test "a timeout error is raised" do
assert_raise Ash.Error.Invalid,
~r/Ash.Test.Actions.TimeoutTest.Author.create timed out after 1ms/,
fn ->
Api.create!(Ash.Changeset.for_create(Author, :create, %{name: "Fred"}),
timeout: 1
)
end
end
end
end