From 056fd04ddf8cf98e85d470c643f5f3571df808a8 Mon Sep 17 00:00:00 2001 From: carla Date: Mon, 23 Feb 2026 16:24:20 +0100 Subject: [PATCH] feat: remove postal code validation --- docs/database-schema-readme.md | 2 +- docs/database_schema.dbml | 2 +- lib/membership/member.ex | 6 ------ test/membership/member_test.exs | 12 +++--------- 4 files changed, 5 insertions(+), 17 deletions(-) diff --git a/docs/database-schema-readme.md b/docs/database-schema-readme.md index 6e444a5..de1c158 100644 --- a/docs/database-schema-readme.md +++ b/docs/database-schema-readme.md @@ -191,7 +191,7 @@ Settings (1) → MembershipFeeType (0..1) - Join date cannot be in future - Exit date must be after join date - Phone: `+?[0-9\- ]{6,20}` -- Postal code: 5 digits +- Postal code: optional (no format validation) ### CustomFieldValue System - Maximum one custom field value per custom field per member diff --git a/docs/database_schema.dbml b/docs/database_schema.dbml index 23605bf..e09af58 100644 --- a/docs/database_schema.dbml +++ b/docs/database_schema.dbml @@ -188,7 +188,7 @@ Table members { - email: 5-254 characters, valid email format (required) - join_date: cannot be in future - exit_date: must be after join_date (if both present) - - postal_code: exactly 5 digits (if present) + - postal_code: optional (no format validation) ''' } diff --git a/lib/membership/member.ex b/lib/membership/member.ex index 476501c..797549a 100644 --- a/lib/membership/member.ex +++ b/lib/membership/member.ex @@ -22,7 +22,6 @@ defmodule Mv.Membership.Member do ## Validations - Required: email (all other fields are optional) - Email format validation (using EctoCommons.EmailValidator) - - Postal code format: exactly 5 digits (German format) - Date validations: join_date not in future, exit_date after join_date - Email uniqueness: prevents conflicts with unlinked users - Linked member email change: only admins or the linked user may change a linked member's email (see `Mv.Membership.Member.Validations.EmailChangePermission`) @@ -458,11 +457,6 @@ defmodule Mv.Membership.Member do where: [present([:join_date, :exit_date])], message: "cannot be before join date" - # Postal code format (only if set) - validate match(:postal_code, ~r/^\d{5}$/), - where: [present(:postal_code)], - message: "must consist of 5 digits" - # Email validation with EctoCommons.EmailValidator validate fn changeset, _ -> email = Ash.Changeset.get_attribute(changeset, :email) diff --git a/test/membership/member_test.exs b/test/membership/member_test.exs index 705ab61..0121b29 100644 --- a/test/membership/member_test.exs +++ b/test/membership/member_test.exs @@ -80,15 +80,9 @@ defmodule Mv.Membership.MemberTest do assert {:ok, _member} = Membership.create_member(attrs, actor: actor) end - test "Postal code is optional but must have 5 digits if specified", %{actor: actor} do - attrs = Map.put(@valid_attrs, :postal_code, "1234") - - assert {:error, %Ash.Error.Invalid{errors: errors}} = - Membership.create_member(attrs, actor: actor) - - assert error_message(errors, :postal_code) =~ "must consist of 5 digits" - attrs2 = Map.delete(@valid_attrs, :postal_code) - assert {:ok, _member} = Membership.create_member(attrs2, actor: actor) + test "Postal code is optional", %{actor: actor} do + attrs = Map.delete(@valid_attrs, :postal_code) + assert {:ok, _member} = Membership.create_member(attrs, actor: actor) end end