Accept future join dates: remove past-only validation and update tests
This commit is contained in:
parent
d549e6878c
commit
fb59ef99c1
2 changed files with 34 additions and 8 deletions
|
|
@ -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])],
|
||||
|
|
|
|||
|
|
@ -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", %{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue