mirror of
https://github.com/ash-project/ash.git
synced 2024-09-21 05:53:06 +12:00
b20c4afd9b
fix: fix chart links rendering
67 lines
1.7 KiB
Elixir
67 lines
1.7 KiB
Elixir
defmodule Ash.FlowTest.TransactionTest do
|
|
@moduledoc false
|
|
use ExUnit.Case, async: false
|
|
|
|
alias Ash.Test.Flow.{Api, Org, User}
|
|
|
|
alias Ash.Test.Flow.Flows.UnapproveAllUsers
|
|
|
|
setup do
|
|
ExUnit.CaptureLog.capture_log(fn ->
|
|
Ash.DataLayer.Mnesia.start(Api)
|
|
end)
|
|
|
|
on_exit(fn ->
|
|
ExUnit.CaptureLog.capture_log(fn ->
|
|
:mnesia.stop()
|
|
:mnesia.delete_schema([node()])
|
|
end)
|
|
end)
|
|
end
|
|
|
|
test "a flow in a transaction can be run" do
|
|
org =
|
|
Org
|
|
|> Ash.Changeset.for_create(:create, %{name: "Org 1"})
|
|
|> Api.create!()
|
|
|
|
User
|
|
|> Ash.Changeset.for_create(:create, %{first_name: "abc", org: org.id})
|
|
|> Api.create!()
|
|
|> Ash.Changeset.for_update(:approve, %{})
|
|
|> Api.update!()
|
|
|
|
User
|
|
|> Ash.Changeset.for_create(:create, %{first_name: "def", org: org.id})
|
|
|> Api.create!()
|
|
|> Ash.Changeset.for_update(:approve, %{})
|
|
|> Api.update!()
|
|
|
|
UnapproveAllUsers.run!("Org 1")
|
|
end
|
|
|
|
test "a flow in a transaction will be rolled back if an error is raised" do
|
|
org =
|
|
Org
|
|
|> Ash.Changeset.for_create(:create, %{name: "Org 1"})
|
|
|> Api.create!()
|
|
|
|
User
|
|
|> Ash.Changeset.for_create(:create, %{first_name: "abc", org: org.id})
|
|
|> Api.create!()
|
|
|> Ash.Changeset.for_update(:approve, %{})
|
|
|> Api.update!()
|
|
|
|
User
|
|
|> Ash.Changeset.for_create(:create, %{first_name: "def", org: org.id})
|
|
|> Api.create!()
|
|
|> Ash.Changeset.for_update(:approve, %{})
|
|
|> Api.update!()
|
|
|
|
assert_raise(Ash.Error.Unknown, ~r/uh oh!/, fn ->
|
|
UnapproveAllUsers.run!("Org 1", %{error: :raise})
|
|
end)
|
|
|
|
assert User |> Api.read!() |> Enum.all?(& &1.approved)
|
|
end
|
|
end
|