Skip to content

Commit 4b8ee0a

Browse files
Support day-only intervals in Shared.Zeitperiode.parse/1
Co-authored-by: Ona <no-reply@ona.com>
1 parent 15ab347 commit 4b8ee0a

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

lib/zeit.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ defmodule Shared.Zeit do
6464

6565
{:ok, %NaiveDateTime{} = naive_date_time} ->
6666
naive_date_time
67+
68+
{:error, _} ->
69+
case Date.from_iso8601(to_parse) do
70+
{:ok, date} -> NaiveDateTime.new!(date, ~T[00:00:00])
71+
{:error, reason} -> raise ArgumentError, "Invalid date/time format: #{reason}"
72+
end
6773
end
6874
end
6975

lib/zeit_test.exs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,27 @@ defmodule Shared.ZeitTest do
3333
|> Timex.to_datetime("Etc/UTC")
3434
|> entspricht_timestamp?("2018-10-03T10:20:42Z")
3535
end
36+
37+
test "parse date-only string" do
38+
assert Zeit.parse("2025-01-15") == ~N[2025-01-15 00:00:00]
39+
end
40+
41+
test "parse date-only string at year boundary" do
42+
assert Zeit.parse("2024-12-31") == ~N[2024-12-31 00:00:00]
43+
assert Zeit.parse("2025-01-01") == ~N[2025-01-01 00:00:00]
44+
end
45+
46+
test "parse invalid date raises ArgumentError" do
47+
assert_raise ArgumentError, ~r/Invalid date\/time format/, fn ->
48+
Zeit.parse("not-a-date")
49+
end
50+
end
51+
52+
test "parse invalid date with wrong month raises ArgumentError" do
53+
assert_raise ArgumentError, ~r/Invalid date\/time format/, fn ->
54+
Zeit.parse("2025-13-01")
55+
end
56+
end
3657
end
3758

3859
describe "jetzt/0" do

lib/zeitperiode_test.exs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,31 @@ defmodule Shared.ZeitperiodeTest do
378378
assert Periode.parse("2019-04-16T23:30:00+02:00--2019-04-16T23:45:00+02:00")
379379
|> entspricht_intervall?("2019-04-16T23:30:00+02:00/2019-04-16T23:45:00+02:00")
380380
end
381+
382+
test "parse date-only interval with slash separator" do
383+
assert [start: ~N[2025-01-01 00:00:00], ende: ~N[2025-01-02 00:00:00]] =
384+
Periode.parse("2025-01-01/2025-01-02")
385+
end
386+
387+
test "parse date-only interval with double-dash separator" do
388+
assert [start: ~N[2025-01-01 00:00:00], ende: ~N[2025-01-02 00:00:00]] =
389+
Periode.parse("2025-01-01--2025-01-02")
390+
end
391+
392+
test "parse date-only interval spanning months" do
393+
assert [start: ~N[2025-01-15 00:00:00], ende: ~N[2025-02-15 00:00:00]] =
394+
Periode.parse("2025-01-15/2025-02-15")
395+
end
396+
397+
test "parse date-only interval spanning years" do
398+
assert [start: ~N[2024-12-31 00:00:00], ende: ~N[2025-01-01 00:00:00]] =
399+
Periode.parse("2024-12-31/2025-01-01")
400+
end
401+
402+
test "parse single day interval" do
403+
assert [start: ~N[2025-03-15 00:00:00], ende: ~N[2025-03-15 00:00:00]] =
404+
Periode.parse("2025-03-15/2025-03-15")
405+
end
381406
end
382407

383408
describe "to_iso8601/1" do

0 commit comments

Comments
 (0)