Пример #1
0
 def test_events_listing_ical(self):
     # Default mode is to show all events from now on.
     headers, output, request = make_fake_response(self.request)
     view = self.portal.restrictedTraverse('@@event_listing_ical')
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     self.assertTrue('Long Event' in icalstr)
Пример #2
0
 def test_events_listing_ical(self):
     # Default mode is to show all events from now on.
     headers, output, request = make_fake_response(self.request)
     view = self._listing_view(name="@@event_listing_ical")
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers["Content-Type"], "text/calendar")
     icalstr = "".join(output)
     self.assertTrue("Long Event" in icalstr)
Пример #3
0
 def test_collection_ical(self):
     """Test basic icalendar export from ATTopics.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter((self.portal.collection, request), name="ics_view")
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers["Content-Type"], "text/calendar")
     icalstr = "".join(output)
     self.assertEqual(icalstr.count("BEGIN:VEVENT"), 4)
Пример #4
0
 def test_events_listing_ical(self):
     # Default mode is to show all events from now on.
     headers, output, request = make_fake_response(self.request)
     view = self._listing_view(name='@@event_listing_ical')
     view()
     self.assertEqual(len(headers), 3)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     self.assertTrue('Content-Length' in headers)
     icalstr = b''.join(output)
     self.assertTrue(b'Long Event' in icalstr)
Пример #5
0
 def test_events_listing_ical(self):
     # Default mode is to show all events from now on.
     headers, output, request = make_fake_response(self.request)
     view = self._listing_view(name='@@event_listing_ical')
     view()
     self.assertEqual(len(headers), 3)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     self.assertTrue('Content-Length' in headers)
     icalstr = b''.join(output)
     self.assertTrue(b'Long Event' in icalstr)
Пример #6
0
 def test_collection_ical(self):
     """Test basic icalendar export from ATTopics.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter((self.portal.collection, request),
                            name='ics_view')
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
Пример #7
0
 def test_collection_ical(self):
     """Test basic icalendar export from Collections.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter(
         (self.portal.collection, request),
         name='ics_view'
     )
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
Пример #8
0
 def test_event_occurrence_ical(self):
     """A event occurrence should not conain recurrence definitions from
     it's parent.
     """
     headers, output, request = make_fake_response(self.request)
     occ = self.traverser(self.now_event, request).publishTraverse(request, "2013-05-07")
     view = getMultiAdapter((occ, request), name="ics_view")
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers["Content-Type"], "text/calendar")
     icalstr = "".join(output)
     self.assertTrue("Now Event" in icalstr)
     self.assertTrue("RRULE" not in icalstr)
Пример #9
0
 def test_collection_ical(self):
     """Test basic icalendar export from Collections.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter((self.portal.collection, request),
                            name='ics_view')
     view()
     self.assertEqual(len(headers), 3)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     self.assertTrue('Content-Length' in headers)
     if six.PY3:
         output = [i.decode('utf8') for i in output]
     icalstr = ''.join(output)
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
Пример #10
0
 def test_event_listing_ical_portal(self):
     """Test event_listing ical export. It should contain all events from
     the listing, except Occurrences. For occurrences, their original events
     are exported.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter((self.portal, request), name="event_listing_ical")
     view.mode = "all"
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers["Content-Type"], "text/calendar")
     icalstr = "".join(output)
     # No occurrences in export. Otherwise count would be 8.
     self.assertEqual(icalstr.count("BEGIN:VEVENT"), 4)
Пример #11
0
 def test_event_occurrence_ical(self):
     """A event occurrence should not conain recurrence definitions from
     it's parent.
     """
     headers, output, request = make_fake_response(self.request)
     occ = self.traverser(self.now_event,
                          request).publishTraverse(request, '2013-05-07')
     view = getMultiAdapter((occ, request), name='ics_view')
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     self.assertTrue('Now Event' in icalstr)
     self.assertTrue('RRULE' not in icalstr)
Пример #12
0
 def test_event_occurrence_ical(self):
     """A event occurrence should not conain recurrence definitions from
     it's parent.
     """
     headers, output, request = make_fake_response(self.request)
     occ = self.traverser(self.now_event, request).publishTraverse(
         request, '2013-05-07'
     )
     view = getMultiAdapter((occ, request), name='ics_view')
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     self.assertTrue('Now Event' in icalstr)
     self.assertTrue('RRULE' not in icalstr)
Пример #13
0
 def test_event_listing_ical_portal(self):
     """Test event_listing ical export. It should contain all events from
     the listing, except Occurrences. For occurrences, their original events
     are exported.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter((self.portal, request),
                            name='event_listing_ical')
     view.mode = 'all'
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     # No occurrences in export. Otherwise count would be 8.
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
Пример #14
0
 def test_event_listing_ical_portal__specific_date(self):
     """Test event_listing ical export for a specific date. The date is when
     a occurrence happens. It shouldn't contain the occurrence but the
     original event and the long lasting event.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter((self.portal, request), name="event_listing_ical")
     view.mode = "day"
     view._date = "2013-04-27"
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers["Content-Type"], "text/calendar")
     icalstr = "".join(output)
     self.assertEqual(icalstr.count("BEGIN:VEVENT"), 2)
     self.assertTrue("Past Event" in icalstr)
     self.assertTrue("Long Event" in icalstr)
Пример #15
0
 def test_collection_ical(self):
     """Test basic icalendar export from Collections.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter(
         (self.portal.collection, request),
         name='ics_view'
     )
     view()
     self.assertEqual(len(headers), 3)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     self.assertTrue('Content-Length' in headers)
     if six.PY3:
         output = [i.decode('utf8') for i in output]
     icalstr = ''.join(output)
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
Пример #16
0
    def test_event_ical(self):
        headers, output, request = make_fake_response(self.request)
        view = getMultiAdapter((self.now_event, request), name="ics_view")
        view()
        self.assertEqual(len(headers), 2)
        self.assertEqual(headers["Content-Type"], "text/calendar")
        icalstr = "".join(output)

        self.checkOrder(
            icalstr,
            "BEGIN:VCALENDAR",
            "VERSION:2.0",
            "PRODID:-//Plone.org//NONSGML plone.app.event//EN",
            "X-WR-CALNAME:Now Event",  # calendar name == event title
            "X-WR-RELCALID:",
            "X-WR-TIMEZONE:Europe/Vienna",
            "BEGIN:VEVENT",
            "SUMMARY:Now Event",
            "DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T100000",
            "DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T110000",
            "DTSTAMP;VALUE=DATE-TIME:",
            "UID:",
            "RDATE;TZID=Europe/Vienna:20130509T000000",
            "EXDATE;TZID=Europe/Vienna:20130506T000000,20140404T000000",
            "CATEGORIES:plone",
            "CATEGORIES:testing",
            "CONTACT:Auto Testdriver\\, +123456789\\, [email protected]\\, "
            "http://plone",  # continuation of line above
            " .org",  # line longer than max length spec by icalendar
            "CREATED;VALUE=DATE-TIME:",
            "LAST-MODIFIED;VALUE=DATE-TIME:",
            "LOCATION:Vienna",
            "RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1",
            "URL:http://nohost/plone/now",
            "END:VEVENT",
            "BEGIN:VTIMEZONE",
            "TZID:Europe/Vienna",
            "X-LIC-LOCATION:Europe/Vienna",
            "BEGIN:DAYLIGHT",
            "DTSTART;VALUE=DATE-TIME:20130331T030000",
            "TZNAME:CEST",
            "TZOFFSETFROM:+0100",
            "TZOFFSETTO:+0200",
            "END:DAYLIGHT",
            "END:VTIMEZONE",
            "END:VCALENDAR",
        )
