From 0556640d5123419bc9ac301b160fca6efe5f71ca Mon Sep 17 00:00:00 2001 From: Georges Dubus Date: Wed, 30 Apr 2025 15:35:51 +0200 Subject: [PATCH] Don't fail on events with no dtend --- lib/magical/parser.ex | 1 + test/magical/parser_test.exs | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/lib/magical/parser.ex b/lib/magical/parser.ex index 00c3827..68c8fa3 100644 --- a/lib/magical/parser.ex +++ b/lib/magical/parser.ex @@ -90,4 +90,5 @@ defmodule Magical.Parser do defp resolve_time_zones(%Date{} = date, _time_zone), do: date defp resolve_time_zones(%DateTime{} = date_time, _time_zone), do: date_time + defp resolve_time_zones(nil, _time_zone), do: nil end diff --git a/test/magical/parser_test.exs b/test/magical/parser_test.exs index 5728d5a..d1138c3 100644 --- a/test/magical/parser_test.exs +++ b/test/magical/parser_test.exs @@ -106,4 +106,29 @@ defmodule Magical.ParserTest do } = calendar end + + describe "time zone resolution" do + test "gracefully handles nil start or end times" do + expected_dtstart = DateTime.shift_zone!(~U[2025-04-16 12:00:00Z], "Europe/Paris") + + {:ok, + %Magical.Calendar{ + events: [ + %Magical.Event{ + dtstart: ^expected_dtstart, + dtend: nil + } + ] + }} = + """ + BEGIN:VCALENDAR + X-WR-TIMEZONE:Europe/Paris + BEGIN:VEVENT + DTSTART:20250416T140000 + END:VEVENT + END:VCALENDAR + """ + |> Parser.parse() + end + end end