File tree Expand file tree Collapse file tree 3 files changed +52
-0
lines changed
Expand file tree Collapse file tree 3 files changed +52
-0
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments