""" Test the DURATION property. Not all events have an end. Some events define no explicit end and some a DURATION. RFC: https://www.kanzaki.com/docs/ical/duration.html """ import pytest @pytest.mark.parametrize( ("date", "count"), [ # event 3 days ("20180110", 1), ("20180111", 1), ("20180112", 1), ("20180109", 0), ("20180114", 0), # event 3 hours ((2018, 1, 15, 10), 1), ((2018, 1, 15, 11), 1), ((2018, 1, 15, 12), 1), ((2018, 1, 15, 9), 0), ((2018, 1, 15, 14), 0), # event with no duration nor end ((2018, 1, 20), 1), ((2018, 1, 19), 0), ((2018, 1, 21), 0), ], ) def test_events_expected(date, count, calendars): events = calendars.duration.at(date) assert len(events) == count @pytest.mark.parametrize( ("date", "summary", "expected_hours"), [ ("20190318", "original event", 1), ("20190319", "edited duration", 3), ("20190320", "original event", 1), ], ) def test_duration_is_edited(calendars, date, summary, expected_hours): """Test that the duration of an event can be edited.""" events = calendars.duration_edited.at(date) assert len(events) == 1 event = events[0] event_hours = (event["DTEND"].dt - event["DTSTART"].dt).total_seconds() / 3600 assert summary == event["SUMMARY"], "we should have the correct event" assert ( event_hours == expected_hours ), "the duration is only edited in the edited event"