Changeset View
Standalone View
tests/unit/test-003-event.py
Show First 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | |||||
TRANSP:TRANSPARENT | TRANSP:TRANSPARENT | ||||
PRIORITY:2 | PRIORITY:2 | ||||
SEQUENCE:3 | SEQUENCE:3 | ||||
STATUS:CANCELLED | STATUS:CANCELLED | ||||
ORGANIZER;CN=Doe\, John:mailto:john.doe@example.org | ORGANIZER;CN=Doe\, John:mailto:john.doe@example.org | ||||
END:VEVENT | END:VEVENT | ||||
""" | """ | ||||
ical_event_rdate = """ | |||||
BEGIN:VEVENT | |||||
UID:7a35527d-f783-4b58-b404-b1389bd2fc57 | |||||
DTSTAMP;VALUE=DATE-TIME:20140407T122311Z | |||||
CREATED;VALUE=DATE-TIME:20140407T122245Z | |||||
LAST-MODIFIED;VALUE=DATE-TIME:20140407T122311Z | |||||
DTSTART;TZID=Europe/Zurich;VALUE=DATE-TIME:20140523T110000 | |||||
DURATION:PT1H30M0S | |||||
RDATE;TZID=Europe/Zurich;VALUE=DATE-TIME:20140530T110000 | |||||
RDATE;TZID=Europe/Zurich;VALUE=DATE-TIME:20140620T110000 | |||||
SUMMARY:Summary | |||||
LOCATION:Location | |||||
DESCRIPTION:Description | |||||
SEQUENCE:2 | |||||
CLASS:PUBLIC | |||||
ORGANIZER;CN=Doe\, John:mailto:john.doe@example.org | |||||
END:VEVENT | |||||
""" | |||||
xml_event = """ | xml_event = """ | ||||
<icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0"> | <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0"> | ||||
<vcalendar> | <vcalendar> | ||||
<properties> | <properties> | ||||
<prodid> | <prodid> | ||||
<text>Libkolabxml-1.1</text> | <text>Libkolabxml-1.1</text> | ||||
</prodid> | </prodid> | ||||
<version> | <version> | ||||
▲ Show 20 Lines • Show All 227 Lines • ▼ Show 20 Lines | <components> | ||||
</attendee> | </attendee> | ||||
</properties> | </properties> | ||||
</vevent> | </vevent> | ||||
</components> | </components> | ||||
</vcalendar> | </vcalendar> | ||||
</icalendar> | </icalendar> | ||||
""" | """ | ||||
class TestEventXML(unittest.TestCase): | class TestEventXML(unittest.TestCase): | ||||
Lint: PEP8 E302: expected 2 blank lines, found 1 | |||||
event = Event() | event = Event() | ||||
@classmethod | @classmethod | ||||
def setUp(self): | def setUp(self): | ||||
""" Compatibility for twisted.trial.unittest | """ Compatibility for twisted.trial.unittest | ||||
""" | """ | ||||
self.setup_class() | self.setup_class() | ||||
@classmethod | @classmethod | ||||
def setup_class(self, *args, **kw): | def setup_class(self, *args, **kw): | ||||
# set language to default | # set language to default | ||||
pykolab.translate.setUserLanguage('en_US') | pykolab.translate.setUserLanguage('en_US') | ||||
def assertIsInstance(self, _value, _type, _msg=None): | def assertIsInstance(self, _value, _type, _msg=None): | ||||
if hasattr(unittest.TestCase, 'assertIsInstance'): | if hasattr(unittest.TestCase, 'assertIsInstance'): | ||||
return unittest.TestCase.assertIsInstance(self, _value, _type, _msg) | return unittest.TestCase.assertIsInstance(self, _value, _type, _msg) | ||||
Lint: PEP8 E501 line too long (80 > 79 characters) Lint: PEP8 E501: line too long (80 > 79 characters) | |||||
else: | else: | ||||
if (type(_value)) == _type: | if (type(_value)) == _type: | ||||
return True | return True | ||||
else: | else: | ||||
if not _msg == None: | if not _msg == None: | ||||
Lint: PEP8 E711 comparison to None should be 'if cond is None:' Lint: PEP8 E711: comparison to None should be 'if cond is None:' | |||||
raise AssertionError, "%s != %s: %r" % (type(_value), _type, _msg) | raise AssertionError, "%s != %s: %r" % (type(_value), _type, _msg) | ||||
Lint: PEP8 E501 line too long (86 > 79 characters) Lint: PEP8 E501: line too long (86 > 79 characters) | |||||
else: | else: | ||||
raise AssertionError, "%s != %s" % (type(_value), _type) | raise AssertionError, "%s != %s" % (type(_value), _type) | ||||
def test_000_no_start_date(self): | def test_000_no_start_date(self): | ||||
self.assertRaises(EventIntegrityError, self.event.__str__) | self.assertRaises(EventIntegrityError, self.event.__str__) | ||||
def test_001_minimal(self): | def test_001_minimal(self): | ||||
self.event.set_start(datetime.datetime.now(pytz.timezone("Europe/London"))) | self.event.set_start(datetime.datetime.now(pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (83 > 79 characters) Lint: PEP8 E501: line too long (83 > 79 characters) | |||||
self.assertIsInstance(self.event.get_start(), datetime.datetime) | self.assertIsInstance(self.event.get_start(), datetime.datetime) | ||||
self.assertIsInstance(self.event.__str__(), str) | self.assertIsInstance(self.event.__str__(), str) | ||||
def test_002_attendees_list(self): | def test_002_attendees_list(self): | ||||
self.assertIsInstance(self.event.get_attendees(), list) | self.assertIsInstance(self.event.get_attendees(), list) | ||||
def test_003_attendees_no_default(self): | def test_003_attendees_no_default(self): | ||||
self.assertEqual(len(self.event.get_attendees()), 0) | self.assertEqual(len(self.event.get_attendees()), 0) | ||||
def test_004_attendee_add(self): | def test_004_attendee_add(self): | ||||
self.event.add_attendee("john@doe.org") | self.event.add_attendee("john@doe.org") | ||||
self.assertIsInstance(self.event.get_attendees(), list) | self.assertIsInstance(self.event.get_attendees(), list) | ||||
self.assertEqual(len(self.event.get_attendees()), 1) | self.assertEqual(len(self.event.get_attendees()), 1) | ||||
def test_005_attendee_add_name_and_props(self): | def test_005_attendee_add_name_and_props(self): | ||||
self.event.add_attendee("jane@doe.org", "Doe, Jane", role="OPT-PARTICIPANT", cutype="RESOURCE") | self.event.add_attendee("jane@doe.org", "Doe, Jane", role="OPT-PARTICIPANT", cutype="RESOURCE") | ||||
Lint: PEP8 E501 line too long (103 > 79 characters) Lint: PEP8 E501: line too long (103 > 79 characters) | |||||
self.assertIsInstance(self.event.get_attendees(), list) | self.assertIsInstance(self.event.get_attendees(), list) | ||||
self.assertEqual(len(self.event.get_attendees()), 2) | self.assertEqual(len(self.event.get_attendees()), 2) | ||||
def test_006_get_attendees(self): | def test_006_get_attendees(self): | ||||
self.assertEqual([x.get_email() for x in self.event.get_attendees()], ["john@doe.org", "jane@doe.org"]) | self.assertEqual([x.get_email() for x in self.event.get_attendees()], ["john@doe.org", "jane@doe.org"]) | ||||
Lint: PEP8 E501 line too long (111 > 79 characters) Lint: PEP8 E501: line too long (111 > 79 characters) | |||||
def test_007_get_attendee_by_email(self): | def test_007_get_attendee_by_email(self): | ||||
self.assertIsInstance(self.event.get_attendee_by_email("jane@doe.org"), Attendee) | self.assertIsInstance(self.event.get_attendee_by_email("jane@doe.org"), Attendee) | ||||
Lint: PEP8 E501 line too long (89 > 79 characters) Lint: PEP8 E501: line too long (89 > 79 characters) | |||||
self.assertIsInstance(self.event.get_attendee("jane@doe.org"), Attendee) | self.assertIsInstance(self.event.get_attendee("jane@doe.org"), Attendee) | ||||
Lint: PEP8 E501 line too long (80 > 79 characters) Lint: PEP8 E501: line too long (80 > 79 characters) | |||||
def test_007_get_attendee_props(self): | def test_007_get_attendee_props(self): | ||||
self.assertEqual(self.event.get_attendee("jane@doe.org").get_cutype(), kolabformat.CutypeResource) | self.assertEqual(self.event.get_attendee("jane@doe.org").get_cutype(), kolabformat.CutypeResource) | ||||
Lint: PEP8 E501 line too long (106 > 79 characters) Lint: PEP8 E501: line too long (106 > 79 characters) | |||||
self.assertEqual(self.event.get_attendee("jane@doe.org").get_role(), kolabformat.Optional) | self.assertEqual(self.event.get_attendee("jane@doe.org").get_role(), kolabformat.Optional) | ||||
Lint: PEP8 E501 line too long (98 > 79 characters) Lint: PEP8 E501: line too long (98 > 79 characters) | |||||
def test_007_get_nonexistent_attendee_by_email(self): | def test_007_get_nonexistent_attendee_by_email(self): | ||||
self.assertRaises(ValueError, self.event.get_attendee_by_email, "nosuchattendee@invalid.domain") | self.assertRaises(ValueError, self.event.get_attendee_by_email, "nosuchattendee@invalid.domain") | ||||
Lint: PEP8 E501 line too long (104 > 79 characters) Lint: PEP8 E501: line too long (104 > 79 characters) | |||||
self.assertRaises(ValueError, self.event.get_attendee, "nosuchattendee@invalid.domain") | self.assertRaises(ValueError, self.event.get_attendee, "nosuchattendee@invalid.domain") | ||||
Lint: PEP8 E501 line too long (95 > 79 characters) Lint: PEP8 E501: line too long (95 > 79 characters) | |||||
def test_008_get_attendee_by_name(self): | def test_008_get_attendee_by_name(self): | ||||
self.assertIsInstance(self.event.get_attendee_by_name("Doe, Jane"), Attendee) | self.assertIsInstance(self.event.get_attendee_by_name("Doe, Jane"), Attendee) | ||||
Lint: PEP8 E501 line too long (85 > 79 characters) Lint: PEP8 E501: line too long (85 > 79 characters) | |||||
self.assertIsInstance(self.event.get_attendee("Doe, Jane"), Attendee) | self.assertIsInstance(self.event.get_attendee("Doe, Jane"), Attendee) | ||||
def test_008_get_nonexistent_attendee_by_name(self): | def test_008_get_nonexistent_attendee_by_name(self): | ||||
self.assertRaises(ValueError, self.event.get_attendee_by_name, "Houdini, Harry") | self.assertRaises(ValueError, self.event.get_attendee_by_name, "Houdini, Harry") | ||||
Lint: PEP8 E501 line too long (88 > 79 characters) Lint: PEP8 E501: line too long (88 > 79 characters) | |||||
self.assertRaises(ValueError, self.event.get_attendee, "Houdini, Harry") | self.assertRaises(ValueError, self.event.get_attendee, "Houdini, Harry") | ||||
Lint: PEP8 E501 line too long (80 > 79 characters) Lint: PEP8 E501: line too long (80 > 79 characters) | |||||
def test_009_invalid_participant_status(self): | def test_009_invalid_participant_status(self): | ||||
self.assertRaises(InvalidAttendeeParticipantStatusError, self.event.set_attendee_participant_status, "jane@doe.org", "INVALID") | self.assertRaises(InvalidAttendeeParticipantStatusError, self.event.set_attendee_participant_status, "jane@doe.org", "INVALID") | ||||
Lint: PEP8 E501 line too long (135 > 79 characters) Lint: PEP8 E501: line too long (135 > 79 characters) | |||||
def test_009_update_attendees(self): | def test_009_update_attendees(self): | ||||
jane = self.event.get_attendee("jane@doe.org") | jane = self.event.get_attendee("jane@doe.org") | ||||
jane.set_name("Jane (GI) Doe") | jane.set_name("Jane (GI) Doe") | ||||
self.event.update_attendees([jane]) | self.event.update_attendees([jane]) | ||||
self.assertEqual(len(self.event.get_attendees()), 2) | self.assertEqual(len(self.event.get_attendees()), 2) | ||||
self.assertEqual(self.event.get_attendee("jane@doe.org").get_name(), "Jane (GI) Doe") | self.assertEqual(self.event.get_attendee("jane@doe.org").get_name(), "Jane (GI) Doe") | ||||
Lint: PEP8 E501 line too long (93 > 79 characters) Lint: PEP8 E501: line too long (93 > 79 characters) | |||||
def test_010_datetime_from_string(self): | def test_010_datetime_from_string(self): | ||||
self.assertRaises(InvalidEventDateError, self.event.set_start, "2012-05-23 11:58:00") | self.assertRaises(InvalidEventDateError, self.event.set_start, "2012-05-23 11:58:00") | ||||
Lint: PEP8 E501 line too long (93 > 79 characters) Lint: PEP8 E501: line too long (93 > 79 characters) | |||||
def test_011_attendee_equality(self): | def test_011_attendee_equality(self): | ||||
self.assertEqual(self.event.get_attendee("jane@doe.org").get_email(), "jane@doe.org") | self.assertEqual(self.event.get_attendee("jane@doe.org").get_email(), "jane@doe.org") | ||||
Lint: PEP8 E501 line too long (93 > 79 characters) Lint: PEP8 E501: line too long (93 > 79 characters) | |||||
def test_012_delegate_new_attendee(self): | def test_012_delegate_new_attendee(self): | ||||
self.event.delegate("jane@doe.org", "max@imum.com") | self.event.delegate("jane@doe.org", "max@imum.com") | ||||
def test_013_delegatee_is_now_attendee(self): | def test_013_delegatee_is_now_attendee(self): | ||||
delegatee = self.event.get_attendee("max@imum.com") | delegatee = self.event.get_attendee("max@imum.com") | ||||
self.assertIsInstance(delegatee, Attendee) | self.assertIsInstance(delegatee, Attendee) | ||||
self.assertEqual(delegatee.get_role(), kolabformat.Optional) | self.assertEqual(delegatee.get_role(), kolabformat.Optional) | ||||
self.assertEqual(delegatee.get_cutype(), kolabformat.CutypeResource) | self.assertEqual(delegatee.get_cutype(), kolabformat.CutypeResource) | ||||
def test_014_delegate_attendee_adds(self): | def test_014_delegate_attendee_adds(self): | ||||
self.assertEqual(len(self.event.get_attendee("jane@doe.org").get_delegated_to()), 1) | self.assertEqual(len(self.event.get_attendee("jane@doe.org").get_delegated_to()), 1) | ||||
Lint: PEP8 E501 line too long (92 > 79 characters) Lint: PEP8 E501: line too long (92 > 79 characters) | |||||
self.event.delegate("jane@doe.org", "john@doe.org") | self.event.delegate("jane@doe.org", "john@doe.org") | ||||
self.assertEqual(len(self.event.get_attendee("jane@doe.org").get_delegated_to()), 2) | self.assertEqual(len(self.event.get_attendee("jane@doe.org").get_delegated_to()), 2) | ||||
Lint: PEP8 E501 line too long (92 > 79 characters) Lint: PEP8 E501: line too long (92 > 79 characters) | |||||
def test_015_timezone(self): | def test_015_timezone(self): | ||||
_tz = self.event.get_start() | _tz = self.event.get_start() | ||||
self.assertIsInstance(_tz.tzinfo, datetime.tzinfo) | self.assertIsInstance(_tz.tzinfo, datetime.tzinfo) | ||||
def test_016_start_with_timezone(self): | def test_016_start_with_timezone(self): | ||||
_start = datetime.datetime(2012, 05, 23, 11, 58, 00, tzinfo=pytz.timezone("Europe/Zurich")) | _start = datetime.datetime(2012, 05, 23, 11, 58, 00, tzinfo=pytz.timezone("Europe/Zurich")) | ||||
Lint: PEP8 E501 line too long (99 > 79 characters) Lint: PEP8 E501: line too long (99 > 79 characters) | |||||
_start_utc = _start.astimezone(pytz.utc) | _start_utc = _start.astimezone(pytz.utc) | ||||
#self.assertEqual(_start.__str__(), "2012-05-23 11:58:00+01:00") | #self.assertEqual(_start.__str__(), "2012-05-23 11:58:00+01:00") | ||||
Lint: PEP8 E265 block comment should start with '# ' Lint: PEP8 E265: block comment should start with '# ' | |||||
#self.assertEqual(_start_utc.__str__(), "2012-05-23 10:58:00+00:00") | #self.assertEqual(_start_utc.__str__(), "2012-05-23 10:58:00+00:00") | ||||
Lint: PEP8 E265 block comment should start with '# ' Lint: PEP8 E265: block comment should start with '# ' | |||||
self.event.set_start(_start) | self.event.set_start(_start) | ||||
self.assertIsInstance(_start.tzinfo, datetime.tzinfo) | self.assertIsInstance(_start.tzinfo, datetime.tzinfo) | ||||
self.assertEqual(_start.tzinfo, pytz.timezone("Europe/Zurich")) | self.assertEqual(_start.tzinfo, pytz.timezone("Europe/Zurich")) | ||||
def test_017_allday_without_timezone(self): | def test_017_allday_without_timezone(self): | ||||
_start = datetime.date(2012, 05, 23) | _start = datetime.date(2012, 05, 23) | ||||
self.assertEqual(_start.__str__(), "2012-05-23") | self.assertEqual(_start.__str__(), "2012-05-23") | ||||
self.event.set_start(_start) | self.event.set_start(_start) | ||||
self.assertEqual(hasattr(_start,'tzinfo'), False) | self.assertEqual(hasattr(_start,'tzinfo'), False) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
self.assertEqual(self.event.get_start().__str__(), "2012-05-23") | self.assertEqual(self.event.get_start().__str__(), "2012-05-23") | ||||
def test_018_load_from_ical(self): | def test_018_load_from_ical(self): | ||||
ical_str = """BEGIN:VCALENDAR | ical_str = """BEGIN:VCALENDAR | ||||
VERSION:2.0 | VERSION:2.0 | ||||
PRODID:-//Roundcube//Roundcube libcalendaring 1.1-git//Sabre//Sabre VObject | PRODID:-//Roundcube//Roundcube libcalendaring 1.1-git//Sabre//Sabre VObject | ||||
2.1.3//EN | 2.1.3//EN | ||||
CALSCALE:GREGORIAN | CALSCALE:GREGORIAN | ||||
METHOD:REQUEST | METHOD:REQUEST | ||||
""" + ical_event + ical_exception + "END:VCALENDAR" | """ + ical_event + ical_exception + "END:VCALENDAR" | ||||
ical = icalendar.Calendar.from_ical(ical_str) | ical = icalendar.Calendar.from_ical(ical_str) | ||||
event = event_from_ical(ical.walk('VEVENT')[0], ical_str) | event = event_from_ical(ical.walk('VEVENT')[0], ical_str) | ||||
self.assertEqual(event.get_location(), "Location") | self.assertEqual(event.get_location(), "Location") | ||||
self.assertEqual(str(event.get_lastmodified()), "2014-04-07 12:23:11+00:00") | self.assertEqual(str(event.get_lastmodified()), "2014-04-07 12:23:11+00:00") | ||||
Lint: PEP8 E501 line too long (84 > 79 characters) Lint: PEP8 E501: line too long (84 > 79 characters) | |||||
self.assertEqual(event.get_description(), "Description\n2 lines") | self.assertEqual(event.get_description(), "Description\n2 lines") | ||||
self.assertEqual(event.get_url(), "http://somelink.com/foo") | self.assertEqual(event.get_url(), "http://somelink.com/foo") | ||||
self.assertEqual(event.get_transparency(), False) | self.assertEqual(event.get_transparency(), False) | ||||
self.assertEqual(event.get_categories(), ["Personal"]) | self.assertEqual(event.get_categories(), ["Personal"]) | ||||
self.assertEqual(event.get_priority(), '2') | self.assertEqual(event.get_priority(), '2') | ||||
self.assertEqual(event.get_classification(), kolabformat.ClassPublic) | self.assertEqual(event.get_classification(), kolabformat.ClassPublic) | ||||
self.assertEqual(event.get_attendee_by_email("max@imum.com").get_cutype(), kolabformat.CutypeResource) | self.assertEqual(event.get_attendee_by_email("max@imum.com").get_cutype(), kolabformat.CutypeResource) | ||||
Lint: PEP8 E501 line too long (110 > 79 characters) Lint: PEP8 E501: line too long (110 > 79 characters) | |||||
self.assertEqual(event.get_sequence(), 2) | self.assertEqual(event.get_sequence(), 2) | ||||
self.assertTrue(event.is_recurring()) | self.assertTrue(event.is_recurring()) | ||||
self.assertIsInstance(event.get_duration(), datetime.timedelta) | self.assertIsInstance(event.get_duration(), datetime.timedelta) | ||||
self.assertIsInstance(event.get_end(), datetime.datetime) | self.assertIsInstance(event.get_end(), datetime.datetime) | ||||
self.assertEqual(str(event.get_end()), "2014-05-23 12:30:00+02:00") | self.assertEqual(str(event.get_end()), "2014-05-23 12:30:00+02:00") | ||||
self.assertEqual(len(event.get_exception_dates()), 2) | self.assertEqual(len(event.get_exception_dates()), 2) | ||||
self.assertIsInstance(event.get_exception_dates()[0], datetime.datetime) | self.assertIsInstance(event.get_exception_dates()[0], datetime.datetime) | ||||
Lint: PEP8 E501 line too long (80 > 79 characters) Lint: PEP8 E501: line too long (80 > 79 characters) | |||||
self.assertEqual(len(event.get_alarms()), 1) | self.assertEqual(len(event.get_alarms()), 1) | ||||
self.assertEqual(len(event.get_attachments()), 2) | self.assertEqual(len(event.get_attachments()), 2) | ||||
self.assertEqual(len(event.get_exceptions()), 1) | self.assertEqual(len(event.get_exceptions()), 1) | ||||
exception = event.get_exceptions()[0] | exception = event.get_exceptions()[0] | ||||
self.assertIsInstance(exception.get_recurrence_id(), datetime.datetime) | self.assertIsInstance(exception.get_recurrence_id(), datetime.datetime) | ||||
# self.assertEqual(exception.thisandfuture, True) | # self.assertEqual(exception.thisandfuture, True) | ||||
self.assertEqual(str(exception.get_start()), "2014-06-07 12:00:00+02:00") | self.assertEqual(str(exception.get_start()), "2014-06-07 12:00:00+02:00") | ||||
Lint: PEP8 E501 line too long (81 > 79 characters) Lint: PEP8 E501: line too long (81 > 79 characters) | |||||
def test_018_ical_to_message(self): | def test_018_ical_to_message(self): | ||||
event = event_from_ical(ical_event) | event = event_from_ical(ical_event) | ||||
message = event.to_message() | message = event.to_message() | ||||
self.assertTrue(message.is_multipart()) | self.assertTrue(message.is_multipart()) | ||||
self.assertEqual(message['Subject'], event.uid) | self.assertEqual(message['Subject'], event.uid) | ||||
self.assertEqual(message['X-Kolab-Type'], 'application/x-vnd.kolab.event') | self.assertEqual(message['X-Kolab-Type'], 'application/x-vnd.kolab.event') | ||||
Lint: PEP8 E501 line too long (82 > 79 characters) Lint: PEP8 E501: line too long (82 > 79 characters) | |||||
parts = [p for p in message.walk()] | parts = [p for p in message.walk()] | ||||
attachments = event.get_attachments(); | attachments = event.get_attachments(); | ||||
Lint: PEP8 E703 statement ends with a semicolon Lint: PEP8 E703: statement ends with a semicolon | |||||
self.assertEqual(len(parts), 5) | self.assertEqual(len(parts), 5) | ||||
self.assertEqual(parts[1].get_content_type(), 'text/plain') | self.assertEqual(parts[1].get_content_type(), 'text/plain') | ||||
self.assertEqual(parts[2].get_content_type(), 'application/calendar+xml') | self.assertEqual(parts[2].get_content_type(), 'application/calendar+xml') | ||||
Lint: PEP8 E501 line too long (81 > 79 characters) Lint: PEP8 E501: line too long (81 > 79 characters) | |||||
self.assertEqual(parts[3].get_content_type(), 'image/png') | self.assertEqual(parts[3].get_content_type(), 'image/png') | ||||
self.assertEqual(parts[4].get_content_type(), 'text/plain') | self.assertEqual(parts[4].get_content_type(), 'text/plain') | ||||
self.assertEqual(parts[2]['Content-ID'], None) | self.assertEqual(parts[2]['Content-ID'], None) | ||||
self.assertEqual(parts[3]['Content-ID'].strip('<>'), attachments[0].uri()[4:]) | self.assertEqual(parts[3]['Content-ID'].strip('<>'), attachments[0].uri()[4:]) | ||||
Lint: PEP8 E501 line too long (86 > 79 characters) Lint: PEP8 E501: line too long (86 > 79 characters) | |||||
self.assertEqual(parts[4]['Content-ID'].strip('<>'), attachments[1].uri()[4:]) | self.assertEqual(parts[4]['Content-ID'].strip('<>'), attachments[1].uri()[4:]) | ||||
Lint: PEP8 E501 line too long (86 > 79 characters) Lint: PEP8 E501: line too long (86 > 79 characters) | |||||
def test_018_ical_allday_events(self): | def test_018_ical_allday_events(self): | ||||
ical = """BEGIN:VEVENT | ical = """BEGIN:VEVENT | ||||
UID:ffffffff-f783-4b58-b404-b1389bd2ffff | UID:ffffffff-f783-4b58-b404-b1389bd2ffff | ||||
DTSTAMP;VALUE=DATE-TIME:20140407T122311Z | DTSTAMP;VALUE=DATE-TIME:20140407T122311Z | ||||
CREATED;VALUE=DATE-TIME:20140407T122245Z | CREATED;VALUE=DATE-TIME:20140407T122245Z | ||||
DTSTART;VALUE=DATE:20140823 | DTSTART;VALUE=DATE:20140823 | ||||
DTEND;VALUE=DATE:20140824 | DTEND;VALUE=DATE:20140824 | ||||
SUMMARY:All day | SUMMARY:All day | ||||
DESCRIPTION:One single day | DESCRIPTION:One single day | ||||
TRANSP:OPAQUE | TRANSP:OPAQUE | ||||
CLASS:PUBLIC | CLASS:PUBLIC | ||||
END:VEVENT | END:VEVENT | ||||
""" | """ | ||||
event = event_from_ical(ical) | event = event_from_ical(ical) | ||||
self.assertEqual(str(event.get_start()), "2014-08-23") | self.assertEqual(str(event.get_start()), "2014-08-23") | ||||
self.assertEqual(str(event.get_end()), "2014-08-23") | self.assertEqual(str(event.get_end()), "2014-08-23") | ||||
self.assertEqual(str(event.get_ical_dtend()), "2014-08-24") | self.assertEqual(str(event.get_ical_dtend()), "2014-08-24") | ||||
self.assertTrue(re.match('.*<dtend>\s*<date>2014-08-23</date>', str(event), re.DOTALL)) | self.assertTrue(re.match('.*<dtend>\s*<date>2014-08-23</date>', str(event), re.DOTALL)) | ||||
Lint: PEP8 E501 line too long (95 > 79 characters) Lint: PEP8 E501: line too long (95 > 79 characters) | |||||
def test_019_as_string_itip(self): | def test_019_as_string_itip(self): | ||||
self.event.set_summary("test") | self.event.set_summary("test") | ||||
self.event.set_start(datetime.datetime(2014, 05, 23, 11, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | self.event.set_start(datetime.datetime(2014, 05, 23, 11, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (112 > 79 characters) Lint: PEP8 E501: line too long (112 > 79 characters) | |||||
self.event.set_end(datetime.datetime(2014, 05, 23, 12, 30, 00, tzinfo=pytz.timezone("Europe/London"))) | self.event.set_end(datetime.datetime(2014, 05, 23, 12, 30, 00, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (110 > 79 characters) Lint: PEP8 E501: line too long (110 > 79 characters) | |||||
self.event.set_sequence(3) | self.event.set_sequence(3) | ||||
self.event.set_classification('CONFIDENTIAL') | self.event.set_classification('CONFIDENTIAL') | ||||
self.event.add_custom_property('X-Custom', 'check') | self.event.add_custom_property('X-Custom', 'check') | ||||
self.event.set_recurrence_id(datetime.datetime(2014, 05, 23, 11, 0, 0), True) | self.event.set_recurrence_id(datetime.datetime(2014, 05, 23, 11, 0, 0), True) | ||||
Lint: PEP8 E501 line too long (85 > 79 characters) Lint: PEP8 E501: line too long (85 > 79 characters) | |||||
rrule = RecurrenceRule() | rrule = RecurrenceRule() | ||||
rrule.set_frequency(kolabformat.RecurrenceRule.Weekly) | rrule.set_frequency(kolabformat.RecurrenceRule.Weekly) | ||||
rrule.set_byday(['2WE','-1SU']) | rrule.set_byday(['2WE','-1SU']) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
rrule.setBymonth([2]) | rrule.setBymonth([2]) | ||||
rrule.set_count(10) | rrule.set_count(10) | ||||
rrule.set_until(datetime.datetime(2014,7,23, 11,0,0, tzinfo=pytz.timezone("Europe/London"))) | rrule.set_until(datetime.datetime(2014,7,23, 11,0,0, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E501 line too long (100 > 79 characters) Lint: PEP8 E501: line too long (100 > 79 characters) | |||||
self.event.set_recurrence(rrule); | self.event.set_recurrence(rrule); | ||||
Lint: PEP8 E703 statement ends with a semicolon Lint: PEP8 E703: statement ends with a semicolon | |||||
ical = icalendar.Calendar.from_ical(self.event.as_string_itip()) | ical = icalendar.Calendar.from_ical(self.event.as_string_itip()) | ||||
event = ical.walk('VEVENT')[0] | event = ical.walk('VEVENT')[0] | ||||
self.assertEqual(event['uid'], self.event.get_uid()) | self.assertEqual(event['uid'], self.event.get_uid()) | ||||
self.assertEqual(event['summary'], "test") | self.assertEqual(event['summary'], "test") | ||||
self.assertEqual(event['sequence'], 3) | self.assertEqual(event['sequence'], 3) | ||||
self.assertEqual(event['X-CUSTOM'], "check") | self.assertEqual(event['X-CUSTOM'], "check") | ||||
self.assertIsInstance(event['dtstamp'].dt, datetime.datetime) | self.assertIsInstance(event['dtstamp'].dt, datetime.datetime) | ||||
self.assertEqual(event['class'], "CONFIDENTIAL") | self.assertEqual(event['class'], "CONFIDENTIAL") | ||||
self.assertIsInstance(event['recurrence-id'].dt, datetime.datetime) | self.assertIsInstance(event['recurrence-id'].dt, datetime.datetime) | ||||
self.assertEqual(event['recurrence-id'].params.get('RANGE'), 'THISANDFUTURE') | self.assertEqual(event['recurrence-id'].params.get('RANGE'), 'THISANDFUTURE') | ||||
Lint: PEP8 E501 line too long (85 > 79 characters) Lint: PEP8 E501: line too long (85 > 79 characters) | |||||
self.assertTrue(event.has_key('rrule')) | self.assertTrue(event.has_key('rrule')) | ||||
self.assertEqual(event['rrule']['FREQ'][0], 'WEEKLY') | self.assertEqual(event['rrule']['FREQ'][0], 'WEEKLY') | ||||
self.assertEqual(event['rrule']['INTERVAL'][0], 1) | self.assertEqual(event['rrule']['INTERVAL'][0], 1) | ||||
self.assertEqual(event['rrule']['COUNT'][0], 10) | self.assertEqual(event['rrule']['COUNT'][0], 10) | ||||
self.assertEqual(event['rrule']['BYMONTH'][0], 2) | self.assertEqual(event['rrule']['BYMONTH'][0], 2) | ||||
self.assertEqual(event['rrule']['BYDAY'], ['2WE','-1SU']) | self.assertEqual(event['rrule']['BYDAY'], ['2WE','-1SU']) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
self.assertIsInstance(event['rrule']['UNTIL'][0], datetime.datetime) | self.assertIsInstance(event['rrule']['UNTIL'][0], datetime.datetime) | ||||
self.assertEquals(event['rrule']['UNTIL'][0].tzinfo, pytz.utc) | self.assertEquals(event['rrule']['UNTIL'][0].tzinfo, pytz.utc) | ||||
def test_019_to_message_itip(self): | def test_019_to_message_itip(self): | ||||
self.event = Event() | self.event = Event() | ||||
self.event.set_summary("test") | self.event.set_summary("test") | ||||
self.event.set_start(datetime.datetime(2014, 05, 23, 11, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | self.event.set_start(datetime.datetime(2014, 05, 23, 11, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (112 > 79 characters) Lint: PEP8 E501: line too long (112 > 79 characters) | |||||
self.event.set_end(datetime.datetime(2014, 05, 23, 12, 30, 00, tzinfo=pytz.timezone("Europe/London"))) | self.event.set_end(datetime.datetime(2014, 05, 23, 12, 30, 00, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (110 > 79 characters) Lint: PEP8 E501: line too long (110 > 79 characters) | |||||
self.event.set_organizer("me@kolab.org") | self.event.set_organizer("me@kolab.org") | ||||
self.event.add_attendee("john@doe.org") | self.event.add_attendee("john@doe.org") | ||||
self.event.add_attendee("jane@doe.org") | self.event.add_attendee("jane@doe.org") | ||||
message = self.event.to_message_itip("john@doe.org", method="REPLY", participant_status="ACCEPTED") | message = self.event.to_message_itip("john@doe.org", method="REPLY", participant_status="ACCEPTED") | ||||
Lint: PEP8 E501 line too long (107 > 79 characters) Lint: PEP8 E501: line too long (107 > 79 characters) | |||||
itip_event = None | itip_event = None | ||||
for part in message.walk(): | for part in message.walk(): | ||||
if part.get_content_type() == "text/calendar": | if part.get_content_type() == "text/calendar": | ||||
ical = icalendar.Calendar.from_ical(part.get_payload(decode=True)) | ical = icalendar.Calendar.from_ical(part.get_payload(decode=True)) | ||||
Lint: PEP8 E501 line too long (82 > 79 characters) Lint: PEP8 E501: line too long (82 > 79 characters) | |||||
itip_event = ical.walk('VEVENT')[0] | itip_event = ical.walk('VEVENT')[0] | ||||
break | break | ||||
self.assertEqual(itip_event['uid'], self.event.get_uid()) | self.assertEqual(itip_event['uid'], self.event.get_uid()) | ||||
self.assertEqual(itip_event['attendee'].lower(), 'mailto:john@doe.org') | self.assertEqual(itip_event['attendee'].lower(), 'mailto:john@doe.org') | ||||
# delegate jane => jack | # delegate jane => jack | ||||
self.event.delegate("jane@doe.org", "jack@ripper.com", "Jack") | self.event.delegate("jane@doe.org", "jack@ripper.com", "Jack") | ||||
message = self.event.to_message_itip("jane@doe.org", method="REPLY", participant_status="DELEGATED") | message = self.event.to_message_itip("jane@doe.org", method="REPLY", participant_status="DELEGATED") | ||||
Lint: PEP8 E501 line too long (108 > 79 characters) Lint: PEP8 E501: line too long (108 > 79 characters) | |||||
itip_event = None | itip_event = None | ||||
for part in message.walk(): | for part in message.walk(): | ||||
if part.get_content_type() == "text/calendar": | if part.get_content_type() == "text/calendar": | ||||
ical = icalendar.Calendar.from_ical(part.get_payload(decode=True)) | ical = icalendar.Calendar.from_ical(part.get_payload(decode=True)) | ||||
Lint: PEP8 E501 line too long (82 > 79 characters) Lint: PEP8 E501: line too long (82 > 79 characters) | |||||
itip_event = ical.walk('VEVENT')[0] | itip_event = ical.walk('VEVENT')[0] | ||||
break | break | ||||
self.assertEqual(len(itip_event['attendee']), 2) | self.assertEqual(len(itip_event['attendee']), 2) | ||||
self.assertEqual(str(itip_event['attendee'][0]).lower(), 'mailto:jane@doe.org') | self.assertEqual(str(itip_event['attendee'][0]).lower(), 'mailto:jane@doe.org') | ||||
Lint: PEP8 E501 line too long (87 > 79 characters) Lint: PEP8 E501: line too long (87 > 79 characters) | |||||
self.assertEqual(str(itip_event['attendee'][1]).lower(), 'mailto:jack@ripper.com') | self.assertEqual(str(itip_event['attendee'][1]).lower(), 'mailto:jack@ripper.com') | ||||
Lint: PEP8 E501 line too long (90 > 79 characters) Lint: PEP8 E501: line too long (90 > 79 characters) | |||||
self.assertEqual(itip_event['attendee'][0].params['delegated-to'], 'jack@ripper.com') | self.assertEqual(itip_event['attendee'][0].params['delegated-to'], 'jack@ripper.com') | ||||
Lint: PEP8 E501 line too long (93 > 79 characters) Lint: PEP8 E501: line too long (93 > 79 characters) | |||||
self.assertEqual(itip_event['attendee'][1].params['delegated-from'], 'jane@doe.org') | self.assertEqual(itip_event['attendee'][1].params['delegated-from'], 'jane@doe.org') | ||||
Lint: PEP8 E501 line too long (92 > 79 characters) Lint: PEP8 E501: line too long (92 > 79 characters) | |||||
def test_020_calendaring_recurrence(self): | def test_020_calendaring_recurrence(self): | ||||
Lint: PEP8 E303 too many blank lines (2) Lint: PEP8 E303: too many blank lines (2) | |||||
rrule = kolabformat.RecurrenceRule() | rrule = kolabformat.RecurrenceRule() | ||||
rrule.setFrequency(kolabformat.RecurrenceRule.Monthly) | rrule.setFrequency(kolabformat.RecurrenceRule.Monthly) | ||||
rrule.setCount(10) | rrule.setCount(10) | ||||
self.event = Event() | self.event = Event() | ||||
self.event.set_recurrence(rrule); | self.event.set_recurrence(rrule); | ||||
Lint: PEP8 E703 statement ends with a semicolon Lint: PEP8 E703: statement ends with a semicolon | |||||
_start = datetime.datetime(2014, 5, 1, 11, 30, 00, tzinfo=pytz.timezone("Europe/London")) | _start = datetime.datetime(2014, 5, 1, 11, 30, 00, tzinfo=pytz.timezone("Europe/London")) | ||||
Lint: PEP8 E501 line too long (97 > 79 characters) Lint: PEP8 E501: line too long (97 > 79 characters) | |||||
self.event.set_start(_start) | self.event.set_start(_start) | ||||
self.event.set_end(_start + datetime.timedelta(hours=2)) | self.event.set_end(_start + datetime.timedelta(hours=2)) | ||||
self.assertTrue(self.event.is_recurring()) | self.assertTrue(self.event.is_recurring()) | ||||
next_date = self.event.get_next_occurence(_start) | next_date = self.event.get_next_occurence(_start) | ||||
self.assertIsInstance(next_date, datetime.datetime) | self.assertIsInstance(next_date, datetime.datetime) | ||||
self.assertEqual(next_date.month, 6) | self.assertEqual(next_date.month, 6) | ||||
Show All 11 Lines | def test_020_calendaring_recurrence(self): | ||||
self.assertEqual(last_date.year, 2015) | self.assertEqual(last_date.year, 2015) | ||||
self.assertEqual(last_date.month, 2) | self.assertEqual(last_date.month, 2) | ||||
self.assertEqual(self.event.get_next_occurence(last_date), None) | self.assertEqual(self.event.get_next_occurence(last_date), None) | ||||
# check infinite recurrence | # check infinite recurrence | ||||
rrule = kolabformat.RecurrenceRule() | rrule = kolabformat.RecurrenceRule() | ||||
rrule.setFrequency(kolabformat.RecurrenceRule.Monthly) | rrule.setFrequency(kolabformat.RecurrenceRule.Monthly) | ||||
self.event.set_recurrence(rrule); | self.event.set_recurrence(rrule); | ||||
Lint: PEP8 E703 statement ends with a semicolon Lint: PEP8 E703: statement ends with a semicolon | |||||
self.assertEqual(self.event.get_last_occurrence(), None) | self.assertEqual(self.event.get_last_occurrence(), None) | ||||
self.assertIsInstance(self.event.get_last_occurrence(force=True), datetime.datetime) | self.assertIsInstance(self.event.get_last_occurrence(force=True), datetime.datetime) | ||||
Lint: PEP8 E501 line too long (92 > 79 characters) Lint: PEP8 E501: line too long (92 > 79 characters) | |||||
# check get_next_instance() which returns a clone of the base event | # check get_next_instance() which returns a clone of the base event | ||||
next_instance = self.event.get_next_instance(next_date) | next_instance = self.event.get_next_instance(next_date) | ||||
self.assertIsInstance(next_instance, Event) | self.assertIsInstance(next_instance, Event) | ||||
self.assertIsInstance(next_instance.get_recurrence_id(), datetime.datetime) | self.assertIsInstance(next_instance.get_recurrence_id(), datetime.datetime) | ||||
Lint: PEP8 E501 line too long (83 > 79 characters) Lint: PEP8 E501: line too long (83 > 79 characters) | |||||
self.assertEqual(self.event.get_summary(), next_instance.get_summary()) | self.assertEqual(self.event.get_summary(), next_instance.get_summary()) | ||||
self.assertEqual(next_instance.get_start().month, 7) | self.assertEqual(next_instance.get_start().month, 7) | ||||
self.assertFalse(next_instance.is_recurring()) | self.assertFalse(next_instance.is_recurring()) | ||||
# check get_next_occurence() with an infinitely recurring all-day event | # check get_next_occurence() with an infinitely recurring all-day event | ||||
rrule = kolabformat.RecurrenceRule() | rrule = kolabformat.RecurrenceRule() | ||||
rrule.setFrequency(kolabformat.RecurrenceRule.Yearly) | rrule.setFrequency(kolabformat.RecurrenceRule.Yearly) | ||||
self.event.set_recurrence(rrule); | self.event.set_recurrence(rrule); | ||||
Lint: PEP8 E703 statement ends with a semicolon Lint: PEP8 E703: statement ends with a semicolon | |||||
self.event.set_start(datetime.date(2014, 5, 1)) | self.event.set_start(datetime.date(2014, 5, 1)) | ||||
self.event.set_end(datetime.date(2014, 5, 1)) | self.event.set_end(datetime.date(2014, 5, 1)) | ||||
next_date = self.event.get_next_occurence(datetime.date(2015, 1, 1)) | next_date = self.event.get_next_occurence(datetime.date(2015, 1, 1)) | ||||
self.assertIsInstance(next_date, datetime.date) | self.assertIsInstance(next_date, datetime.date) | ||||
self.assertEqual(next_date.year, 2015) | self.assertEqual(next_date.year, 2015) | ||||
self.assertEqual(next_date.month, 5) | self.assertEqual(next_date.month, 5) | ||||
def test_021_calendaring_no_recurrence(self): | def test_021_calendaring_no_recurrence(self): | ||||
_start = datetime.datetime(2014, 2, 1, 14, 30, 00, tzinfo=pytz.timezone("Europe/London")) | _start = datetime.datetime(2014, 2, 1, 14, 30, 00, tzinfo=pytz.timezone("Europe/London")) | ||||
Lint: PEP8 E501 line too long (97 > 79 characters) Lint: PEP8 E501: line too long (97 > 79 characters) | |||||
self.event = Event() | self.event = Event() | ||||
self.event.set_start(_start) | self.event.set_start(_start) | ||||
self.event.set_end(_start + datetime.timedelta(hours=2)) | self.event.set_end(_start + datetime.timedelta(hours=2)) | ||||
self.assertEqual(self.event.get_next_occurence(_start), None) | self.assertEqual(self.event.get_next_occurence(_start), None) | ||||
self.assertEqual(self.event.get_last_occurrence(), None) | self.assertEqual(self.event.get_last_occurrence(), None) | ||||
def test_021_add_exceptions(self): | def test_021_add_exceptions(self): | ||||
Show All 15 Lines | """ | ||||
def test_021_allday_recurrence(self): | def test_021_allday_recurrence(self): | ||||
rrule = kolabformat.RecurrenceRule() | rrule = kolabformat.RecurrenceRule() | ||||
rrule.setFrequency(kolabformat.RecurrenceRule.Daily) | rrule.setFrequency(kolabformat.RecurrenceRule.Daily) | ||||
rrule.setCount(10) | rrule.setCount(10) | ||||
self.event = Event() | self.event = Event() | ||||
self.event.set_summary('alldays') | self.event.set_summary('alldays') | ||||
self.event.set_recurrence(rrule); | self.event.set_recurrence(rrule); | ||||
Lint: PEP8 E703 statement ends with a semicolon Lint: PEP8 E703: statement ends with a semicolon | |||||
_start = datetime.date(2015,1,1) | _start = datetime.date(2015,1,1) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
self.event.set_start(_start) | self.event.set_start(_start) | ||||
self.event.set_end(_start) | self.event.set_end(_start) | ||||
exdate = datetime.date(2015,1,5) | exdate = datetime.date(2015,1,5) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
xmlexception = Event(from_string=str(self.event)) | xmlexception = Event(from_string=str(self.event)) | ||||
xmlexception.set_start(exdate) | xmlexception.set_start(exdate) | ||||
xmlexception.set_end(exdate) | xmlexception.set_end(exdate) | ||||
xmlexception.set_recurrence_id(exdate, False) | xmlexception.set_recurrence_id(exdate, False) | ||||
xmlexception.set_status('CANCELLED') | xmlexception.set_status('CANCELLED') | ||||
self.event.add_exception(xmlexception) | self.event.add_exception(xmlexception) | ||||
inst3 = self.event.get_instance(datetime.date(2015,1,3)) | inst3 = self.event.get_instance(datetime.date(2015,1,3)) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
self.assertEqual(inst3.get_start(), datetime.date(2015,1,3)) | self.assertEqual(inst3.get_start(), datetime.date(2015,1,3)) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
inst5 = self.event.get_instance(exdate) | inst5 = self.event.get_instance(exdate) | ||||
self.assertEqual(inst5.get_status(True), 'CANCELLED') | self.assertEqual(inst5.get_status(True), 'CANCELLED') | ||||
def test_021_ical_exceptions(self): | def test_021_ical_exceptions(self): | ||||
self.event.set_summary("test") | self.event.set_summary("test") | ||||
self.event.set_start(datetime.datetime(2014, 05, 23, 11, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | self.event.set_start(datetime.datetime(2014, 05, 23, 11, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (112 > 79 characters) Lint: PEP8 E501: line too long (112 > 79 characters) | |||||
self.event.set_end(datetime.datetime(2014, 05, 23, 12, 30, 00, tzinfo=pytz.timezone("Europe/London"))) | self.event.set_end(datetime.datetime(2014, 05, 23, 12, 30, 00, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (110 > 79 characters) Lint: PEP8 E501: line too long (110 > 79 characters) | |||||
rrule = kolabformat.RecurrenceRule() | rrule = kolabformat.RecurrenceRule() | ||||
rrule.setFrequency(kolabformat.RecurrenceRule.Weekly) | rrule.setFrequency(kolabformat.RecurrenceRule.Weekly) | ||||
self.event.set_recurrence(rrule) | self.event.set_recurrence(rrule) | ||||
xmlexception = Event(from_string=str(self.event)) | xmlexception = Event(from_string=str(self.event)) | ||||
xmlexception.set_start(datetime.datetime(2014, 05, 30, 14, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | xmlexception.set_start(datetime.datetime(2014, 05, 30, 14, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (114 > 79 characters) Lint: PEP8 E501: line too long (114 > 79 characters) | |||||
xmlexception.set_end(datetime.datetime(2014, 05, 30, 16, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | xmlexception.set_end(datetime.datetime(2014, 05, 30, 16, 00, 00, tzinfo=pytz.timezone("Europe/London"))) | ||||
Lint: PEP8 E501 line too long (112 > 79 characters) Lint: PEP8 E501: line too long (112 > 79 characters) | |||||
xmlexception.set_recurrence_id(datetime.datetime(2014, 05, 30, 11, 0, 0), False) | xmlexception.set_recurrence_id(datetime.datetime(2014, 05, 30, 11, 0, 0), False) | ||||
Lint: PEP8 E501 line too long (88 > 79 characters) Lint: PEP8 E501: line too long (88 > 79 characters) | |||||
self.event.add_exception(xmlexception) | self.event.add_exception(xmlexception) | ||||
ical = icalendar.Calendar.from_ical(self.event.as_string_itip()) | ical = icalendar.Calendar.from_ical(self.event.as_string_itip()) | ||||
vevents = ical.walk('VEVENT') | vevents = ical.walk('VEVENT') | ||||
event = vevents[0] | event = vevents[0] | ||||
exception = vevents[1] | exception = vevents[1] | ||||
self.assertEqual(event['uid'], self.event.get_uid()) | self.assertEqual(event['uid'], self.event.get_uid()) | ||||
self.assertEqual(event['summary'], "test") | self.assertEqual(event['summary'], "test") | ||||
self.assertEqual(exception['uid'], self.event.get_uid()) | self.assertEqual(exception['uid'], self.event.get_uid()) | ||||
self.assertIsInstance(exception['recurrence-id'].dt, datetime.datetime) | self.assertIsInstance(exception['recurrence-id'].dt, datetime.datetime) | ||||
self.assertEqual(exception['recurrence-id'].params.get('RANGE'), None) | self.assertEqual(exception['recurrence-id'].params.get('RANGE'), None) | ||||
def test_021_single_instances(self): | def test_021_single_instances(self): | ||||
self.event = Event() | self.event = Event() | ||||
self.event.set_summary('singles') | self.event.set_summary('singles') | ||||
_start = datetime.datetime(2015,3,1, 14,0,0, tzinfo=pytz.timezone("Europe/London")) | _start = datetime.datetime(2015,3,1, 14,0,0, tzinfo=pytz.timezone("Europe/London")) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E501 line too long (91 > 79 characters) Lint: PEP8 E501: line too long (91 > 79 characters) | |||||
self.event.set_start(_start) | self.event.set_start(_start) | ||||
self.event.set_end(_start + datetime.timedelta(hours=1)) | self.event.set_end(_start + datetime.timedelta(hours=1)) | ||||
self.event.set_recurrence_id(_start) | self.event.set_recurrence_id(_start) | ||||
_start2 = datetime.datetime(2015,3,5, 15,0,0, tzinfo=pytz.timezone("Europe/London")) | _start2 = datetime.datetime(2015,3,5, 15,0,0, tzinfo=pytz.timezone("Europe/London")) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E501 line too long (92 > 79 characters) Lint: PEP8 E501: line too long (92 > 79 characters) | |||||
xmlexception = Event(from_string=str(self.event)) | xmlexception = Event(from_string=str(self.event)) | ||||
xmlexception.set_start(_start2) | xmlexception.set_start(_start2) | ||||
xmlexception.set_end(_start2 + datetime.timedelta(hours=1)) | xmlexception.set_end(_start2 + datetime.timedelta(hours=1)) | ||||
xmlexception.set_summary('singles #2') | xmlexception.set_summary('singles #2') | ||||
xmlexception.set_recurrence_id(_start2) | xmlexception.set_recurrence_id(_start2) | ||||
self.event.add_exception(xmlexception) | self.event.add_exception(xmlexception) | ||||
self.assertEqual(self.event.has_exceptions(), True) | self.assertEqual(self.event.has_exceptions(), True) | ||||
Show All 12 Lines | def test_021_single_instances(self): | ||||
self.event.add_exception(first) | self.event.add_exception(first) | ||||
event = event_from_string(str(self.event)) | event = event_from_string(str(self.event)) | ||||
self.assertEqual(self.event.has_exceptions(), True) | self.assertEqual(self.event.has_exceptions(), True) | ||||
self.assertEqual(event.get_status(True), 'CANCELLED') | self.assertEqual(event.get_status(True), 'CANCELLED') | ||||
self.assertEqual(event.get_summary(), "singles #1") | self.assertEqual(event.get_summary(), "singles #1") | ||||
def test_022_load_from_xml(self): | def test_022_load_from_xml(self): | ||||
Lint: PEP8 E303 too many blank lines (2) Lint: PEP8 E303: too many blank lines (2) | |||||
event = event_from_string(xml_event) | event = event_from_string(xml_event) | ||||
self.assertEqual(event.uid, '75c740bb-b3c6-442c-8021-ecbaeb0a025e') | self.assertEqual(event.uid, '75c740bb-b3c6-442c-8021-ecbaeb0a025e') | ||||
self.assertEqual(event.get_attendee_by_email("jane@example.org").get_participant_status(), kolabformat.PartAccepted) | self.assertEqual(event.get_attendee_by_email("jane@example.org").get_participant_status(), kolabformat.PartAccepted) | ||||
Lint: PEP8 E501 line too long (124 > 79 characters) Lint: PEP8 E501: line too long (124 > 79 characters) | |||||
self.assertEqual(len(event.get_attendee_by_email("jane@example.org").get_delegated_from()), 1) | self.assertEqual(len(event.get_attendee_by_email("jane@example.org").get_delegated_from()), 1) | ||||
Lint: PEP8 E501 line too long (102 > 79 characters) Lint: PEP8 E501: line too long (102 > 79 characters) | |||||
self.assertEqual(len(event.get_attendee_by_email("somebody@else.com").get_delegated_to()), 1) | self.assertEqual(len(event.get_attendee_by_email("somebody@else.com").get_delegated_to()), 1) | ||||
Lint: PEP8 E501 line too long (101 > 79 characters) Lint: PEP8 E501: line too long (101 > 79 characters) | |||||
self.assertEqual(event.get_sequence(), 1) | self.assertEqual(event.get_sequence(), 1) | ||||
self.assertIsInstance(event.get_start(), datetime.datetime) | self.assertIsInstance(event.get_start(), datetime.datetime) | ||||
self.assertEqual(str(event.get_start()), "2013-08-13 10:00:00+01:00") | self.assertEqual(str(event.get_start()), "2013-08-13 10:00:00+01:00") | ||||
self.assertEqual(str(event.get_end()), "2013-08-13 14:00:00+01:00") | self.assertEqual(str(event.get_end()), "2013-08-13 14:00:00+01:00") | ||||
self.assertTrue(event.is_recurring()) | self.assertTrue(event.is_recurring()) | ||||
exceptions = event.get_exceptions() | exceptions = event.get_exceptions() | ||||
self.assertEqual(len(exceptions), 1) | self.assertEqual(len(exceptions), 1) | ||||
exception = exceptions[0] | exception = exceptions[0] | ||||
self.assertIsInstance(exception.get_recurrence_id(), datetime.datetime) | self.assertIsInstance(exception.get_recurrence_id(), datetime.datetime) | ||||
self.assertTrue(exception.thisandfuture) | self.assertTrue(exception.thisandfuture) | ||||
self.assertEqual(str(exception.get_start()), "2014-08-16 13:00:00+01:00") | self.assertEqual(str(exception.get_start()), "2014-08-16 13:00:00+01:00") | ||||
Lint: PEP8 E501 line too long (81 > 79 characters) Lint: PEP8 E501: line too long (81 > 79 characters) | |||||
self.assertEqual(exception.get_attendee_by_email("jane@example.org").get_participant_status(), kolabformat.PartDeclined) | self.assertEqual(exception.get_attendee_by_email("jane@example.org").get_participant_status(), kolabformat.PartDeclined) | ||||
Lint: PEP8 E501 line too long (128 > 79 characters) Lint: PEP8 E501: line too long (128 > 79 characters) | |||||
self.assertRaises(ValueError, exception.get_attendee, "somebody@else.com") | self.assertRaises(ValueError, exception.get_attendee, "somebody@else.com") | ||||
Lint: PEP8 E501 line too long (82 > 79 characters) Lint: PEP8 E501: line too long (82 > 79 characters) | |||||
# get instances with exception data | # get instances with exception data | ||||
occurrence = event.get_next_instance(exception.get_start() - datetime.timedelta(days=1)) | occurrence = event.get_next_instance(exception.get_start() - datetime.timedelta(days=1)) | ||||
Lint: PEP8 E501 line too long (96 > 79 characters) Lint: PEP8 E501: line too long (96 > 79 characters) | |||||
self.assertEqual(occurrence.get_start(), exception.get_start()) | self.assertEqual(occurrence.get_start(), exception.get_start()) | ||||
self.assertEqual(occurrence.get_summary(), "exception") | self.assertEqual(occurrence.get_summary(), "exception") | ||||
# find instance directly by date | # find instance directly by date | ||||
_recurrence_id = datetime.datetime(2014, 8, 15, 10, 0, 0) | _recurrence_id = datetime.datetime(2014, 8, 15, 10, 0, 0) | ||||
occurrence = event.get_instance(_recurrence_id) | occurrence = event.get_instance(_recurrence_id) | ||||
self.assertIsInstance(occurrence, Event) | self.assertIsInstance(occurrence, Event) | ||||
self.assertEqual(str(occurrence.get_recurrence_id()), "2014-08-15 10:00:00+01:00") | self.assertEqual(str(occurrence.get_recurrence_id()), "2014-08-15 10:00:00+01:00") | ||||
Lint: PEP8 E501 line too long (90 > 79 characters) Lint: PEP8 E501: line too long (90 > 79 characters) | |||||
# set invalid date-only recurrence-id | # set invalid date-only recurrence-id | ||||
exception.set_recurrence_id(datetime.date(2014,8,16)) | exception.set_recurrence_id(datetime.date(2014,8,16)) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
event.add_exception(exception) | event.add_exception(exception) | ||||
inst = event.get_next_instance(_recurrence_id); | inst = event.get_next_instance(_recurrence_id); | ||||
Lint: PEP8 E703 statement ends with a semicolon Lint: PEP8 E703: statement ends with a semicolon | |||||
self.assertIsInstance(inst, Event) | self.assertIsInstance(inst, Event) | ||||
self.assertIsInstance(inst.get_recurrence_id(), datetime.datetime) | self.assertIsInstance(inst.get_recurrence_id(), datetime.datetime) | ||||
def test_023_load_from_message(self): | def test_023_load_from_message(self): | ||||
event = event_from_message(event_from_ical(ical_event).to_message()) | event = event_from_message(event_from_ical(ical_event).to_message()) | ||||
event.set_sequence(3) | event.set_sequence(3) | ||||
message = event.to_message() | message = event.to_message() | ||||
self.assertTrue(message.is_multipart()) | self.assertTrue(message.is_multipart()) | ||||
# check attachment MIME parts are kept | # check attachment MIME parts are kept | ||||
parts = [p for p in message.walk()] | parts = [p for p in message.walk()] | ||||
attachments = event.get_attachments(); | attachments = event.get_attachments(); | ||||
Lint: PEP8 E703 statement ends with a semicolon Lint: PEP8 E703: statement ends with a semicolon | |||||
self.assertEqual(len(parts), 5) | self.assertEqual(len(parts), 5) | ||||
self.assertEqual(parts[3].get_content_type(), 'image/png') | self.assertEqual(parts[3].get_content_type(), 'image/png') | ||||
self.assertEqual(parts[3]['Content-ID'].strip('<>'), attachments[0].uri()[4:]) | self.assertEqual(parts[3]['Content-ID'].strip('<>'), attachments[0].uri()[4:]) | ||||
Lint: PEP8 E501 line too long (86 > 79 characters) Lint: PEP8 E501: line too long (86 > 79 characters) | |||||
self.assertEqual(parts[4].get_content_type(), 'text/plain') | self.assertEqual(parts[4].get_content_type(), 'text/plain') | ||||
self.assertEqual(parts[4]['Content-ID'].strip('<>'), attachments[1].uri()[4:]) | self.assertEqual(parts[4]['Content-ID'].strip('<>'), attachments[1].uri()[4:]) | ||||
Lint: PEP8 E501 line too long (86 > 79 characters) Lint: PEP8 E501: line too long (86 > 79 characters) | |||||
self.assertEqual(event.get_attachment_data(1), 'This is a text file\n') | self.assertEqual(event.get_attachment_data(1), 'This is a text file\n') | ||||
def test_024_bogus_itip_data(self): | def test_024_bogus_itip_data(self): | ||||
# DTSTAMP contains an invalid date/time value | # DTSTAMP contains an invalid date/time value | ||||
vevent = """BEGIN:VEVENT | vevent = """BEGIN:VEVENT | ||||
UID:626421779C777FBE9C9B85A80D04DDFA-A4BF5BBB9FEAA271 | UID:626421779C777FBE9C9B85A80D04DDFA-A4BF5BBB9FEAA271 | ||||
DTSTAMP:20120713T1254140 | DTSTAMP:20120713T1254140 | ||||
DTSTART;TZID=Europe/London:20120713T100000 | DTSTART;TZID=Europe/London:20120713T100000 | ||||
Show All 12 Lines | """ | ||||
event = event_from_ical(vevent) | event = event_from_ical(vevent) | ||||
self.assertRaises(EventIntegrityError, event.to_message) | self.assertRaises(EventIntegrityError, event.to_message) | ||||
def test_025_to_dict(self): | def test_025_to_dict(self): | ||||
data = event_from_string(xml_event).to_dict() | data = event_from_string(xml_event).to_dict() | ||||
self.assertIsInstance(data, dict) | self.assertIsInstance(data, dict) | ||||
self.assertIsInstance(data['start'], datetime.datetime) | self.assertIsInstance(data['start'], datetime.datetime) | ||||
#self.assertIsInstance(data['end'], datetime.datetime) | #self.assertIsInstance(data['end'], datetime.datetime) | ||||
Lint: PEP8 E265 block comment should start with '# ' Lint: PEP8 E265: block comment should start with '# ' | |||||
self.assertIsInstance(data['created'], datetime.datetime) | self.assertIsInstance(data['created'], datetime.datetime) | ||||
self.assertIsInstance(data['lastmodified-date'], datetime.datetime) | self.assertIsInstance(data['lastmodified-date'], datetime.datetime) | ||||
self.assertEqual(data['uid'], '75c740bb-b3c6-442c-8021-ecbaeb0a025e') | self.assertEqual(data['uid'], '75c740bb-b3c6-442c-8021-ecbaeb0a025e') | ||||
self.assertEqual(data['summary'], 'test') | self.assertEqual(data['summary'], 'test') | ||||
self.assertEqual(data['location'], 'Room 101') | self.assertEqual(data['location'], 'Room 101') | ||||
self.assertEqual(data['description'], 'test') | self.assertEqual(data['description'], 'test') | ||||
self.assertEqual(data['priority'], 5) | self.assertEqual(data['priority'], 5) | ||||
self.assertEqual(data['status'], 'CANCELLED') | self.assertEqual(data['status'], 'CANCELLED') | ||||
Show All 30 Lines | def test_026_compute_diff(self): | ||||
e2.set_summary("test2") | e2.set_summary("test2") | ||||
e2.set_end(e1.get_end() + datetime.timedelta(hours=3)) | e2.set_end(e1.get_end() + datetime.timedelta(hours=3)) | ||||
e2.set_sequence(e1.get_sequence() + 1) | e2.set_sequence(e1.get_sequence() + 1) | ||||
e2.set_attendee_participant_status("jane@example.org", "DECLINED") | e2.set_attendee_participant_status("jane@example.org", "DECLINED") | ||||
e2.set_lastmodified() | e2.set_lastmodified() | ||||
diff = compute_diff(e1.to_dict(), e2.to_dict(), True) | diff = compute_diff(e1.to_dict(), e2.to_dict(), True) | ||||
self.assertEqual(len(diff), 4, "Diff: (length: %d):\r\n%r\r\n%r" % (len(diff), diff, e2.__str__())) | self.assertEqual(len(diff), 4, "Diff: (length: %d):\r\n%r\r\n%r" % (len(diff), diff, e2.__str__())) | ||||
Lint: PEP8 E501 line too long (107 > 79 characters) Lint: PEP8 E501: line too long (107 > 79 characters) | |||||
ps = self._find_prop_in_list(diff, 'summary') | ps = self._find_prop_in_list(diff, 'summary') | ||||
self.assertIsInstance(ps, OrderedDict) | self.assertIsInstance(ps, OrderedDict) | ||||
self.assertEqual(ps['new'], "test2") | self.assertEqual(ps['new'], "test2") | ||||
pa = self._find_prop_in_list(diff, 'attendee') | pa = self._find_prop_in_list(diff, 'attendee') | ||||
self.assertIsInstance(pa, OrderedDict) | self.assertIsInstance(pa, OrderedDict) | ||||
self.assertEqual(pa['index'], 0) | self.assertEqual(pa['index'], 0) | ||||
self.assertEqual(pa['new'], dict(partstat='DECLINED')) | self.assertEqual(pa['new'], dict(partstat='DECLINED')) | ||||
def test_026_property_to_string(self): | def test_026_property_to_string(self): | ||||
Lint: PEP8 E303 too many blank lines (2) Lint: PEP8 E303: too many blank lines (2) | |||||
data = event_from_string(xml_event).to_dict() | data = event_from_string(xml_event).to_dict() | ||||
self.assertEqual(property_to_string('sequence', data['sequence']), "1") | self.assertEqual(property_to_string('sequence', data['sequence']), "1") | ||||
self.assertEqual(property_to_string('start', data['start']), "2013-08-13 10:00 (BST)") | self.assertEqual(property_to_string('start', data['start']), "2013-08-13 10:00 (BST)") | ||||
Lint: PEP8 E501 line too long (94 > 79 characters) Lint: PEP8 E501: line too long (94 > 79 characters) | |||||
self.assertEqual(property_to_string('organizer', data['organizer']), "Doe, John") | self.assertEqual(property_to_string('organizer', data['organizer']), "Doe, John") | ||||
Lint: PEP8 E501 line too long (89 > 79 characters) Lint: PEP8 E501: line too long (89 > 79 characters) | |||||
self.assertEqual(property_to_string('attendee', data['attendee'][0]), "jane@example.org, Accepted") | self.assertEqual(property_to_string('attendee', data['attendee'][0]), "jane@example.org, Accepted") | ||||
Lint: PEP8 E501 line too long (107 > 79 characters) Lint: PEP8 E501: line too long (107 > 79 characters) | |||||
self.assertEqual(property_to_string('rrule', data['rrule']), "Every 1 day(s) until 2015-07-25") | self.assertEqual(property_to_string('rrule', data['rrule']), "Every 1 day(s) until 2015-07-25") | ||||
Lint: PEP8 E501 line too long (103 > 79 characters) Lint: PEP8 E501: line too long (103 > 79 characters) | |||||
self.assertEqual(property_to_string('exdate', data['exdate'][0]), "2014-07-19") | self.assertEqual(property_to_string('exdate', data['exdate'][0]), "2014-07-19") | ||||
Lint: PEP8 E501 line too long (87 > 79 characters) Lint: PEP8 E501: line too long (87 > 79 characters) | |||||
self.assertEqual(property_to_string('alarm', data['alarm'][0]), "Display message 2 hour(s) before") | self.assertEqual(property_to_string('alarm', data['alarm'][0]), "Display message 2 hour(s) before") | ||||
Lint: PEP8 E501 line too long (107 > 79 characters) Lint: PEP8 E501: line too long (107 > 79 characters) | |||||
self.assertEqual(property_to_string('attach', data['attach'][0]), "noname.1395223627.5555") | self.assertEqual(property_to_string('attach', data['attach'][0]), "noname.1395223627.5555") | ||||
Lint: PEP8 E501 line too long (99 > 79 characters) Lint: PEP8 E501: line too long (99 > 79 characters) | |||||
def test_027_merge_attendee_data(self): | def test_027_merge_attendee_data(self): | ||||
Lint: PEP8 E303 too many blank lines (2) Lint: PEP8 E303: too many blank lines (2) | |||||
event = event_from_string(xml_event) | event = event_from_string(xml_event) | ||||
jane = event.get_attendee("jane@example.org") | jane = event.get_attendee("jane@example.org") | ||||
jane.set_participant_status('TENTATIVE') | jane.set_participant_status('TENTATIVE') | ||||
jack = Attendee("jack@example.org", name="Jack", role='OPT-PARTICIPANT') | jack = Attendee("jack@example.org", name="Jack", role='OPT-PARTICIPANT') | ||||
Lint: PEP8 E501 line too long (80 > 79 characters) Lint: PEP8 E501: line too long (80 > 79 characters) | |||||
some = event.set_attendee_participant_status("somebody@else.com", 'ACCEPTED') | some = event.set_attendee_participant_status("somebody@else.com", 'ACCEPTED') | ||||
Lint: PEP8 E501 line too long (85 > 79 characters) Lint: PEP8 E501: line too long (85 > 79 characters) | |||||
# update jane + add jack | # update jane + add jack | ||||
event.update_attendees([jane,jack]) | event.update_attendees([jane,jack]) | ||||
Lint: PEP8 E231 missing whitespace after ',' Lint: PEP8 E231: missing whitespace after ',' | |||||
self.assertEqual(len(event.get_attendees()), 3) | self.assertEqual(len(event.get_attendees()), 3) | ||||
self.assertEqual(event.get_attendee("jane@example.org").get_participant_status(), kolabformat.PartTentative) | self.assertEqual(event.get_attendee("jane@example.org").get_participant_status(), kolabformat.PartTentative) | ||||
Lint: PEP8 E501 line too long (116 > 79 characters) Lint: PEP8 E501: line too long (116 > 79 characters) | |||||
self.assertEqual(event.get_attendee("somebody@else.com").get_participant_status(), kolabformat.PartAccepted) | self.assertEqual(event.get_attendee("somebody@else.com").get_participant_status(), kolabformat.PartAccepted) | ||||
Lint: PEP8 E501 line too long (116 > 79 characters) Lint: PEP8 E501: line too long (116 > 79 characters) | |||||
# test write + read | # test write + read | ||||
event = event_from_string(str(event)) | event = event_from_string(str(event)) | ||||
exception = event.get_exceptions()[0] | exception = event.get_exceptions()[0] | ||||
self.assertEqual(len(exception.get_attendees()), 2) | self.assertEqual(len(exception.get_attendees()), 2) | ||||
self.assertEqual(event.get_attendee("jane@example.org").get_participant_status(), kolabformat.PartTentative) | self.assertEqual(event.get_attendee("jane@example.org").get_participant_status(), kolabformat.PartTentative) | ||||
Lint: PEP8 E501 line too long (116 > 79 characters) Lint: PEP8 E501: line too long (116 > 79 characters) | |||||
self.assertEqual(event.get_attendee("jack@example.org").get_name(), "Jack") | self.assertEqual(event.get_attendee("jack@example.org").get_name(), "Jack") | ||||
Lint: PEP8 E501 line too long (83 > 79 characters) Lint: PEP8 E501: line too long (83 > 79 characters) | |||||
self.assertRaises(ValueError, exception.get_attendee, "somebody@else.com") # not addded to exception | self.assertRaises(ValueError, exception.get_attendee, "somebody@else.com") # not addded to exception | ||||
Lint: PEP8 E501 line too long (109 > 79 characters) Lint: PEP8 E501: line too long (109 > 79 characters) | |||||
def test_028_rdate(self): | |||||
event = event_from_ical(ical_event_rdate) | |||||
self.assertTrue(event.is_recurring()) | |||||
self.assertEqual(len(event.get_recurrence_dates()), 2) | |||||
self.assertIsInstance(event.get_recurrence_dates()[0], datetime.datetime) | |||||
Lint: PEP8 E501 line too long (81 > 79 characters) Lint: PEP8 E501: line too long (81 > 79 characters) | |||||
rdates = event.get_recurrence_dates() | |||||
self.assertEqual(str(rdates[0]), "2014-05-30 11:00:00+02:00") | |||||
self.assertEqual(str(rdates[1]), "2014-06-20 11:00:00+02:00") | |||||
dt = datetime.datetime(2014, 8, 15, 10, 0, 0, tzinfo=pytz.timezone("Europe/Zurich")) | |||||
Lint: PEP8 E501 line too long (92 > 79 characters) Lint: PEP8 E501: line too long (92 > 79 characters) | |||||
event.add_recurrence_date(dt) | |||||
rdates = event.get_recurrence_dates() | |||||
self.assertEqual(str(rdates[2]), "2014-08-15 10:00:00+02:00") | |||||
itip = event.as_string_itip() | |||||
rdates = [] | |||||
for line in itip.split("\n"): | |||||
if re.match('^RDATE', line): | |||||
rdates.append(line.strip().split(':')[1]) | |||||
self.assertEqual("TZID=Europe/Zurich", line.split(':')[0].split(';')[1]) | |||||
Lint: PEP8 E501 line too long (88 > 79 characters) Lint: PEP8 E501: line too long (88 > 79 characters) | |||||
self.assertEqual(rdates, ["20140530T110000", "20140620T110000", "20140815T100000"]) | |||||
Lint: PEP8 E501 line too long (91 > 79 characters) Lint: PEP8 E501: line too long (91 > 79 characters) | |||||
def _find_prop_in_list(self, diff, name): | def _find_prop_in_list(self, diff, name): | ||||
for prop in diff: | for prop in diff: | ||||
if prop['property'] == name: | if prop['property'] == name: | ||||
return prop | return prop | ||||
return None | return None | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
unittest.main() | unittest.main() |
expected 2 blank lines, found 1