import datetime
import pytz
import unittest
import kolabformat
from pykolab.xml import Contact
from pykolab.xml import ContactIntegrityError
from pykolab.xml import contact_from_string
from pykolab.xml import contact_from_message
from email import message_from_string
xml_contact = """
urn:uuid:437656b2-d55e-11e4-a43b-080027b7afc5
3.1.0
Roundcube-libkolab-1.1 Libkolabxml-1.2
20150328T152236Z
individual
Sample Dude
Dude
Sample
M.
Dr.
Jr.
This is a sample contact for testing
Head of everything
Kolab Inc.
R&D Department
x-manager
Jane Manager
x-assistant
Mrs. Moneypenny
O-steet
San Francisco
CA
55550
USA
www.kolab.org
home
Homestreet 11
Hometown
12345
Germany
work
Workstreet 22
Worktown
4567
Switzerland
the dude
spouse
Leia
child
Jay
child
Bob
20010401
20100705
data:image/gif;base64,R0lGODlhAQABAPAAAOjq6gAAACH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAAAsAAAAAAEAAQAAAgJEAQA7
M
home
+49-555-11223344
work
+49-555-44556677
cell
+41-777-55588899
jabber:dude@kolab.org
home
home@kolab.org
work
work@kolab.org
data:application/pgp-keys;base64,LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQpWZXJzaW9uOiBHbnVQRy9NYWNHUEcyIHYyLjAuMjINCg0KbVFHaUJFSVNOcUVSQkFDUnovb3J5L0JEY3pBWUFUR3JnTSt5WDgzV2pkaUVrNmZKNFFUekk2ZFZ1TkxTNy4uLg0KLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQ==
"""
contact_mime_message = """MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="=_4ff5155d75dc1328b7f5fe10ddce8d24"
From: john.doe@example.org
To: john.doe@example.org
Date: Mon, 13 Apr 2015 15:26:44 +0200
X-Kolab-Type: application/x-vnd.kolab.contact
X-Kolab-Mime-Version: 3.0
Subject: 05cfc56d-2bb3-46d1-ada4-5f5310337fb2
User-Agent: Roundcube Webmail/1.2-git
--=_4ff5155d75dc1328b7f5fe10ddce8d24
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=ISO-8859-1
This is a Kolab Groupware object. To view this object you will need an emai=
l client that understands the Kolab Groupware format. For a list of such em=
ail clients please visit http://www.kolab.org/
--=_4ff5155d75dc1328b7f5fe10ddce8d24
Content-Transfer-Encoding: 8bit
Content-Type: application/vcard+xml; charset=UTF-8;
name=kolab.xml
Content-Disposition: attachment;
filename=kolab.xml;
size=1636
urn:uuid:05cfc56d-2bb3-46d1-ada4-5f5310337fb2
3.1.0
Roundcube-libkolab-1.1 Libkolabxml-1.1
20150413T132644Z
individual
User One
User One
DAV
This is a Kolab contact
home
+1555224488
home
dav.user01@example.org
home
user.one@example.org
--=_4ff5155d75dc1328b7f5fe10ddce8d24--
"""
class TestContactXML(unittest.TestCase):
contact = Contact()
def assertIsInstance(self, _value, _type):
if hasattr(unittest.TestCase, 'assertIsInstance'):
return unittest.TestCase.assertIsInstance(self, _value, _type)
else:
if (type(_value)) == _type:
return True
else:
raise AssertionError("%s != %s" % (type(_value), _type))
def test_001_minimal(self):
self.contact.set_name("test")
self.assertEqual("test", self.contact.name())
self.assertIsInstance(self.contact.__str__(), str)
def test_002_full(self):
self.contact.set_name("test")
# TODO: add more setters and getter tests here
def test_010_load_from_xml(self):
contact = contact_from_string(xml_contact)
self.assertEqual(contact.get_uid(), '437656b2-d55e-11e4-a43b-080027b7afc5')
self.assertEqual(contact.name(), 'Sample Dude')
def test_011_load_from_message(self):
contact = contact_from_message(message_from_string(contact_mime_message))
self.assertEqual(contact.get_uid(), '05cfc56d-2bb3-46d1-ada4-5f5310337fb2')
self.assertEqual(contact.name(), 'User One')
def test_020_to_dict(self):
data = contact_from_string(xml_contact).to_dict()
self.assertIsInstance(data, dict)
self.assertIsInstance(data['lastmodified-date'], datetime.datetime)
self.assertEqual(data['uid'], '437656b2-d55e-11e4-a43b-080027b7afc5')
self.assertEqual(data['fn'], 'Sample Dude')
self.assertEqual(data['given'], 'Sample')
self.assertEqual(data['surname'], 'Dude')
self.assertEqual(data['prefix'], 'Dr.')
self.assertEqual(data['suffix'], 'Jr.')
self.assertIsInstance(data['birthday'], datetime.date)
self.assertIsInstance(data['anniversary'], datetime.date)
self.assertEqual(data['organization'], 'Kolab Inc.')
self.assertEqual(data['department'], 'R&D Department')
self.assertEqual(data['manager'], ['Jane Manager'])
self.assertEqual(data['note'], 'This is a sample contact for testing')
self.assertEqual(len(data['address']), 3)
self.assertEqual(data['address'][0]['type'], 'home')
self.assertEqual(data['address'][1]['type'], 'work')
self.assertEqual(data['address'][2]['type'], 'office')
self.assertEqual(len(data['tel']), 3)
self.assertEqual(data['tel'][0]['type'], 'home')
self.assertEqual(data['tel'][0]['number'], '+49-555-11223344')
self.assertEqual(data['tel'][1]['type'], 'work')
self.assertEqual(data['tel'][2]['type'], 'mobile')
self.assertEqual(len(data['email']), 2)
self.assertEqual(data['email'][0]['type'], 'home')
self.assertEqual(data['email'][0]['address'], 'home@kolab.org')
self.assertEqual(len(data['url']), 1)
self.assertEqual(len(data['key']), 1)
self.assertEqual(data['key'][0]['type'], 'pgp')
self.assertIsInstance(data['photo'], dict)
self.assertEqual(data['photo']['mimetype'], 'image/gif')
if __name__ == '__main__':
unittest.main()