fix: validate action type when constructing forms

closes #125
This commit is contained in:
Zach Daniel 2024-01-05 10:13:37 -05:00
parent 25f1547a4c
commit 7360ff066e

View file

@ -442,6 +442,8 @@ defmodule AshPhoenix.Form do
|> validate_opts_with_extra_keys(@for_opts)
|> forms_for_type(:create)
require_action!(resource, action, :create)
changeset_opts =
Keyword.drop(opts, [
:forms,
@ -540,6 +542,8 @@ defmodule AshPhoenix.Form do
|> validate_opts_with_extra_keys(@for_opts)
|> forms_for_type(:update)
require_action!(resource, action, :update)
changeset_opts =
Keyword.drop(opts, [
:forms,
@ -643,6 +647,8 @@ defmodule AshPhoenix.Form do
|> validate_opts_with_extra_keys(@for_opts)
|> forms_for_type(:destroy)
require_action!(resource, action, :update)
changeset_opts =
Keyword.drop(opts, [
:forms,
@ -753,6 +759,8 @@ defmodule AshPhoenix.Form do
|> validate_opts_with_extra_keys(@for_opts)
|> forms_for_type(:read)
require_action!(resource, action, :read)
name = opts[:as] || "form"
id = opts[:id] || opts[:as] || "form"
@ -835,6 +843,20 @@ defmodule AshPhoenix.Form do
|> carry_over_errors()
end
defp require_action!(resource, action, type) do
case Ash.Resource.Info.action(resource, action) do
nil ->
raise ArgumentError, "No such action #{inspect(action)} for resource #{inspect(resource)}"
%{type: ^type} ->
:ok
%{type: actual_type} ->
raise ArgumentError,
"Expected action of type #{inspect(type)}, but #{inspect(action)} is of type #{inspect(actual_type)}"
end
end
defp set_accessing_from(changeset_or_query, opts) do
case opts[:accessing_from] do
{source, name} ->