File: test_duration.py

package info (click to toggle)
python-recurring-ical-events 3.3.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,128 kB
  • sloc: python: 2,896; sh: 15; makefile: 3
file content (56 lines) | stat: -rw-r--r-- 1,546 bytes parent folder | download | duplicates (2)
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"