ef3cb1dae0
Monotone-Revision: a17c467b0c0d4f1aa961b8c26c0c1bc8b4eaea0a Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-01-18T11:27:11 Monotone-Branch: ca.inverse.sogo
87 lines
3.4 KiB
Python
87 lines
3.4 KiB
Python
#!/usr/bin/python
|
|
|
|
import unittest
|
|
import webdavlib
|
|
|
|
class TestUtility(unittest.TestCase):
|
|
def __init__(self, client):
|
|
self.client = client
|
|
self.userInfo = {}
|
|
|
|
def fetchUserInfo(self, login):
|
|
if not self.userInfo.has_key(login):
|
|
resource = "/SOGo/dav/%s/" % login
|
|
propfind = webdavlib.WebDAVPROPFIND(resource,
|
|
["displayname",
|
|
"{urn:ietf:params:xml:ns:caldav}calendar-user-address-set"],
|
|
0)
|
|
propfind.xpath_namespace = { "D": "DAV:",
|
|
"C": "urn:ietf:params:xml:ns:caldav" }
|
|
self.client.execute(propfind)
|
|
assert(propfind.response["status"] == 207)
|
|
name_nodes = propfind.xpath_evaluate('/D:multistatus/D:response/D:propstat/D:prop/D:displayname',
|
|
None)
|
|
email_nodes = propfind.xpath_evaluate('/D:multistatus/D:response/D:propstat/D:prop/C:calendar-user-address-set/D:href',
|
|
None)
|
|
self.userInfo[login] = (name_nodes[0].childNodes[0].nodeValue,
|
|
email_nodes[0].childNodes[0].nodeValue)
|
|
|
|
return self.userInfo[login]
|
|
|
|
class TestACLUtility(TestUtility):
|
|
def __init__(self, client, resource):
|
|
TestUtility.__init__(self, client)
|
|
self.resource = resource
|
|
|
|
def rightsToSOGoRights(self, rights):
|
|
self.fail("subclass must implement this method")
|
|
|
|
def setupRights(self, username, rights):
|
|
rights_str = "".join(["<%s/>" % x for x in self.rightsToSOGoRights(rights) ])
|
|
aclQuery = """<acl-query xmlns="urn:inverse:params:xml:ns:inverse-dav">
|
|
<set-roles user="%s">%s</set-roles>
|
|
</acl-query>""" % (username, rights_str)
|
|
|
|
post = webdavlib.HTTPPOST(self.resource, aclQuery)
|
|
post.content_type = "application/xml"
|
|
self.client.execute(post)
|
|
self.assertEquals(post.response["status"], 204,
|
|
"rights modification: failure to set '%s' (status: %d)"
|
|
% (rights_str, post.response["status"]))
|
|
|
|
class TestCalendarACLUtility(TestACLUtility):
|
|
def rightsToSOGoRights(self, rights):
|
|
sogoRights = []
|
|
if rights.has_key("c") and rights["c"]:
|
|
sogoRights.append("ObjectCreator")
|
|
if rights.has_key("d") and rights["d"]:
|
|
sogoRights.append("ObjectEraser")
|
|
|
|
classes = { "pu": "Public",
|
|
"pr": "Private",
|
|
"co": "Confidential" }
|
|
rights_table = { "v": "Viewer",
|
|
"d": "DAndTViewer",
|
|
"m": "Modifier",
|
|
"r": "Responder" }
|
|
for k in classes.keys():
|
|
if rights.has_key(k):
|
|
right = rights[k]
|
|
sogo_right = "%s%s" % (classes[k], rights_table[right])
|
|
sogoRights.append(sogo_right)
|
|
|
|
return sogoRights
|
|
|
|
class TestAddressBookACLUtility(TestACLUtility):
|
|
def rightsToSOGoRights(self, rights):
|
|
sogoRightsTable = { "c": "ObjectCreator",
|
|
"d": "ObjectEraser",
|
|
"v": "ObjectViewer",
|
|
"e": "ObjectEditor" }
|
|
|
|
sogoRights = []
|
|
for k in rights.keys():
|
|
sogoRights.append(sogoRightsTable[k])
|
|
|
|
return sogoRights
|