Files
syn-chat-bot/.venv/lib/python3.9/site-packages/icalendar/tests/test_period.py
Hyungi Ahn c2257d3a86 fix: 포트 충돌 회피 — note_bridge 8098, intent_service 8099
Jellyfin(8096), OrbStack(8097) 포트 충돌으로 변경.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 13:53:55 +09:00

113 lines
3.9 KiB
Python

"""These tests make sure that we have some coverage on the usage of the PERIOD value type.
See
- https://github.com/collective/icalendar/issues/156
- https://github.com/pimutils/khal/issues/152#issuecomment-933635248
"""
import datetime
import pytest
from icalendar.prop import vDDDTypes, vPeriod
@pytest.mark.parametrize(
("calname", "tzname", "index", "period_string"),
[
(
"issue_156_RDATE_with_PERIOD_TZID_khal_2",
"Europe/Berlin",
0,
"20211101T160000/20211101T163000",
),
(
"issue_156_RDATE_with_PERIOD_TZID_khal_2",
"Europe/Berlin",
1,
"20211206T160000/20211206T163000",
),
(
"issue_156_RDATE_with_PERIOD_TZID_khal_2",
"Europe/Berlin",
2,
"20220103T160000/20220103T163000",
),
(
"issue_156_RDATE_with_PERIOD_TZID_khal_2",
"Europe/Berlin",
3,
"20220207T160000/20220207T163000",
),
]
+ [
("issue_156_RDATE_with_PERIOD_TZID_khal", "America/Chicago", i, period)
for i, period in enumerate(
(
"20180327T080000/20180327T0"
"90000,20180403T080000/20180403T090000,20180410T080000/20180410T090000,2018"
"0417T080000/20180417T090000,20180424T080000/20180424T090000,20180501T08000"
"0/20180501T090000,20180508T080000/20180508T090000,20180515T080000/20180515"
"T090000,20180522T080000/20180522T090000,20180529T080000/20180529T090000,20"
"180605T080000/20180605T090000,20180612T080000/20180612T090000,20180619T080"
"000/20180619T090000,20180626T080000/20180626T090000,20180703T080000/201807"
"03T090000,20180710T080000/20180710T090000,20180717T080000/20180717T090000,"
"20180724T080000/20180724T090000,20180731T080000/20180731T090000"
).split(",")
)
],
)
def test_issue_156_period_list_in_rdate(
calendars, calname, tzname, index, period_string
):
"""Check items in a list of period values."""
calendar = calendars[calname]
rdate = calendar.walk("vevent")[0]["rdate"]
period = rdate.dts[index]
assert period.dt == vDDDTypes.from_ical(period_string, timezone=tzname)
def test_duration_properly_parsed(events):
"""This checks the duration PT5H30M."""
start = vDDDTypes.from_ical("19970109T180000Z")
duration = vDDDTypes.from_ical("PT5H30M")
rdate = events.issue_156_RDATE_with_PERIOD_list["RDATE"]
print(rdate)
period = rdate.dts[1].dt
print(dir(duration))
assert period[0] == start
assert period[1].days == 0
assert period[1].seconds == (5 * 60 + 30) * 60
assert period[1] == duration
def test_tzid_is_part_of_the_parameters(calendars):
"""The TZID should be mentioned in the parameters."""
event = list(calendars.period_with_timezone.walk("VEVENT"))[0]
assert event["RDATE"].params["TZID"] == "America/Vancouver"
def test_tzid_is_part_of_the_period_values(calendars, tzp):
"""The TZID should be set in the datetime."""
event = list(calendars.period_with_timezone.walk("VEVENT"))[0]
start, end = event["RDATE"].dts[0].dt
assert start == tzp.localize(
datetime.datetime(2023, 12, 13, 12), "America/Vancouver"
)
assert end == tzp.localize(datetime.datetime(2023, 12, 13, 15), "America/Vancouver")
def test_period_overlaps():
# 30 minute increments
datetime_1 = datetime.datetime(2024, 11, 20, 12, 0) # 12:00
datetime_2 = datetime.datetime(2024, 11, 20, 12, 30) # 12:30
datetime_3 = datetime.datetime(2024, 11, 20, 13, 0) # 13:00
period_1 = vPeriod((datetime_1, datetime_2))
period_2 = vPeriod((datetime_1, datetime_3))
period_3 = vPeriod((datetime_2, datetime_3))
assert period_1.overlaps(period_2)
assert period_3.overlaps(period_2)
assert not period_1.overlaps(period_3)