feat: make all member fields optional, so member creation can be continued later

This commit is contained in:
Moritz 2025-08-05 17:19:12 +02:00
parent d4c7af558d
commit 800a55d42f
Signed by: moritz
GPG key ID: 1020A035E5DD0824
8 changed files with 286 additions and 40 deletions

View file

@ -0,0 +1,52 @@
defmodule Mv.Accounts.EmptyMemberCreationTest do
use Mv.DataCase, async: true
alias Mv.Accounts
alias Mv.Membership
describe "Empty Member Creation" do
test "can create completely empty member" do
{:ok, member} = Membership.create_member(%{})
assert member.id
assert member.first_name == nil
assert member.last_name == nil
assert member.member_email == nil
assert member.birth_date == nil
assert member.paid == nil
assert member.phone_number == nil
assert member.join_date == nil
assert member.exit_date == nil
assert member.notes == nil
assert member.city == nil
assert member.street == nil
assert member.house_number == nil
assert member.postal_code == nil
end
test "user creation creates empty member automatically" do
{:ok, user} = Accounts.create_user(%{email: "test@example.com"})
# Reload user to get the member_id
user = Ash.reload!(user, domain: Mv.Accounts)
assert user.member_id
# Get the created member
member = Ash.get!(Mv.Membership.Member, user.member_id, domain: Mv.Membership)
# Member should be mostly empty except for email
assert member.member_email == "test@example.com"
assert member.first_name == nil
assert member.last_name == nil
assert member.birth_date == nil
assert member.paid == nil
assert member.phone_number == nil
assert member.join_date == nil
assert member.exit_date == nil
assert member.notes == nil
assert member.city == nil
assert member.street == nil
assert member.house_number == nil
assert member.postal_code == nil
end
end
end

View file

@ -8,8 +8,6 @@ defmodule Mv.Accounts.UserMemberIntegrationTest do
test "ein User kann einem Member zugeordnet werden" do
{:ok, member} =
Membership.create_member(%{
first_name: "Max",
last_name: "Mustermann",
member_email: "max@example.com"
})
@ -20,8 +18,6 @@ defmodule Mv.Accounts.UserMemberIntegrationTest do
test "ein Member kann nur einem User zugeordnet werden (unique constraint)" do
{:ok, member} =
Membership.create_member(%{
first_name: "Anna",
last_name: "Test",
member_email: "anna@example.com"
})
@ -66,12 +62,10 @@ defmodule Mv.Accounts.UserMemberIntegrationTest do
test "ein Member kann ohne User existieren" do
{:ok, member} =
Membership.create_member(%{
first_name: "Lisa",
last_name: "Solo",
member_email: "lisa@example.com"
})
assert member.id
end
end
end
end

View file

@ -19,16 +19,14 @@ defmodule Mv.Membership.MemberTest do
postal_code: "12345"
}
test "First name is required and must not be empty" do
attrs = Map.put(@valid_attrs, :first_name, "")
assert {:error, %Ash.Error.Invalid{errors: errors}} = Membership.create_member(attrs)
assert error_message(errors, :first_name) =~ "must be present"
test "First name is optional" do
attrs = Map.delete(@valid_attrs, :first_name)
assert {:ok, _member} = Membership.create_member(attrs)
end
test "Last name is required and must not be empty" do
attrs = Map.put(@valid_attrs, :last_name, "")
assert {:error, %Ash.Error.Invalid{errors: errors}} = Membership.create_member(attrs)
assert error_message(errors, :last_name) =~ "must be present"
test "Last name is optional" do
attrs = Map.delete(@valid_attrs, :last_name)
assert {:ok, _member} = Membership.create_member(attrs)
end
test "Email is optional" do