File: test_issue_223_sequence_number.py

package info (click to toggle)
python-recurring-ical-events 3.8.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,584 kB
  • sloc: python: 4,476; makefile: 84
file content (60 lines) | stat: -rw-r--r-- 2,177 bytes parent folder | download
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
57
58
59
60
"""This tests generating the right sequence number for event editing.

A computed, recurring event of a UID taking an event with a higher sequence in account,
will be of that sequence.

See https://github.com/niccokunzmann/python-recurring-ical-events/issues/223
"""

from typing import TYPE_CHECKING

import pytest

if TYPE_CHECKING:
    from icalendar import Event


def test_sequence_number_is_not_set_for_single_events(calendars):
    """If we have singe events, they should not need a sequence number."""
    assert "SEQUENCE" not in calendars.one_event.first


@pytest.mark.parametrize(("date", "sequence"), [("20190305", 1), ("20190304", 0)])
def test_sequence_is_not_deleted(calendars, date, sequence):
    """We do not delete the sequence if it is 0."""
    events: list[Event] = calendars.issue_223_one_event_with_sequence.at(date)
    assert len(events) == 1
    event = events[0]
    assert event["SEQUENCE"] == sequence, "sequence remains in here"


def test_sequence_number_is_not_set_for_recurrence(calendars):
    """If we do not use sequences at all, we should not set them."""
    events = calendars.one_day_event_repeat_every_day.at("20190308")
    assert len(events) == 1
    event = events[0]
    assert "SEQUENCE" not in event, "is not set if not needed"


def test_sequence_number_is_highest_for_edited_event(calendars):
    """If an event was edited, it uses this sequence number."""
    events: list[Event] = calendars.issue_223_thunderbird.at("20250424")
    assert len(events) == 1
    event = events[0]
    assert event["SEQUENCE"] == 3, "2 -> 3"


def test_sequence_number_is_highest_for_base_event(calendars):
    """The base event with no modification has the highest sequence number."""
    events: list[Event] = calendars.issue_223_thunderbird.at("20250423")
    assert len(events) == 1
    event = events[0]
    assert event["SEQUENCE"] == 3, "1 -> 3"


def test_sequence_number_is_highest_for_last_event(calendars):
    """The last edited event keeps its sequence number."""
    events: list[Event] = calendars.issue_223_thunderbird.at("20250425")
    assert len(events) == 1
    event = events[0]
    assert event["SEQUENCE"] == 3, "3 -> 3"