kopia lustrzana https://github.com/collective/icalendar
Merge pull request #522 from semiprime/issue518
Fix for issue 518 (to_ical() with RRULE BYDAY values>=10)pull/523/head
commit
d2daec8a4c
|
@ -18,6 +18,7 @@ New features:
|
|||
|
||||
Bug fixes:
|
||||
|
||||
- to_ical() now accepts RRULE BYDAY values>=10 #518
|
||||
- ...
|
||||
|
||||
|
||||
|
|
|
@ -68,6 +68,7 @@ icalendar contributors
|
|||
- Abe Hanoka <abe@habet.dev>
|
||||
- `Natasha Mattson <https://github.com/natashamm`_
|
||||
- `NikEasY <https://github.com/NikEasY>`_
|
||||
- Matt Lewis <git@semiprime.com>
|
||||
|
||||
Find out who contributed::
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ import time as _time
|
|||
DURATION_REGEX = re.compile(r'([-+]?)P(?:(\d+)W)?(?:(\d+)D)?'
|
||||
r'(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?)?$')
|
||||
|
||||
WEEKDAY_RULE = re.compile(r'(?P<signal>[+-]?)(?P<relative>[\d]?)'
|
||||
WEEKDAY_RULE = re.compile(r'(?P<signal>[+-]?)(?P<relative>[\d]{0,2})'
|
||||
r'(?P<weekday>[\w]{2})$')
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from datetime import datetime
|
||||
from icalendar import Event
|
||||
from datetime import date, datetime
|
||||
|
||||
import pytest
|
||||
|
||||
|
@ -40,3 +41,34 @@ def test_list_exdate_to_ical_is_inverse_of_from_ical(events, i, exception_date,
|
|||
assert exdate[i].dts[0].dt == in_timezone(exception_date, 'Europe/Vienna')
|
||||
assert exdate[i].to_ical() == exception_date_ics
|
||||
|
||||
@pytest.mark.parametrize('freq, byday, dtstart, expected', [
|
||||
# Test some YEARLY BYDAY repeats
|
||||
('YEARLY', '1SU', date(2016,1,3), # 1st Sunday in year
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event YEARLY 1SU\r\nDTSTART;VALUE=DATE:20160103\r\nRRULE:FREQ=YEARLY;BYDAY=1SU\r\nEND:VEVENT\r\n'),
|
||||
('YEARLY', '53MO', date(1984,12,31), # 53rd Monday in (leap) year
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event YEARLY 53MO\r\nDTSTART;VALUE=DATE:19841231\r\nRRULE:FREQ=YEARLY;BYDAY=53MO\r\nEND:VEVENT\r\n'),
|
||||
('YEARLY', '-1TU', date(1999,12,28), # Last Tuesday in year
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event YEARLY -1TU\r\nDTSTART;VALUE=DATE:19991228\r\nRRULE:FREQ=YEARLY;BYDAY=-1TU\r\nEND:VEVENT\r\n'),
|
||||
('YEARLY', '-17WE', date(2000,9,6), # 17th-to-last Wednesday in year
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event YEARLY -17WE\r\nDTSTART;VALUE=DATE:20000906\r\nRRULE:FREQ=YEARLY;BYDAY=-17WE\r\nEND:VEVENT\r\n'),
|
||||
# Test some MONTHLY BYDAY repeats
|
||||
('MONTHLY', '2TH', date(2003,4,10), # 2nd Thursday in month
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event MONTHLY 2TH\r\nDTSTART;VALUE=DATE:20030410\r\nRRULE:FREQ=MONTHLY;BYDAY=2TH\r\nEND:VEVENT\r\n'),
|
||||
('MONTHLY', '-3FR', date(2017,5,12), # 3rd-to-last Friday in month
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event MONTHLY -3FR\r\nDTSTART;VALUE=DATE:20170512\r\nRRULE:FREQ=MONTHLY;BYDAY=-3FR\r\nEND:VEVENT\r\n'),
|
||||
('MONTHLY', '-5SA', date(2053,11,1), # 5th-to-last Saturday in month
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event MONTHLY -5SA\r\nDTSTART;VALUE=DATE:20531101\r\nRRULE:FREQ=MONTHLY;BYDAY=-5SA\r\nEND:VEVENT\r\n'),
|
||||
# Specifically test examples from the report of Issue #518
|
||||
# https://github.com/collective/icalendar/issues/518
|
||||
('YEARLY', '9MO', date(2023,2,27), # 9th Monday in year
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event YEARLY 9MO\r\nDTSTART;VALUE=DATE:20230227\r\nRRULE:FREQ=YEARLY;BYDAY=9MO\r\nEND:VEVENT\r\n'),
|
||||
('YEARLY', '10MO', date(2023,3,6), # 10th Monday in year
|
||||
b'BEGIN:VEVENT\r\nSUMMARY:Event YEARLY 10MO\r\nDTSTART;VALUE=DATE:20230306\r\nRRULE:FREQ=YEARLY;BYDAY=10MO\r\nEND:VEVENT\r\n'),
|
||||
])
|
||||
def test_byday_to_ical(freq, byday, dtstart, expected):
|
||||
'Test the BYDAY rule is correctly processed by to_ical().'
|
||||
event = Event()
|
||||
event.add('SUMMARY', ' '.join(['Event', freq, byday]))
|
||||
event.add('DTSTART', dtstart)
|
||||
event.add('RRULE', {'FREQ':[freq], 'BYDAY':byday})
|
||||
assert event.to_ical() == expected
|
||||
|
|
Ładowanie…
Reference in New Issue