From 324425a991777e78bc032057f8c5d46e988099b7 Mon Sep 17 00:00:00 2001 From: carla Date: Tue, 23 Dec 2025 17:02:23 +0100 Subject: [PATCH] test: Add tests for empty string validation in custom fields --- .../member_required_custom_fields_test.exs | 112 +++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/test/membership/member_required_custom_fields_test.exs b/test/membership/member_required_custom_fields_test.exs index 747cebd..ec8ebe3 100644 --- a/test/membership/member_required_custom_fields_test.exs +++ b/test/membership/member_required_custom_fields_test.exs @@ -51,6 +51,15 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do }) |> 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} = Membership.CustomField |> Ash.Changeset.for_create(:create, %{ @@ -65,6 +74,7 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do required_integer_field: required_integer_field, required_boolean_field: required_boolean_field, required_date_field: required_date_field, + required_email_field: required_email_field, optional_field: optional_field } end @@ -74,7 +84,8 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do required_string_field: string_field, required_integer_field: integer_field, required_boolean_field: boolean_field, - required_date_field: date_field + required_date_field: date_field, + required_email_field: email_field }) do [ %{ @@ -92,6 +103,10 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do %{ "custom_field_id" => date_field.id, "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 @@ -218,6 +233,27 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do assert error_message(errors, :custom_field_values) =~ field.name 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", %{ required_integer_field: _field @@ -320,6 +356,27 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do assert error_message(errors, :custom_field_values) =~ field.name 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", %{ required_date_field: _field @@ -331,6 +388,59 @@ defmodule Mv.Membership.MemberRequiredCustomFieldsTest do assert {:ok, _member} = Membership.create_member(attrs) 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", %{ required_string_field: string_field,