Remove the join_date future-date validation closes #482 #495

Merged
moritz merged 3 commits from issue/mitgliederverwaltung-482 into main 2026-05-13 00:45:04 +02:00
2 changed files with 34 additions and 8 deletions
Showing only changes of commit fb59ef99c1 - Show all commits

View file

@ -473,11 +473,6 @@ defmodule Mv.Membership.Member do
end
end
# Join date not in future
validate compare(:join_date, less_than_or_equal_to: &Date.utc_today/0),
where: [present(:join_date)],
message: "cannot be in the future"
# Exit date not before join date
validate compare(:exit_date, greater_than: :join_date),
where: [present([:join_date, :exit_date])],

View file

@ -49,12 +49,43 @@ defmodule Mv.Membership.MemberTest do
assert error_message(errors, :email) =~ "is not a valid email"
end
test "Join date cannot be in the future", %{actor: actor} do
test "Join date can be in the future", %{actor: actor} do
attrs = Map.put(@valid_attrs, :join_date, Date.utc_today() |> Date.add(1))
assert {:error,
%Ash.Error.Invalid{errors: [%Ash.Error.Changes.InvalidAttribute{field: :join_date}]}} =
assert {:ok, _member} = Membership.create_member(attrs, actor: actor)
end
test "Join date far in the future (2099) is accepted", %{actor: actor} do
attrs = Map.put(@valid_attrs, :join_date, ~D[2099-12-31])
assert {:ok, _member} = Membership.create_member(attrs, actor: actor)
end
test "Join date today is accepted", %{actor: actor} do
attrs = Map.put(@valid_attrs, :join_date, Date.utc_today())
assert {:ok, _member} = Membership.create_member(attrs, actor: actor)
end
test "Join date in the future is accepted on update", %{actor: actor} do
{:ok, member} = Membership.create_member(@valid_attrs, actor: actor)
assert {:ok, _updated} =
Membership.update_member(member, %{join_date: Date.utc_today() |> Date.add(30)},
actor: actor
)
end
test "Exit date before future join date is rejected", %{actor: actor} do
attrs =
@valid_attrs
|> Map.put(:join_date, Date.utc_today() |> Date.add(10))
|> Map.put(:exit_date, Date.utc_today() |> Date.add(5))
assert {:error, %Ash.Error.Invalid{errors: errors}} =
Membership.create_member(attrs, actor: actor)
assert error_message(errors, :exit_date) =~ "cannot be before join date"
end
test "Exit date is optional but must not be before join date if both are specified", %{