Changeset View
Changeset View
Standalone View
Standalone View
tests/unit/test-003-event.py
Show First 20 Lines • Show All 326 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): | ||||
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) | ||||
else: | else: | ||||
if (type(_value)) == _type: | if (type(_value)) == _type: | ||||
return True | return True | ||||
else: | else: | ||||
if not _msg == None: | if _msg is not None: | ||||
raise AssertionError, "%s != %s: %r" % (type(_value), _type, _msg) | raise AssertionError("%s != %s: %r" % (type(_value), _type, _msg)) | ||||
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"))) | ||||
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) | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | class TestEventXML(unittest.TestCase): | ||||
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")) | ||||
_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") | ||||
#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") | ||||
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) | ||||
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 | ||||
Show All 32 Lines | 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') | ||||
parts = [p for p in message.walk()] | parts = [p for p in message.walk()] | ||||
attachments = event.get_attachments(); | attachments = event.get_attachments() | ||||
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') | ||||
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:]) | ||||
Show All 24 Lines | def test_019_as_string_itip(self): | ||||
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"))) | ||||
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) | ||||
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']) | ||||
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"))) | ||||
self.event.set_recurrence(rrule); | self.event.set_recurrence(rrule) | ||||
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') | ||||
self.assertTrue(event.has_key('rrule')) | self.assertTrue('rrule' in event) | ||||
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']) | ||||
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"))) | ||||
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"))) | ||||
Show All 24 Lines | def test_019_to_message_itip(self): | ||||
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') | ||||
self.assertEqual(str(itip_event['attendee'][1]).lower(), 'mailto:jack@ripper.com') | self.assertEqual(str(itip_event['attendee'][1]).lower(), 'mailto:jack@ripper.com') | ||||
self.assertEqual(itip_event['attendee'][0].params['delegated-to'], 'jack@ripper.com') | self.assertEqual(itip_event['attendee'][0].params['delegated-to'], 'jack@ripper.com') | ||||
self.assertEqual(itip_event['attendee'][1].params['delegated-from'], 'jane@doe.org') | self.assertEqual(itip_event['attendee'][1].params['delegated-from'], 'jane@doe.org') | ||||
def test_020_calendaring_recurrence(self): | def test_020_calendaring_recurrence(self): | ||||
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) | ||||
_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")) | ||||
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) | ||||
Show All 13 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) | ||||
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) | ||||
# 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) | ||||
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) | ||||
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) | ||||
Show All 25 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) | ||||
_start = datetime.date(2015,1,1) | _start = datetime.date(2015, 1, 1) | ||||
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) | ||||
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)) | ||||
self.assertEqual(inst3.get_start(), datetime.date(2015,1,3)) | self.assertEqual(inst3.get_start(), datetime.date(2015, 1, 3)) | ||||
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"))) | ||||
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"))) | ||||
Show All 19 Lines | def test_021_ical_exceptions(self): | ||||
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")) | ||||
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")) | ||||
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 11 Lines | def test_021_single_instances(self): | ||||
first.set_summary("singles #1") | first.set_summary("singles #1") | ||||
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): | ||||
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) | ||||
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) | ||||
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) | ||||
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) | ||||
Show All 18 Lines | def test_022_load_from_xml(self): | ||||
# 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") | ||||
# 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)) | ||||
event.add_exception(exception) | event.add_exception(exception) | ||||
inst = event.get_next_instance(_recurrence_id); | inst = event.get_next_instance(_recurrence_id) | ||||
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() | ||||
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:]) | ||||
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:]) | ||||
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') | ||||
Show All 18 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) | ||||
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 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | def test_026_compute_diff(self): | ||||
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): | ||||
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)") | ||||
self.assertEqual(property_to_string('organizer', data['organizer']), "Doe, John") | self.assertEqual(property_to_string('organizer', data['organizer']), "Doe, John") | ||||
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") | ||||
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") | ||||
self.assertEqual(property_to_string('exdate', data['exdate'][0]), "2014-07-19") | self.assertEqual(property_to_string('exdate', data['exdate'][0]), "2014-07-19") | ||||
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") | ||||
self.assertEqual(property_to_string('attach', data['attach'][0]), "noname.1395223627.5555") | self.assertEqual(property_to_string('attach', data['attach'][0]), "noname.1395223627.5555") | ||||
def test_027_merge_attendee_data(self): | def test_027_merge_attendee_data(self): | ||||
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') | ||||
some = event.set_attendee_participant_status("somebody@else.com", 'ACCEPTED') | some = event.set_attendee_participant_status("somebody@else.com", 'ACCEPTED') | ||||
# update jane + add jack | # update jane + add jack | ||||
event.update_attendees([jane,jack]) | event.update_attendees([jane, jack]) | ||||
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) | ||||
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) | ||||
# 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) | ||||
self.assertEqual(event.get_attendee("jack@example.org").get_name(), "Jack") | self.assertEqual(event.get_attendee("jack@example.org").get_name(), "Jack") | ||||
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 | ||||
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() |