1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
"""
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"
|