def test_invaliddates_thunderbird_monthly_bymonthday1(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'issues/ZCP9771-2.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) message.SaveChanges(0) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_MONTHLY assert rs.ulPeriod == 1 assert rs.ulPatternType == 2 assert rs.ulEndType, RS.ET_NEVER assert rs.ulDayOfMonth == 22 assert rs.ulEndDate == 0x5AE980DF assert RS.RTimeToUnixTime(rs.ulStartDate) == 1337644800 # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert method == b'PUBLISH' assert b'RRULE:FREQ=MONTHLY;BYMONTHDAY=22' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120522T170000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120522T180000' in ma
def test_invaliddates_thunderbird_monthly_bymonthday_31th( icaltomapi, mapitoical, message): # outlook will show the item every month on the last day, caldav every month with 31 days # This is a issue? ical = open(os.path.join(dir_path, 'issues/ZCP9771-4.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_MONTHLY assert rs.ulPeriod == 1 assert rs.ulPatternType == 2 assert rs.ulEndType == RS.ET_NEVER assert rs.ulDayOfMonth == 31 assert RS.RTimeToUnixTime(rs.ulStartDate) == 1335744000 assert rs.ulEndDate == 0x5AE980DF # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert method == b'PUBLISH' assert b'RRULE:FREQ=MONTHLY;BYMONTHDAY=31' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120430T160000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120430T170000' in ma
def test_weeklymultidays(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'ics/weekly_multidays.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_WEEKLY assert rs.ulPeriod == 1 assert rs.ulPatternType == 1 assert rs.ulEndType == RS.ET_NEVER assert rs.ulWeekDays == RS.WD_WEDNESDAY | RS.WD_FRIDAY # revert mapitoical.AddMessage(message, '', 0) (method, mical) = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert b'RRULE:FREQ=WEEKLY;BYDAY=WE,FR' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120127T143000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120127T150000' in ma
def test_everyotherday_countstop(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'ics/everyotherday_countstop.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_DAILY assert rs.ulPeriod == 60*24*2 assert rs.ulPatternType == 0 assert rs.ulEndType == RS.ET_NUMBER assert rs.ulOccurrenceCount == 7 assert rs.ulWeekDays == 0 # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert b'RRULE:FREQ=DAILY;COUNT=7;INTERVAL=2' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120127T143000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120127T150000' in ma
def test_yearly_datestop(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'ics/yearly_datestop.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_YEARLY assert rs.ulPeriod == 12 assert rs.ulPatternType == 2 assert rs.ulEndType == RS.ET_DATE assert rs.ulDayOfMonth == 27 # revert mapitoical.AddMessage(message, '', 0) (method, mical) = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert b'RRULE:FREQ=YEARLY;UNTIL=20140127T143000;BYMONTHDAY=27;BYMONTH=1' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120127T143000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120127T150000' in ma
def test_daily(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'ics/daily.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_DAILY assert rs.ulPeriod == 60*24 assert rs.ulPatternType == 0 assert rs.ulEndType == RS.ET_NEVER assert RS.RTimeToUnixTime(rs.ulStartDate) == 1327622400 # @todo, less hard-coded? start_of_day(DTSTART) assert rs.ulEndDate == 0x5AE980DF # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert method == b'PUBLISH' assert b'RRULE:FREQ=DAILY' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120127T143000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120127T150000' in ma
def test_monthly_31th(icaltomapi, mapitoical, message): # outlook will show the item every month on the last day, caldav every month with 31 days ical = open(os.path.join(dir_path, 'ics/monthly_31th.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_MONTHLY assert rs.ulPeriod == 1 assert rs.ulPatternType == 2 assert rs.ulEndType == RS.ET_NEVER assert rs.ulDayOfMonth == 31 # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert b'RRULE:FREQ=MONTHLY;BYMONTHDAY=31' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120531T150000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120531T160000' in ma
def test_monthly(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'ics/monthly.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency, RS.RF_MONTHLY assert rs.ulPeriod == 1 assert rs.ulPatternType == 2 assert rs.ulEndType == RS.ET_NEVER assert rs.ulDayOfMonth == 27 # revert mapitoical.AddMessage(message, '', 0) (method, mical) = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') # BYMONTHDAY=27 is being added assert b'RRULE:FREQ=MONTHLY;BYMONTHDAY=27' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120127T143000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120127T150000' in ma
def test_double_occurencehit_1(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'issues/ZCP9143.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_DAILY assert rs.ulPeriod == 60 * 24 assert rs.ulPatternType == 0 assert rs.ulEndType == RS.ET_DATE assert rs.ulEndDate == 216250560 # start of day in UNTIL field, in RTime .. less hardcoded? # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert method == b'PUBLISH' # we write the UNTIL as ((end date + local start time) => GMT), not ((end date + local day end time - 1s) => GMT) assert b'RRULE:FREQ=DAILY;UNTIL=20120301T120000' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120125T120000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120125T130000' in ma
def test_invaliddates_thunderbird_yearly_byday_bymonth6(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'issues/ZCP9771-17.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) message.SaveChanges(0) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_YEARLY assert rs.ulPeriod == 12 assert rs.ulPatternType == 3 assert rs.ulEndType == RS.ET_NEVER assert RS.RTimeToUnixTime(rs.ulStartDate) == 1369785600 assert rs.ulEndDate == 0x5AE980DF # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert method == b'PUBLISH' assert b'RRULE:FREQ=YEARLY;BYDAY=-1WE;BYMONTH=5' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20130529T150000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20130529T160000' in ma
def test_everyotherweek_datestop(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'ics/everyotherweek_datestop.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_WEEKLY assert rs.ulPeriod == 2 assert rs.ulPatternType == 1 assert rs.ulEndType == RS.ET_DATE assert rs.ulEndDate == 216322560 # recalculated start of day in UNTIL field, in RTime assert rs.ulWeekDays == RS.WD_FRIDAY # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') # also contains the BYDAY=FR like above, recalculated to last occurrence: 20 april 2012 assert b'RRULE:FREQ=WEEKLY;UNTIL=20120420T143000;INTERVAL=2;BYDAY=FR' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120127T143000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120127T150000' in ma
def test_monthly_bysetpos_byday(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'issues/ZCP10916.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) message.SaveChanges(0) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_MONTHLY assert rs.ulPeriod == 1 assert rs.ulPatternType == 3 assert rs.ulWeekNumber == 1 assert rs.ulEndType, RS.ET_NEVER assert RS.RTimeToUnixTime(rs.ulStartDate) == 1338508800 assert rs.ulEndDate == 0x5AE980DF # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert method == b'PUBLISH' assert b'RRULE:FREQ=MONTHLY;BYMONTHDAY=1' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120601T150000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120601T160000' in ma
def test_invaliddates_thunderbird_monthly_byday3(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'issues/ZCP9771-7.ics'), 'rb').read() blob = assert_get_glob_from_ical(icaltomapi, message, ical, 1) message.SaveChanges(0) rs = getrecurrencestate(blob) assert rs.ulRecurFrequency == RS.RF_MONTHLY assert rs.ulPeriod == 1 assert rs.ulPatternType == 3 assert rs.ulWeekNumber == 4 assert rs.ulEndType == RS.ET_NUMBER assert RS.RTimeToUnixTime(rs.ulStartDate) == 1337817600 assert RS.RTimeToUnixTime(rs.ulEndDate) == 1343260800 # revert mapitoical.AddMessage(message, '', 0) method, mical = mapitoical.Finalize(icalmapi.M2IC_NO_VTIMEZONE) ma = mical.split(b'\r\n') assert method == b'PUBLISH' assert b'RRULE:FREQ=MONTHLY;COUNT=3;BYDAY=4TH' in ma assert b'DTSTART;TZID=Europe/Amsterdam:20120524T200000' in ma assert b'DTEND;TZID=Europe/Amsterdam:20120524T210000' in ma
def test_invalid_timezone(icaltomapi, mapitoical, message): ical = open(os.path.join(dir_path, 'issues/invalid_timezone.ics'), 'rb').read() assert_get_glob_from_ical(icaltomapi, message, ical, 1) assert icaltomapi.GetNumInvalidProperties() == 1 assert icaltomapi.GetNumInvalidComponents() == 1