This commit is contained in:
parent
b7a83d9298
commit
fa738aae88
12 changed files with 846 additions and 54 deletions
|
|
@ -26,8 +26,17 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
on_exit(fn ->
|
||||
{:ok, s} = Membership.get_settings()
|
||||
attrs = %{}
|
||||
attrs = if saved_enabled != nil, do: Map.put(attrs, :join_form_enabled, saved_enabled), else: attrs
|
||||
attrs = if saved_ids != nil, do: Map.put(attrs, :join_form_field_ids, saved_ids || []), else: attrs
|
||||
|
||||
attrs =
|
||||
if saved_enabled != nil,
|
||||
do: Map.put(attrs, :join_form_enabled, saved_enabled),
|
||||
else: attrs
|
||||
|
||||
attrs =
|
||||
if saved_ids != nil,
|
||||
do: Map.put(attrs, :join_form_field_ids, saved_ids || []),
|
||||
else: attrs
|
||||
|
||||
attrs =
|
||||
if saved_required != nil,
|
||||
do: Map.put(attrs, :join_form_field_required, saved_required || %{}),
|
||||
|
|
@ -57,6 +66,7 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
describe "join form settings persistence and loading" do
|
||||
test "save and load join_form_enabled plus field selection and required flags returns same config" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
attrs = %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "first_name"],
|
||||
|
|
@ -78,17 +88,20 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
|
||||
test "repeated save with changed field list overwrites config without leftovers" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
assert {:ok, _} = update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "first_name"],
|
||||
join_form_field_required: %{"email" => true, "first_name" => false}
|
||||
})
|
||||
|
||||
assert {:ok, updated} = update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "last_name"],
|
||||
join_form_field_required: %{"email" => true, "last_name" => false}
|
||||
})
|
||||
assert {:ok, _} =
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "first_name"],
|
||||
join_form_field_required: %{"email" => true, "first_name" => false}
|
||||
})
|
||||
|
||||
assert {:ok, updated} =
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "last_name"],
|
||||
join_form_field_required: %{"email" => true, "last_name" => false}
|
||||
})
|
||||
|
||||
assert updated.join_form_field_ids == ["email", "last_name"]
|
||||
assert Map.has_key?(updated.join_form_field_required, "last_name")
|
||||
|
|
@ -102,11 +115,12 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
test "only existing member fields or custom field ids are accepted; unknown field names rejected or sanitized" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
result = update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "not_a_member_field"],
|
||||
join_form_field_required: %{"email" => true, "not_a_member_field" => false}
|
||||
})
|
||||
result =
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "not_a_member_field"],
|
||||
join_form_field_required: %{"email" => true, "not_a_member_field" => false}
|
||||
})
|
||||
|
||||
# Until attributes exist we get NoSuchInput; once implemented we expect validation error
|
||||
assert {:error, _} = result
|
||||
|
|
@ -115,16 +129,18 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
test "config without email is rejected or email is auto-added and required" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
result = update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["first_name", "last_name"],
|
||||
join_form_field_required: %{"first_name" => true, "last_name" => false}
|
||||
})
|
||||
result =
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["first_name", "last_name"],
|
||||
join_form_field_required: %{"first_name" => true, "last_name" => false}
|
||||
})
|
||||
|
||||
# Either rejected or, when loaded, email must be present and required
|
||||
case result do
|
||||
{:error, _} ->
|
||||
:ok
|
||||
|
||||
{:ok, updated} ->
|
||||
assert "email" in updated.join_form_field_ids
|
||||
assert updated.join_form_field_required["email"] == true
|
||||
|
|
@ -134,11 +150,12 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
test "required false for email is ignored or forced to true when saved" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
{:ok, updated} = update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "first_name"],
|
||||
join_form_field_required: %{"email" => false, "first_name" => false}
|
||||
})
|
||||
{:ok, updated} =
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "first_name"],
|
||||
join_form_field_required: %{"email" => false, "first_name" => false}
|
||||
})
|
||||
|
||||
assert updated.join_form_field_required["email"] == true
|
||||
end
|
||||
|
|
@ -146,15 +163,17 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
test "required flag for field not in join_form_field_ids is rejected or dropped" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
result = update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email"],
|
||||
join_form_field_required: %{"email" => true, "first_name" => true}
|
||||
})
|
||||
result =
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email"],
|
||||
join_form_field_required: %{"email" => true, "first_name" => true}
|
||||
})
|
||||
|
||||
case result do
|
||||
{:error, _} ->
|
||||
:ok
|
||||
|
||||
{:ok, updated} ->
|
||||
refute Map.has_key?(updated.join_form_field_required, "first_name")
|
||||
end
|
||||
|
|
@ -166,6 +185,7 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
describe "join form allowlist" do
|
||||
test "allowlist returns configured fields with required/optional when join form enabled" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", "first_name"],
|
||||
|
|
@ -175,8 +195,8 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
allowlist = Membership.get_join_form_allowlist()
|
||||
|
||||
assert length(allowlist) == 2
|
||||
email_entry = Enum.find(allowlist, &( &1.id == "email" ))
|
||||
first_name_entry = Enum.find(allowlist, &( &1.id == "first_name" ))
|
||||
email_entry = Enum.find(allowlist, &(&1.id == "email"))
|
||||
first_name_entry = Enum.find(allowlist, &(&1.id == "first_name"))
|
||||
assert email_entry.required == true
|
||||
assert first_name_entry.required == false
|
||||
assert email_entry.type == :member_field
|
||||
|
|
@ -185,6 +205,7 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
|
||||
test "allowlist returns empty or defined default when join form disabled" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: false,
|
||||
join_form_field_ids: ["email", "first_name"],
|
||||
|
|
@ -200,11 +221,13 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
test "allowlist distinguishes member fields and custom field identifiers" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
actor = SystemActor.get_system_actor()
|
||||
|
||||
{:ok, cf} =
|
||||
Membership.create_custom_field(
|
||||
%{name: "join_cf_#{System.unique_integer([:positive])}", value_type: :string},
|
||||
actor: actor
|
||||
)
|
||||
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: ["email", cf.id],
|
||||
|
|
@ -213,8 +236,8 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
|
||||
allowlist = Membership.get_join_form_allowlist()
|
||||
|
||||
email_entry = Enum.find(allowlist, &( &1.id == "email" ))
|
||||
cf_entry = Enum.find(allowlist, &( &1.id == cf.id ))
|
||||
email_entry = Enum.find(allowlist, &(&1.id == "email"))
|
||||
cf_entry = Enum.find(allowlist, &(&1.id == cf.id))
|
||||
assert email_entry.type == :member_field
|
||||
assert cf_entry.type == :custom_field
|
||||
end
|
||||
|
|
@ -252,11 +275,12 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
test "invalid or unexpected payload structure yields clean error or ignores unknown keys" do
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
result = update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: "not_a_list",
|
||||
join_form_field_required: %{}
|
||||
})
|
||||
result =
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: "not_a_list",
|
||||
join_form_field_required: %{}
|
||||
})
|
||||
|
||||
assert match?({:error, _}, result) or
|
||||
(match?({:ok, _}, result) && elem(result, 1).join_form_field_ids != "not_a_list")
|
||||
|
|
@ -267,11 +291,12 @@ defmodule Mv.Membership.SettingJoinFormTest do
|
|||
all_member = Constants.member_fields() |> Enum.map(&to_string/1)
|
||||
required_map = Map.new(all_member, fn f -> {f, f == "email"} end)
|
||||
|
||||
assert {:ok, updated} = update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: all_member,
|
||||
join_form_field_required: required_map
|
||||
})
|
||||
assert {:ok, updated} =
|
||||
update_join_form_settings(settings, %{
|
||||
join_form_enabled: true,
|
||||
join_form_field_ids: all_member,
|
||||
join_form_field_required: required_map
|
||||
})
|
||||
|
||||
assert length(updated.join_form_field_ids) == length(all_member)
|
||||
{:ok, reloaded} = Membership.get_settings()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue