diff --git a/lib/admin/accounts/account.ex b/lib/admin/accounts/account.ex index c46a7d72f..26562ed7b 100644 --- a/lib/admin/accounts/account.ex +++ b/lib/admin/accounts/account.ex @@ -20,10 +20,17 @@ defmodule Admin.Accounts.Account do account |> cast(attrs, [:name, :email, :type, :extra]) |> validate_required([:name, :email, :type]) + |> validate_name() |> validate_email() + |> validate_type() |> validate_change(:extra, fn _, value -> validate_lang(value) end) end + defp validate_name(changeset) do + changeset + |> validate_length(:name, min: 3, max: 60) + end + defp validate_email(changeset) do changeset |> validate_format(:email, ~r/^[^@,;\s]+@[^@,;\s]+$/, @@ -32,6 +39,11 @@ defmodule Admin.Accounts.Account do |> validate_length(:email, max: 160) end + defp validate_type(changeset) do + changeset + |> validate_inclusion(:type, ["individual", "guest"]) + end + # Validates `lang` only if present; permits nil or empty maps. defp validate_lang(map) when is_map(map) and map == %{}, do: [] diff --git a/test/admin/accounts_test.exs b/test/admin/accounts_test.exs index 3a5ef1453..2abe4df88 100644 --- a/test/admin/accounts_test.exs +++ b/test/admin/accounts_test.exs @@ -530,12 +530,12 @@ defmodule Admin.AccountsTest do Accounts.create_member(%{ name: "John Doe", email: "john@example.com", - type: "member" + type: "individual" }) assert member.name == "John Doe" assert member.email == "john@example.com" - assert member.type == "member" + assert member.type == "individual" end end