Пример #17
0
    def test_event_ical(self):
        headers, output, request = make_fake_response(self.request)
        view = getMultiAdapter((self.now_event, request), name='ics_view')
        view()
        self.assertEqual(len(headers), 2)
        self.assertEqual(headers['Content-Type'], 'text/calendar')
        icalstr = ''.join(output)

        self.checkOrder(
            icalstr,
            'BEGIN:VCALENDAR',
            'VERSION:2.0',
            'PRODID:-//Plone.org//NONSGML plone.app.event//EN',
            'X-WR-CALNAME:Now Event',  # calendar name == event title
            'X-WR-RELCALID:',
            'X-WR-TIMEZONE:Europe/Vienna',
            'BEGIN:VEVENT',
            'SUMMARY:Now Event',
            'DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T100000',
            'DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T110000',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'RDATE;TZID=Europe/Vienna:20130509T000000',
            'EXDATE;TZID=Europe/Vienna:20130506T000000,20140404T000000',
            'CATEGORIES:plone',
            'CATEGORIES:testing',
            'CONTACT:Auto Testdriver\\, +123456789\\, [email protected]\\, '
            'http://plone',  # continuation of line above
            ' .org',  # line longer than max length spec by icalendar
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Vienna',
            'RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1',
            'URL:http://nohost/plone/now',
            'END:VEVENT',
            'BEGIN:VTIMEZONE',
            'TZID:Europe/Vienna',
            'X-LIC-LOCATION:Europe/Vienna',
            'BEGIN:DAYLIGHT',
            'DTSTART;VALUE=DATE-TIME:20130331T030000',
            'TZNAME:CEST',
            'TZOFFSETFROM:+0100',
            'TZOFFSETTO:+0200',
            'END:DAYLIGHT',
            'END:VTIMEZONE',
            'END:VCALENDAR')
Пример #18
0
 def test_event_listing_ical_portal__specific_date(self):
     """Test event_listing ical export for a specific date. The date is when
     a occurrence happens. It shouldn't contain the occurrence but the
     original event and the long lasting event.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter((self.portal, request),
                            name='event_listing_ical')
     view.mode = 'day'
     view._date = '2013-04-27'
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 2)
     self.assertTrue('Past Event' in icalstr)
     self.assertTrue('Long Event' in icalstr)
Пример #19
0
    def test_event_ical(self):
        headers, output, request = make_fake_response(self.request)
        view = getMultiAdapter((self.now_event, request), name='ics_view')
        view()
        self.assertEqual(len(headers), 2)
        self.assertEqual(headers['Content-Type'], 'text/calendar')
        icalstr = ''.join(output)

        self.checkOrder(
            icalstr,
            'BEGIN:VCALENDAR',
            'VERSION:2.0',
            'PRODID:-//Plone.org//NONSGML plone.app.event//EN',
            'X-WR-CALNAME:Now Event',  # calendar name == event title
            'X-WR-RELCALID:',
            'X-WR-TIMEZONE:Europe/Vienna',
            'BEGIN:VEVENT',
            'SUMMARY:Now Event',
            'DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T100000',
            'DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T110000',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'RDATE;TZID=Europe/Vienna:20130509T000000',
            'EXDATE;TZID=Europe/Vienna:20130506T000000,20140404T000000',
            'CATEGORIES:plone',
            'CATEGORIES:testing',
            'CONTACT:Auto Testdriver\\, +123456789\\, [email protected]\\, '
            'http://plone',  # continuation of line above
            ' .org',  # line longer than max length spec by icalendar
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Vienna',
            'RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1',
            'URL:http://nohost/plone/now',
            'END:VEVENT',
            'BEGIN:VTIMEZONE',
            'TZID:Europe/Vienna',
            'X-LIC-LOCATION:Europe/Vienna',
            'BEGIN:DAYLIGHT',
            'DTSTART;VALUE=DATE-TIME:20130331T030000',
            'TZNAME:CEST',
            'TZOFFSETFROM:+0100',
            'TZOFFSETTO:+0200',
            'END:DAYLIGHT',
            'END:VTIMEZONE',
            'END:VCALENDAR')
Пример #20
0
 def test_event_listing_ical_portal__specific_date(self):
     """Test event_listing ical export for a specific date. The date is when
     a occurrence happens. It shouldn't contain the occurrence but the
     original event and the long lasting event.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter(
         (self.portal, request), name='event_listing_ical'
     )
     view.mode = 'day'
     view._date = '2013-04-27'
     view()
     self.assertEqual(len(headers), 2)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 2)
     self.assertTrue('Past Event' in icalstr)
     self.assertTrue('Long Event' in icalstr)
Пример #21
0
 def test_collection_all_ical(self):
     """Test basic icalendar export from Collections, which returns not only
     events.
     """
     headers, output, request = make_fake_response(self.request)
     self.portal.collection.query = [
         {
             'i': 'portal_type',
             'o': 'plone.app.querystring.operation.selection.any',
             'v': ['Event', 'plone.app.event.dx.event', 'Page']
         },
     ]
     view = getMultiAdapter((self.portal.collection, request),
                            name='ics_view')
     view()
     self.assertEqual(len(headers), 4)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     icalstr = ''.join(output)
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
Пример #22
0
 def test_event_listing_ical_portal(self):
     """Test event_listing ical export. It should contain all events from
     the listing, except Occurrences. For occurrences, their original events
     are exported.
     """
     headers, output, request = make_fake_response(self.request)
     view = getMultiAdapter(
         (self.portal, request), name='event_listing_ical'
     )
     view.mode = 'all'
     view()
     self.assertEqual(len(headers), 3)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     self.assertTrue('Content-Length' in headers)
     if six.PY3:
         output = [i.decode('utf8') for i in output]
     icalstr = ''.join(output)
     # No occurrences in export. Otherwise count would be 8.
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
Пример #23
0
 def test_collection_all_ical(self):
     """Test basic icalendar export from Collections, which returns not only
     events.
     """
     headers, output, request = make_fake_response(self.request)
     self.portal.collection.query = [
         {'i': 'portal_type',
          'o': 'plone.app.querystring.operation.selection.any',
          'v': ['Event', 'plone.app.event.dx.event', 'Page']
          },
     ]
     view = getMultiAdapter(
         (self.portal.collection, request),
         name='ics_view'
     )
     view()
     self.assertEqual(len(headers), 3)
     self.assertEqual(headers['Content-Type'], 'text/calendar')
     self.assertTrue('Content-Length' in headers)
     if six.PY3:
         output = [i.decode('utf8') for i in output]
     icalstr = ''.join(output)
     self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
