Merge branch 'main' into feat/299_plz
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
commit
63040afee7
68 changed files with 4858 additions and 743 deletions
|
|
@ -86,6 +86,66 @@ defmodule Mv.Membership.MemberTest do
|
|||
end
|
||||
end
|
||||
|
||||
describe "Settings-driven required fields" do
|
||||
@valid_attrs %{
|
||||
first_name: "John",
|
||||
last_name: "Doe",
|
||||
email: "john@example.com"
|
||||
}
|
||||
|
||||
setup do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
saved_visibility = settings.member_field_visibility || %{}
|
||||
saved_required = settings.member_field_required || %{}
|
||||
|
||||
on_exit(fn ->
|
||||
{:ok, s} = Membership.get_settings()
|
||||
|
||||
Membership.update_settings(s, %{
|
||||
member_field_visibility: saved_visibility,
|
||||
member_field_required: saved_required
|
||||
})
|
||||
end)
|
||||
|
||||
:ok
|
||||
end
|
||||
|
||||
test "when first_name is required in settings, create without first_name fails", %{
|
||||
actor: actor
|
||||
} do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
{:ok, _} =
|
||||
Membership.update_single_member_field(settings,
|
||||
field: "first_name",
|
||||
show_in_overview: true,
|
||||
required: true
|
||||
)
|
||||
|
||||
attrs = Map.delete(@valid_attrs, :first_name)
|
||||
|
||||
assert {:error, %Ash.Error.Invalid{errors: errors}} =
|
||||
Membership.create_member(attrs, actor: actor)
|
||||
|
||||
assert error_message(errors, :first_name) =~ "can't be blank"
|
||||
end
|
||||
|
||||
test "when first_name is required in settings, create with first_name succeeds", %{
|
||||
actor: actor
|
||||
} do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
{:ok, _} =
|
||||
Membership.update_single_member_field(settings,
|
||||
field: "first_name",
|
||||
show_in_overview: true,
|
||||
required: true
|
||||
)
|
||||
|
||||
assert {:ok, _member} = Membership.create_member(@valid_attrs, actor: actor)
|
||||
end
|
||||
end
|
||||
|
||||
describe "Authorization" do
|
||||
@valid_attrs %{
|
||||
first_name: "John",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,23 @@ defmodule Mv.Membership.SettingTest do
|
|||
alias Mv.Membership
|
||||
|
||||
describe "Settings Resource" do
|
||||
setup do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
saved_visibility = settings.member_field_visibility || %{}
|
||||
saved_required = settings.member_field_required || %{}
|
||||
|
||||
on_exit(fn ->
|
||||
{:ok, s} = Membership.get_settings()
|
||||
|
||||
Membership.update_settings(s, %{
|
||||
member_field_visibility: saved_visibility,
|
||||
member_field_required: saved_required
|
||||
})
|
||||
end)
|
||||
|
||||
:ok
|
||||
end
|
||||
|
||||
test "can read settings" do
|
||||
# Settings should be a singleton resource
|
||||
assert {:ok, _settings} = Membership.get_settings()
|
||||
|
|
@ -39,6 +56,65 @@ defmodule Mv.Membership.SettingTest do
|
|||
|
||||
assert error_message(errors, :club_name) =~ "must be present"
|
||||
end
|
||||
|
||||
test "can update and read member_field_required" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
required_config = %{"first_name" => true, "last_name" => true}
|
||||
|
||||
assert {:ok, updated} =
|
||||
Membership.update_settings(settings, %{member_field_required: required_config})
|
||||
|
||||
assert updated.member_field_required["first_name"] == true
|
||||
assert updated.member_field_required["last_name"] == true
|
||||
end
|
||||
|
||||
test "member_field_required rejects invalid keys" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
assert {:error, %Ash.Error.Invalid{errors: errors}} =
|
||||
Membership.update_settings(settings, %{
|
||||
member_field_required: %{"invalid_field" => true}
|
||||
})
|
||||
|
||||
assert error_message(errors, :member_field_required) =~ "Invalid member field"
|
||||
end
|
||||
|
||||
test "member_field_required rejects non-boolean values" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
assert {:error, %Ash.Error.Invalid{errors: errors}} =
|
||||
Membership.update_settings(settings, %{
|
||||
member_field_required: %{"first_name" => "yes"}
|
||||
})
|
||||
|
||||
assert error_message(errors, :member_field_required) =~ "must be booleans"
|
||||
end
|
||||
|
||||
test "update_single_member_field updates both visibility and required" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
assert {:ok, updated} =
|
||||
Membership.update_single_member_field(settings,
|
||||
field: "first_name",
|
||||
show_in_overview: true,
|
||||
required: true
|
||||
)
|
||||
|
||||
assert updated.member_field_visibility["first_name"] == true
|
||||
assert updated.member_field_required["first_name"] == true
|
||||
|
||||
# Update same field to required: false
|
||||
assert {:ok, updated2} =
|
||||
Membership.update_single_member_field(updated,
|
||||
field: "first_name",
|
||||
show_in_overview: false,
|
||||
required: false
|
||||
)
|
||||
|
||||
assert updated2.member_field_visibility["first_name"] == false
|
||||
assert updated2.member_field_required["first_name"] == false
|
||||
end
|
||||
end
|
||||
|
||||
# Helper function to extract error messages
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue