test: Add tests for empty string validation in custom fields

This commit is contained in:
carla 2025-12-23 17:02:23 +01:00
parent 4e101ea36e
commit 324425a991

View file

@ -51,6 +51,15 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do
}) })
|> Ash.create() |> Ash.create()
{:ok, required_email_field} =
Membership.CustomField
|> Ash.Changeset.for_create(:create, %{
name: "required_email",
value_type: :email,
required: true
})
|> Ash.create()
{:ok, optional_field} = {:ok, optional_field} =
Membership.CustomField Membership.CustomField
|> Ash.Changeset.for_create(:create, %{ |> Ash.Changeset.for_create(:create, %{
@ -65,6 +74,7 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do
required_integer_field: required_integer_field, required_integer_field: required_integer_field,
required_boolean_field: required_boolean_field, required_boolean_field: required_boolean_field,
required_date_field: required_date_field, required_date_field: required_date_field,
required_email_field: required_email_field,
optional_field: optional_field optional_field: optional_field
} }
end end
@ -74,7 +84,8 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do
required_string_field: string_field, required_string_field: string_field,
required_integer_field: integer_field, required_integer_field: integer_field,
required_boolean_field: boolean_field, required_boolean_field: boolean_field,
required_date_field: date_field required_date_field: date_field,
required_email_field: email_field
}) do }) do
[ [
%{ %{
@ -92,6 +103,10 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do
%{ %{
"custom_field_id" => date_field.id, "custom_field_id" => date_field.id,
"value" => %{"_union_type" => "date", "_union_value" => ~D[2020-01-01]} "value" => %{"_union_type" => "date", "_union_value" => ~D[2020-01-01]}
},
%{
"custom_field_id" => email_field.id,
"value" => %{"_union_type" => "email", "_union_value" => "test@example.com"}
} }
] ]
end end
@ -218,6 +233,27 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do
assert error_message(errors, :custom_field_values) =~ field.name assert error_message(errors, :custom_field_values) =~ field.name
end end
test "fails when required integer custom field has empty string value",
%{
required_integer_field: field
} = context do
custom_field_values =
all_required_custom_fields_with_defaults(context)
|> Enum.map(fn cfv ->
if cfv["custom_field_id"] == field.id do
%{cfv | "value" => %{"_union_type" => "integer", "_union_value" => ""}}
else
cfv
end
end)
attrs = Map.put(@valid_attrs, :custom_field_values, custom_field_values)
assert {:error, %Ash.Error.Invalid{errors: errors}} = Membership.create_member(attrs)
assert error_message(errors, :custom_field_values) =~ "Required custom fields missing"
assert error_message(errors, :custom_field_values) =~ field.name
end
test "succeeds when required integer custom field has zero value", test "succeeds when required integer custom field has zero value",
%{ %{
required_integer_field: _field required_integer_field: _field
@ -320,6 +356,27 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do
assert error_message(errors, :custom_field_values) =~ field.name assert error_message(errors, :custom_field_values) =~ field.name
end end
test "fails when required date custom field has empty string value",
%{
required_date_field: field
} = context do
custom_field_values =
all_required_custom_fields_with_defaults(context)
|> Enum.map(fn cfv ->
if cfv["custom_field_id"] == field.id do
%{cfv | "value" => %{"_union_type" => "date", "_union_value" => ""}}
else
cfv
end
end)
attrs = Map.put(@valid_attrs, :custom_field_values, custom_field_values)
assert {:error, %Ash.Error.Invalid{errors: errors}} = Membership.create_member(attrs)
assert error_message(errors, :custom_field_values) =~ "Required custom fields missing"
assert error_message(errors, :custom_field_values) =~ field.name
end
test "succeeds when required date custom field has valid date value", test "succeeds when required date custom field has valid date value",
%{ %{
required_date_field: _field required_date_field: _field
@ -331,6 +388,59 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do
assert {:ok, _member} = Membership.create_member(attrs) assert {:ok, _member} = Membership.create_member(attrs)
end end
test "fails when required email custom field has nil value",
%{
required_email_field: field
} = context do
custom_field_values =
all_required_custom_fields_with_defaults(context)
|> Enum.map(fn cfv ->
if cfv["custom_field_id"] == field.id do
%{cfv | "value" => %{"_union_type" => "email", "_union_value" => nil}}
else
cfv
end
end)
attrs = Map.put(@valid_attrs, :custom_field_values, custom_field_values)
assert {:error, %Ash.Error.Invalid{errors: errors}} = Membership.create_member(attrs)
assert error_message(errors, :custom_field_values) =~ "Required custom fields missing"
assert error_message(errors, :custom_field_values) =~ field.name
end
test "fails when required email custom field has empty string value",
%{
required_email_field: field
} = context do
custom_field_values =
all_required_custom_fields_with_defaults(context)
|> Enum.map(fn cfv ->
if cfv["custom_field_id"] == field.id do
%{cfv | "value" => %{"_union_type" => "email", "_union_value" => ""}}
else
cfv
end
end)
attrs = Map.put(@valid_attrs, :custom_field_values, custom_field_values)
assert {:error, %Ash.Error.Invalid{errors: errors}} = Membership.create_member(attrs)
assert error_message(errors, :custom_field_values) =~ "Required custom fields missing"
assert error_message(errors, :custom_field_values) =~ field.name
end
test "succeeds when required email custom field has valid email value",
%{
required_email_field: _field
} = context do
custom_field_values = all_required_custom_fields_with_defaults(context)
attrs = Map.put(@valid_attrs, :custom_field_values, custom_field_values)
assert {:ok, _member} = Membership.create_member(attrs)
end
test "succeeds when multiple required custom fields are provided", test "succeeds when multiple required custom fields are provided",
%{ %{
required_string_field: string_field, required_string_field: string_field,