def test_agenda_item_add_form(self): with self.layer.get_web_browser(smi_settings) as browser: browser.login('manager') browser.options.handle_errors = False browser.open('/root/edit#adding/Silva Agenda Item!/news') form = browser.get_form('addform') self.assertTrue(form) form.get_control('addform.field.id').value = 'event' form.get_control('addform.field.title').value = 'Event' form.get_control('addform.field.timezone_name').value = 'Europe/Paris' form.get_control('addform.field.start_datetime.day').value = '01' form.get_control('addform.field.start_datetime.month').value = '09' form.get_control('addform.field.start_datetime.year').value = '2010' form.get_control('addform.field.start_datetime.hour').value = '10' form.get_control('addform.field.start_datetime.min').value = '20' form.get_control('addform.field.subjects').value = ['generic'] form.get_control('addform.field.target_audiences').value = ['all'] form.get_control('addform.action.save_edit').submit() item = getattr(self.root.news, 'event', False) self.assertTrue(item) version = item.get_editable() self.assertTrue(version) self.assertEquals('event', item.id) self.assertEquals('Event', version.get_title()) self.assertEquals('Europe/Paris', version.get_timezone_name()) self.assertEquals([u'generic'], version.get_subjects()) self.assertEquals([u'all'], version.get_target_audiences()) self.assertEquals( datetime(2010, 9, 1, 10, 20, 0, tzinfo=get_timezone('Europe/Paris')), version.get_start_datetime())
def test_occurrence_with_recurrence(self): dt = datetime(2010, 9, 10, 10, 0) # every two weeks occurrence = AgendaItemOccurrence( timezone_name='Europe/Amsterdam', start_datetime=dt, end_datetime=dt + relativedelta(hours=+2), recurrence='FREQ=WEEKLY;INTERVAL=2;BYDAY=FR', end_recurrence_datetime=dt + relativedelta(months=+1)) recurrence = occurrence.get_rrule() self.assertNotEquals(recurrence, None) tz = get_timezone('Europe/Amsterdam') self.assertEquals( [datetime(2010, 9, 10, 10, 0, tzinfo=tz), datetime(2010, 9, 24, 10, 0, tzinfo=tz), datetime(2010, 10, 8, 10, 0, tzinfo=tz)], list(recurrence)) calendar_date = occurrence.get_calendar_datetime() ranges = calendar_date.get_datetime_ranges() self.assertEquals( [(datetime(2010, 9, 10, 10, 0, tzinfo=tz), datetime(2010, 9, 10, 12, 0, tzinfo=tz)), (datetime(2010, 9, 24, 10, 0, tzinfo=tz), datetime(2010, 9, 24, 12, 0, tzinfo=tz)), (datetime(2010, 10, 8, 10, 0, tzinfo=tz), datetime(2010, 10, 8, 12, 0, tzinfo=tz))], ranges)
def test_catalog(self): dt = datetime(2010, 9, 10, 10, 0) # every two weeks occurrence = AgendaItemOccurrence( timezone_name='Europe/Amsterdam', start_datetime=dt, end_datetime=dt + relativedelta(hours=+2), recurrence='FREQ=WEEKLY;INTERVAL=2;BYDAY=FR', end_recurrence_datetime=dt + relativedelta(months=+1)) # last for one month recurrence = occurrence.get_rrule() self.assertNotEquals(recurrence, None) factory = self.root.manage_addProduct['silva.app.news'] factory.manage_addAgendaItem('event', 'Event') version = self.root.event.get_editable() version.set_occurrences([occurrence]) self.root.event.set_unapproved_version_publication_datetime(DateTime()) self.root.event.approve_version() catalog = getUtility(ICatalogService) tz = get_timezone('Europe/Amsterdam') start = datetime_to_unixtimestamp( datetime(2010, 9, 10, 0, 0, tzinfo=tz)) end = datetime_to_unixtimestamp( datetime(2010, 9, 10, 23, 59, tzinfo=tz)) def search(): return map(lambda x: x.getObject(), catalog({'timestamp_ranges': [start, end]})) self.assertEquals([version], search()) start = datetime_to_unixtimestamp( datetime(2010, 9, 24, 10, 0, tzinfo=tz)) end = datetime_to_unixtimestamp( datetime(2010, 9, 24, 12, 0, tzinfo=tz)) self.assertEquals([version], search()) start = datetime_to_unixtimestamp( datetime(2010, 10, 8, 11, 0, tzinfo=tz)) end = datetime_to_unixtimestamp( datetime(2010, 10, 8, 13, 0, tzinfo=tz)) self.assertEquals([version], search())
def test_get_item_by_date(self): """Test get_items_by_date and get_items_by_date_range. """ viewer = self.root.viewer timezone = get_timezone('Europe/Amsterdam') self.assertEquals( [b.getPath() for b in viewer.get_items_by_date(11, 2010)], ['/root/news/end_after_month/0', '/root/news/within_month/0', '/root/news/start_before_month/0', '/root/news/over_month/0']) self.assertEquals( [b.getPath() for b in viewer.get_items_by_date_range( datetime(2010, 11, 1, 00, 00, tzinfo=timezone), datetime(2010, 11, 30, 23, 59, 59, tzinfo=timezone) )], ['/root/news/end_after_month/0', '/root/news/within_month/0', '/root/news/start_before_month/0', '/root/news/over_month/0'])
def setUp(self): super(AgendaViewerWithItemsTestCase, self).setUp() timezone = get_timezone('Europe/Amsterdam') factory = self.root.manage_addProduct['silva.app.news'] factory.manage_addAgendaFilter('filter', 'Agenda Filter') factory.manage_addAgendaViewer('viewer', 'Agenda Viewer') factory.manage_addNewsPublication('news', 'News Publication') self.root.filter.set_sources([self.root.news]) self.root.viewer.set_filters([self.root.filter]) self.root.viewer.set_timezone_name('Europe/Amsterdam') self.add_published_agenda_item( self.root.news, 'start_before_month', 'This agenda item starts before the month and ends at the' 'beginning of the month', datetime(2010, 10, 23, 12, 20, tzinfo=timezone), datetime(2010, 11, 2, 12, 00, tzinfo=timezone)) self.add_published_agenda_item( self.root.news, 'end_after_month', 'This agenda item ends before after the month ends', datetime(2010, 11, 23, 12, 20, tzinfo=timezone), datetime(2010, 12, 2, 12, 00, tzinfo=timezone)) self.add_published_agenda_item( self.root.news, 'out_of_range', 'This agenda item is not found it is out of range', datetime(2010, 10, 23, 12, 20, tzinfo=timezone), datetime(2010, 10, 30, 12, 00, tzinfo=timezone)) self.add_published_agenda_item( self.root.news, 'over_month', 'This agenda item starts before month starts' 'and ends after month ends', datetime(2010, 10, 23, 12, 20, tzinfo=timezone), datetime(2010, 12, 3, 02, 00, tzinfo=timezone))
def set_timezone_name(self, name): self._timezone = get_timezone(name) self._timezone_name = name