def testRecurrenceEventsHourly(self): # create an hourly recurring event, starting 1 hour and 58 minutes ago, # and lasting an hour now = _now() now = now.replace(microsecond=0) start = now - timedelta(minutes=118) end = now - timedelta(minutes=58) rrules = ["FREQ=HOURLY;WKST=MO", ] self.debug('now is %s', str(now)) self.debug('rrule starts at %s', str(start)) cal = Calendar() cal.addEvent(Event('uid', start, end, "event1", rrules=rrules)) # check active instances now eis = cal.getActiveEventInstances() self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, "event1", rrules, None) self.assertEquals(eis[0].start, now - timedelta(hours=1) + timedelta(minutes=2)) self.assertEquals(eis[0].end, now + timedelta(minutes=2)) # check active instances 1 hour later eis = cal.getActiveEventInstances(now + timedelta(hours=1)) self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, "event1", rrules, None) self.assertEquals(eis[0].start, now + timedelta(minutes=2)) self.assertEquals(eis[0].end, now + timedelta(minutes=2) + timedelta(hours=1))
def testRecurrenceEventsOverMidnight(self): """ Test weekly recurrence rules that starts on one day and spawns to the day after, even though they were not planned for the next day. """ def yesterdayDayOfTheWeek(now): yesterday = now - timedelta(days=1) day = calendar.weekday(yesterday.year, yesterday.month, yesterday.day) return _dayOfTheWeek[day] now = _now().replace(microsecond=0) start = now - timedelta(days=1) - timedelta(weeks=1) end = now + timedelta(hours=1) - timedelta(weeks=1) rrules = [ "FREQ=WEEKLY;BYDAY=" + yesterdayDayOfTheWeek(now) + ";WKST=MO", ] cal = Calendar() cal.addEvent(Event('uid', start, end, 'content', rrules=rrules)) eis = cal.getActiveEventInstances() self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, 'content', rrules, None)
def testRecurrenceEventsHourly(self): # create an hourly recurring event, starting 1 hour and 58 minutes ago, # and lasting an hour now = _now() now = now.replace(microsecond=0) start = now - timedelta(minutes=118) end = now - timedelta(minutes=58) rrules = [ "FREQ=HOURLY;WKST=MO", ] self.debug('now is %s', str(now)) self.debug('rrule starts at %s', str(start)) cal = Calendar() cal.addEvent(Event('uid', start, end, "event1", rrules=rrules)) # check active instances now eis = cal.getActiveEventInstances() self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, "event1", rrules, None) self.assertEquals(eis[0].start, now - timedelta(hours=1) + timedelta(minutes=2)) self.assertEquals(eis[0].end, now + timedelta(minutes=2)) # check active instances 1 hour later eis = cal.getActiveEventInstances(now + timedelta(hours=1)) self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, "event1", rrules, None) self.assertEquals(eis[0].start, now + timedelta(minutes=2)) self.assertEquals(eis[0].end, now + timedelta(minutes=2) + timedelta(hours=1))
def testRecurrenceEventsDaily(self): # create a daily recurring event, starting 1 hour ago, # and lasting two hours now = _now() now = now.replace(microsecond=0) start = now - timedelta(hours=1) end = now + timedelta(hours=1) rrules = ["FREQ=DAILY;WKST=MO"] self.debug("now is %s", str(now)) self.debug("rrule starts at %s", str(start)) cal = Calendar() cal.addEvent(Event("uid", start, end, "event1", rrules=rrules)) # check active instances now eis = cal.getActiveEventInstances() self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, "event1", rrules, None) self.assertEquals(eis[0].start, now - timedelta(hours=1)) self.assertEquals(eis[0].end, now + timedelta(hours=1)) # check active instances 1 day later eis = cal.getActiveEventInstances(now + timedelta(days=1)) self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, "event1", rrules, None) self.assertEquals(eis[0].start, now + timedelta(hours=23)) self.assertEquals(eis[0].end, now + timedelta(hours=25))
def testCurrentEventsDoNotStartLaterThanTomorrow(self): now = _now() start = now + timedelta(days=2) end = now + timedelta(days=3) cal = Calendar() cal.addEvent(Event('uid', start, end, 'content')) self.failIf(cal.getActiveEventInstances())
def testCurrentEventsDoNotEndBeforeNow(self): now = _now() start = now - timedelta(hours=2) end = now - timedelta(hours=1) cal = Calendar() cal.addEvent(Event('uid', start, end, 'content')) self.failIf(cal.getActiveEventInstances())
def testCurrentEventsDoNotStartLaterThanTomorrow(self): now = _now() start = now + timedelta(days=2) end = now + timedelta(days=3) cal = Calendar() cal.addEvent(Event('uid', start, end, 'content')) self.failIf(cal.getActiveEventInstances())
def testCurrentEventsDoNotEndBeforeNow(self): now = _now() start = now - timedelta(hours=2) end = now - timedelta(hours=1) cal = Calendar() cal.addEvent(Event('uid', start, end, 'content')) self.failIf(cal.getActiveEventInstances())
def testOverMidnight(self): now = _now() start = now - timedelta(days=1) end = now + timedelta(hours=1) cal = Calendar() cal.addEvent(Event("uid", start, end, "content")) eis = cal.getActiveEventInstances() self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, "content", None, None)
def testOverMidnight(self): now = _now() start = now - timedelta(days=1) end = now + timedelta(hours=1) cal = Calendar() cal.addEvent(Event('uid', start, end, 'content')) eis = cal.getActiveEventInstances() self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, 'content', None, None)
def testRecurrenceEventsWhereExDateIsNotStartDate(self): """ Recurrence rules that have exceptions. """ now = _now() now = now.replace(microsecond=0) # recurring adjustments lose precision start = now - timedelta(minutes=61) end = now - timedelta(minutes=1) exdates = [start + timedelta(hours=1)] rrules = ["FREQ=HOURLY;INTERVAL=1;COUNT=5"] cal = Calendar() cal.addEvent(Event("uid", start, end, "content", rrules=rrules, exdates=exdates)) self.failIf(cal.getActiveEventInstances())
def testRecurrenceEventsWhereExDateIsNotStartDate(self): """ Recurrence rules that have exceptions. """ now = _now() now = now.replace( microsecond=0) # recurring adjustments lose precision start = now - timedelta(minutes=61) end = now - timedelta(minutes=1) exdates = [start + timedelta(hours=1)] rrules = [ "FREQ=HOURLY;INTERVAL=1;COUNT=5", ] cal = Calendar() cal.addEvent( Event('uid', start, end, 'content', rrules=rrules, exdates=exdates)) self.failIf(cal.getActiveEventInstances())
def testRecurrenceEventsOverMidnight(self): """ Test weekly recurrence rules that starts on one day and spawns to the day after, even though they were not planned for the next day. """ def yesterdayDayOfTheWeek(now): yesterday = now - timedelta(days=1) day = calendar.weekday(yesterday.year, yesterday.month, yesterday.day) return _dayOfTheWeek[day] now = _now().replace(microsecond=0) start = now - timedelta(days=1) - timedelta(weeks=1) end = now + timedelta(hours=1) - timedelta(weeks=1) rrules = [ "FREQ=WEEKLY;BYDAY=" + yesterdayDayOfTheWeek(now) + ";WKST=MO", ] cal = Calendar() cal.addEvent(Event('uid', start, end, 'content', rrules=rrules)) eis = cal.getActiveEventInstances() self.assertEquals(len(eis), 1) self.assertEventAttribsEqual(eis[0].event, start, end, 'content', rrules, None)