fix compare begin and end dates

this bug prevent from creating an event with the day of month of the begin date greater than the day of month of the end date, event if end date is effectively greater than begin date.

for example, if the begin date is '2020-04-28' and end date is '2020-05-13', these dates are valid but because 28 > 13, the validation fails.

this is better explained in this article ["Never compare dates in Elixir using < or >"](https://blog.leif.io/never-use-to-compare-dates/).

using Date.compare, as proposed in this PR fix the issue.
This commit is contained in:
setop 2020-04-03 23:37:56 +02:00
parent 4630491fa4
commit 01bdd7b344

View File

@ -167,7 +167,7 @@ defmodule Mobilizon.Events.Event do
case fetch_field(changeset, :begins_on) do case fetch_field(changeset, :begins_on) do
{_, begins_on} -> {_, begins_on} ->
validate_change(changeset, :ends_on, fn :ends_on, ends_on -> validate_change(changeset, :ends_on, fn :ends_on, ends_on ->
if begins_on > ends_on, if Date.compare(begins_on, ends_on) == :gt,
do: [ends_on: "ends_on cannot be set before begins_on"], do: [ends_on: "ends_on cannot be set before begins_on"],
else: [] else: []
end) end)