Пример #24
0
    def test_portal_ical(self):
        headers, output, request = make_fake_response(self.request)
        view = getMultiAdapter((self.portal, request), name="ics_view")
        view()
        self.assertEqual(len(headers), 2)
        self.assertEqual(headers["Content-Type"], "text/calendar")
        icalstr = "".join(output)

        # No occurrences in export. Otherwise count would be 8.
        self.assertEqual(icalstr.count("BEGIN:VEVENT"), 4)

        self.checkOrder(
            icalstr,
            "BEGIN:VCALENDAR",
            "VERSION:2.0",
            "PRODID:-//Plone.org//NONSGML plone.app.event//EN",
            "X-WR-CALNAME:Plone site",  # calendar name == plone site title
            "X-WR-TIMEZONE:Europe/Vienna",
            # whole_day event
            "BEGIN:VEVENT",
            "SUMMARY:Past Event",
            "DTSTART;VALUE=DATE:20130425",
            "DTEND;VALUE=DATE:20130426",
            "DTSTAMP;VALUE=DATE-TIME:",
            "UID:",
            "CREATED;VALUE=DATE-TIME:",
            "LAST-MODIFIED;VALUE=DATE-TIME:",
            "LOCATION:Vienna",
            "RRULE:FREQ=DAILY;COUNT=3",
            "URL:http://nohost/plone/past",
            "END:VEVENT",
            "BEGIN:VEVENT",
            "SUMMARY:Long Event",
            "DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130425T100000",
            "DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130604T100000",
            "DTSTAMP;VALUE=DATE-TIME:",
            "UID:",
            "CREATED;VALUE=DATE-TIME:",
            "LAST-MODIFIED;VALUE=DATE-TIME:",
            "LOCATION:Schaftal",
            "URL:http://nohost/plone/sub/long",
            "END:VEVENT",
            "BEGIN:VEVENT",
            "SUMMARY:Now Event",
            "DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T100000",
            "DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T110000",
            "DTSTAMP;VALUE=DATE-TIME:",
            "UID:",
            "RDATE;TZID=Europe/Vienna:20130509T000000",
            "EXDATE;TZID=Europe/Vienna:20130506T000000,20140404T000000",
            "CATEGORIES:plone",
            "CATEGORIES:testing",
            "CONTACT:Auto Testdriver\\, +123456789\\, [email protected]\\, "
            "http://plone",  # continuation of line above
            " .org",
            "CREATED;VALUE=DATE-TIME:",
            "LAST-MODIFIED;VALUE=DATE-TIME:",
            "LOCATION:Vienna",
            "RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1",
            "URL:http://nohost/plone/now",
            "END:VEVENT",
            "BEGIN:VEVENT",
            "SUMMARY:Future Event",
            "DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130515T100000",
            "DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130515T110000",
            "DTSTAMP;VALUE=DATE-TIME:",
            "UID:",
            "CREATED;VALUE=DATE-TIME:",
            "LAST-MODIFIED;VALUE=DATE-TIME:",
            "LOCATION:Graz",
            "URL:http://nohost/plone/future",
            "END:VEVENT",
            "BEGIN:VTIMEZONE",
            "TZID:Europe/Vienna",
            "X-LIC-LOCATION:Europe/Vienna",
            "BEGIN:DAYLIGHT",
            "DTSTART;VALUE=DATE-TIME:20130331T030000",
            "TZNAME:CEST",
            "TZOFFSETFROM:+0100",
            "TZOFFSETTO:+0200",
            "END:DAYLIGHT",
            "END:VTIMEZONE",
            "END:VCALENDAR",
        )
Пример #25
0
    def test_portal_ical(self):
        headers, output, request = make_fake_response(self.request)
        view = getMultiAdapter((self.portal, request), name='ics_view')
        view()
        self.assertEqual(len(headers), 2)
        self.assertEqual(headers['Content-Type'], 'text/calendar')
        icalstr = ''.join(output)

        # No occurrences in export. Otherwise count would be 8.
        self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)

        self.checkOrder(
            icalstr,
            'BEGIN:VCALENDAR',
            'VERSION:2.0',
            'PRODID:-//Plone.org//NONSGML plone.app.event//EN',
            'X-WR-TIMEZONE:Europe/Vienna',
            # whole_day event
            'BEGIN:VEVENT',
            'SUMMARY:Past Event',
            'DTSTART;VALUE=DATE:20130425',
            'DTEND;VALUE=DATE:20130426',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Vienna',
            'RRULE:FREQ=DAILY;COUNT=3',
            'URL:http://nohost/plone/past',
            'END:VEVENT',
            'BEGIN:VEVENT',
            'SUMMARY:Long Event',
            'DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130425T100000',
            'DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130604T100000',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Schaftal',
            'URL:http://nohost/plone/sub/long',
            'END:VEVENT',
            'BEGIN:VEVENT',
            'SUMMARY:Now Event',
            'DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T100000',
            'DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T110000',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'RDATE;TZID=Europe/Vienna:20130509T000000',
            'EXDATE;TZID=Europe/Vienna:20130506T000000,20140404T000000',
            'CATEGORIES:plone',
            'CATEGORIES:testing',
            'CONTACT:Auto Testdriver\\, +123456789\\, [email protected]\\, '
            'http://plone',  # continuation of line above
            ' .org',
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Vienna',
            'RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1',
            'URL:http://nohost/plone/now',
            'END:VEVENT',
            'BEGIN:VEVENT',
            'SUMMARY:Future Event',
            'DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130515T100000',
            'DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130515T110000',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Graz',
            'URL:http://nohost/plone/future',
            'END:VEVENT',
            'BEGIN:VTIMEZONE',
            'TZID:Europe/Vienna',
            'X-LIC-LOCATION:Europe/Vienna',
            'BEGIN:DAYLIGHT',
            'DTSTART;VALUE=DATE-TIME:20130331T030000',
            'TZNAME:CEST',
            'TZOFFSETFROM:+0100',
            'TZOFFSETTO:+0200',
            'END:DAYLIGHT',
            'END:VTIMEZONE',
            'END:VCALENDAR')
