test: Add tests for empty string validation in custom fields
This commit is contained in:
parent
4e101ea36e
commit
324425a991
1 changed files with 111 additions and 1 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue