(#1979) test for overridden all day rrule event
This commit is contained in:
@@ -386,7 +386,7 @@ def _expand(
|
|||||||
time_range_end = time_range_end.replace(tzinfo=None)
|
time_range_end = time_range_end.replace(tzinfo=None)
|
||||||
|
|
||||||
for vevent in vevents_overridden:
|
for vevent in vevents_overridden:
|
||||||
_strip_single_event(vevent, dt_format)
|
_strip_single_event(vevent, dt_format, all_day_event)
|
||||||
|
|
||||||
duration = None
|
duration = None
|
||||||
if hasattr(base_vevent, "dtend"):
|
if hasattr(base_vevent, "dtend"):
|
||||||
@@ -448,7 +448,7 @@ def _expand(
|
|||||||
.format(max_occurrence))
|
.format(max_occurrence))
|
||||||
|
|
||||||
_strip_component(vevent_component)
|
_strip_component(vevent_component)
|
||||||
_strip_single_event(base_vevent, dt_format)
|
_strip_single_event(base_vevent, dt_format, all_day_event)
|
||||||
|
|
||||||
i_overridden = 0
|
i_overridden = 0
|
||||||
|
|
||||||
@@ -565,15 +565,20 @@ def _expand(
|
|||||||
return element, len(filtered_vevents)
|
return element, len(filtered_vevents)
|
||||||
|
|
||||||
|
|
||||||
def _convert_timezone(vevent: vobject.icalendar.RecurringComponent,
|
def _convert_timezone(
|
||||||
name_prop: str,
|
vevent: vobject.icalendar.RecurringComponent,
|
||||||
name_content_line: str):
|
name_prop: str,
|
||||||
|
name_content_line: str,
|
||||||
|
all_day_event: bool = False
|
||||||
|
):
|
||||||
prop = getattr(vevent, name_prop, None)
|
prop = getattr(vevent, name_prop, None)
|
||||||
if prop:
|
if prop:
|
||||||
if type(prop.value) is datetime.date:
|
if type(prop.value) is datetime.date:
|
||||||
date_time = datetime.datetime.fromordinal(
|
date_time = datetime.datetime.fromordinal(
|
||||||
prop.value.toordinal()
|
prop.value.toordinal()
|
||||||
).replace(tzinfo=datetime.timezone.utc)
|
)
|
||||||
|
if not all_day_event:
|
||||||
|
date_time = date_time.replace(tzinfo=datetime.timezone.utc)
|
||||||
else:
|
else:
|
||||||
date_time = prop.value.astimezone(datetime.timezone.utc)
|
date_time = prop.value.astimezone(datetime.timezone.utc)
|
||||||
|
|
||||||
@@ -588,10 +593,14 @@ def _convert_to_utc(vevent: vobject.icalendar.RecurringComponent,
|
|||||||
setattr(vevent, name_prop, ContentLine(name=prop.name, value=prop.value.strftime(dt_format), params=[]))
|
setattr(vevent, name_prop, ContentLine(name=prop.name, value=prop.value.strftime(dt_format), params=[]))
|
||||||
|
|
||||||
|
|
||||||
def _strip_single_event(vevent: vobject.icalendar.RecurringComponent, dt_format: str) -> None:
|
def _strip_single_event(
|
||||||
_convert_timezone(vevent, 'dtstart', 'DTSTART')
|
vevent: vobject.icalendar.RecurringComponent,
|
||||||
_convert_timezone(vevent, 'dtend', 'DTEND')
|
dt_format: str,
|
||||||
_convert_timezone(vevent, 'recurrence_id', 'RECURRENCE-ID')
|
all_day_event: bool = False,
|
||||||
|
) -> None:
|
||||||
|
_convert_timezone(vevent, 'dtstart', 'DTSTART', all_day_event)
|
||||||
|
_convert_timezone(vevent, 'dtend', 'DTEND', all_day_event)
|
||||||
|
_convert_timezone(vevent, 'recurrence_id', 'RECURRENCE-ID', all_day_event)
|
||||||
|
|
||||||
# There is something strange behaviour during serialization native datetime, so converting manually
|
# There is something strange behaviour during serialization native datetime, so converting manually
|
||||||
_convert_to_utc(vevent, 'dtstart', dt_format)
|
_convert_to_utc(vevent, 'dtstart', dt_format)
|
||||||
|
|||||||
21
radicale/tests/static/event_full_day_rrule_overridden.ics
Normal file
21
radicale/tests/static/event_full_day_rrule_overridden.ics
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//Radicale//Test//EN
|
||||||
|
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;VALUE=DATE:20060102
|
||||||
|
DTEND;VALUE=DATE:20060103
|
||||||
|
RRULE:FREQ=DAILY;COUNT=3
|
||||||
|
UID:event_full_day_rrule_overridden
|
||||||
|
SUMMARY:All day recurring
|
||||||
|
END:VEVENT
|
||||||
|
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;VALUE=DATE:20060110
|
||||||
|
DTEND;VALUE=DATE:20060111
|
||||||
|
RECURRENCE-ID;VALUE=DATE:20060103
|
||||||
|
UID:event_full_day_rrule_overridden
|
||||||
|
SUMMARY:Overridden instance
|
||||||
|
END:VEVENT
|
||||||
|
|
||||||
|
END:VCALENDAR
|
||||||
@@ -512,3 +512,15 @@ permissions: RrWw""")
|
|||||||
status, event2_calendar_data = responses["/test/event2.ics"]["C:calendar-data"]
|
status, event2_calendar_data = responses["/test/event2.ics"]["C:calendar-data"]
|
||||||
assert event2_calendar_data.text
|
assert event2_calendar_data.text
|
||||||
assert "UID:c6be8b2c-3d72-453c-b698-4f25cdf1569e" in event2_calendar_data.text
|
assert "UID:c6be8b2c-3d72-453c-b698-4f25cdf1569e" in event2_calendar_data.text
|
||||||
|
|
||||||
|
def test_report_with_expand_property_all_day_event_overridden(self) -> None:
|
||||||
|
self._test_expand(
|
||||||
|
"event_full_day_rrule_overridden",
|
||||||
|
"20060101T000000Z",
|
||||||
|
"20060111T235959Z",
|
||||||
|
["RECURRENCE-ID:20060102", "RECURRENCE-ID:20060104", "RECURRENCE-ID:20060103"],
|
||||||
|
["DTSTART:20060102", "DTSTART:20060104", "DTSTART:20060110"],
|
||||||
|
["DTEND:20060103", "DTEND:20060105", "DTEND:20060111"],
|
||||||
|
ONLY_DATES,
|
||||||
|
2
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user