Пример #26
0
    def test_portal_ical(self):
        headers, output, request = make_fake_response(self.request)
        view = getMultiAdapter((self.portal, request), name='ics_view')
        view()
        self.assertEqual(len(headers), 3)
        self.assertEqual(headers['Content-Type'], 'text/calendar')
        self.assertTrue('Content-Length' in headers)
        if six.PY3:
            output = [i.decode('utf8') for i in output]
        icalstr = ''.join(output)

        # No occurrences in export. Otherwise count would be 8.
        self.assertEqual(icalstr.count('BEGIN:VEVENT'), 4)
        self.checkOrder(
            icalstr,
            'BEGIN:VCALENDAR',
            'VERSION:2.0',
            'PRODID:-//Plone.org//NONSGML plone.app.event//EN',
            'X-WR-TIMEZONE:Europe/Vienna',
            # whole_day event
            'BEGIN:VEVENT',
            'SUMMARY:Past Event',
            'DTSTART;VALUE=DATE:20130425',
            'DTEND;VALUE=DATE:20130426',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'RRULE:FREQ=DAILY;COUNT=3',
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Vienna',
            'URL:http://nohost/plone/past',
            'END:VEVENT',

            'BEGIN:VEVENT',
            'SUMMARY:Long Event',
            'DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130425T100000',
            'DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130604T100000',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Schaftal',
            'URL:http://nohost/plone/sub/long',
            'END:VEVENT',

            'BEGIN:VEVENT',
            'SUMMARY:Now Event',
            'DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T100000',
            'DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130505T110000',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1',
            'RDATE;TZID=Europe/Vienna:20130509T000000',
            'EXDATE;TZID=Europe/Vienna:20130506T000000,20140404T000000',
            'CATEGORIES:plone,testing',
            'CONTACT:Auto Testdriver\\, +123456789\\, [email protected]\\, http://plone',  # noqa
            ' .org',
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Vienna',
            'URL:http://nohost/plone/now',
            'END:VEVENT',

            'BEGIN:VEVENT',
            'SUMMARY:Future Event',
            'DTSTART;TZID=Europe/Vienna;VALUE=DATE-TIME:20130515T100000',
            'DTEND;TZID=Europe/Vienna;VALUE=DATE-TIME:20130515T110000',
            'DTSTAMP;VALUE=DATE-TIME:',
            'UID:',
            'CREATED;VALUE=DATE-TIME:',
            'LAST-MODIFIED;VALUE=DATE-TIME:',
            'LOCATION:Graz',
            'URL:http://nohost/plone/future',
            'END:VEVENT',

            'BEGIN:VTIMEZONE',
            'TZID:Europe/Vienna',
            'X-LIC-LOCATION:Europe/Vienna',
            'BEGIN:DAYLIGHT',
            'DTSTART;VALUE=DATE-TIME:20130331T030000',
            'TZNAME:CEST',
            'TZOFFSETFROM:+0100',
            'TZOFFSETTO:+0200',
            'END:DAYLIGHT',
            'END:VTIMEZONE',
            'END:VCALENDAR')