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))
Пример #6
0
 def set_timezone_name(self, name):
     self._timezone = get_timezone(name)
     self._timezone_name = name