Accept future join dates: remove past-only validation and update tests

This commit is contained in:
Moritz 2026-05-12 23:14:44 +02:00
parent d549e6878c
commit fb59ef99c1
2 changed files with 34 additions and 8 deletions

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", %{