def test_listDAVObjects(self): container = Container('container') r = FolderDataResource('fdata', container).__of__(container) self.replay() self.assertEqual([], r.listDAVObjects())
def test_OPTIONS(self): class TestContainer(Container): def get_size(self): return 10 def content_type(self): return 'text/foo' container = TestContainer('container') r = FolderDataResource('fdata', container).__of__(container) request = DAVTestRequest( environ={'URL': 'http://example.org/site/container'} ) response = request.response self.replay() self.assertEqual(response, r.OPTIONS(request, request.response)) self.assertEqual( 'close', response.getHeader('Connection', literal=True) ) self.assertEqual( 'GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE, PROPFIND, ' 'PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK', response.getHeader('Allow') )
def test_PROPPATCH(self): class TestContainer(Container): def get_size(self): return 10 def content_type(self): return 'text/foo' container = TestContainer('container') container.manage_changeProperties(title="Container") r = FolderDataResource('fdata', container).__of__(container) requestBody = """\ <?xml version="1.0" encoding="utf-8" ?> <D:propertyupdate xmlns:D="DAV:" xmlns:n="http://www.zope.org/propsets/default"> <D:set> <D:prop> <n:title>New title</n:title> </D:prop> </D:set> </D:propertyupdate> """ request = DAVTestRequest(environ={ 'URL': 'http://example.org/site/container', 'BODY': requestBody }) response = request.response self.assertEqual(response, r.PROPPATCH(request, response)) self.assertEqual('New title', container.getProperty('title')) self.assertEqual('close', response.getHeader('connection', literal=True)) self.assertEqual('text/xml; charset="utf-8"', response.getHeader('Content-Type')) self.assertEqual(207, response.getStatus()) body = """\ <?xml version="1.0" encoding="utf-8"?> <d:multistatus xmlns:d="DAV:"> <d:response> <d:href>http%3A//example.org/site/container</d:href> <d:propstat xmlns:n="http://www.zope.org/propsets/default"> <d:prop> <n:title/> </d:prop> <d:status>HTTP/1.1 200 OK</d:status> </d:propstat> <d:responsedescription> The operation succeded. </d:responsedescription> </d:response> </d:multistatus> """ result = response.getBody() self.assertEqual(body.strip(), result.strip())
def test_HEAD(self): class TestContainer(Container): def get_size(self): return 10 def content_type(self): return 'text/foo' container = TestContainer('container') r = FolderDataResource('fdata', container).__of__(container) request = DAVTestRequest( environ={'URL': 'http://example.org/site/container'} ) response = request.response self.replay() self.assertEqual(response, r.HEAD(request, request.response)) self.assertEqual(200, response.getStatus()) self.assertEqual( 'close', response.getHeader('Connection', literal=True) ) self.assertEqual('text/foo', response.getHeader('Content-Type')) self.assertEqual('10', response.getHeader('Content-Length'))
def test_getId(self): container = Container("container") r = FolderDataResource("fdata", container) self.replay() self.assertEqual("fdata", r.getId()) self.assertEqual(container, r.__parent__)
def test_getId(self): container = Container('container') r = FolderDataResource('fdata', container) self.replay() self.assertEqual('fdata', r.getId()) self.assertEqual(container, r.__parent__)
def test_manage_FTPget(self): class TestContainer(Container): def manage_FTPget(self): return 'data' container = TestContainer('container') r = FolderDataResource('fdata', container).__of__(container) self.assertEqual('data', r.manage_FTPget())
def test_manage_FTPget(self): class TestContainer(Container): def manage_FTPget(self): return "data" container = TestContainer("container") r = FolderDataResource("fdata", container).__of__(container) self.replay() self.assertEqual("data", r.manage_FTPget())
def publishTraverse(self, request, name): context = aq_inner(self.context) # If we are trying to traverse to the folder "body" pseudo-object # returned by listDAVObjects(), return that immediately if getattr(request, 'maybe_webdav_client', False) \ and name == DAV_FOLDER_DATA_ID: return FolderDataResource(DAV_FOLDER_DATA_ID, context).__of__(context) defaultTraversal = super(DexterityPublishTraverse, self).publishTraverse(request, name) # If this is a WebDAV PUT/PROPFIND/PROPPATCH request, don't acquire # things. If we did, we couldn't create a new object with PUT, for # example, because the acquired object would shadow the NullResource if getattr(request, 'maybe_webdav_client', False) \ and request.get('REQUEST_METHOD', 'GET') not in ('GET', 'POST',) \ and IAcquirer.providedBy(defaultTraversal): parent = aq_parent(aq_inner(defaultTraversal)) if parent is not None and parent is not context: return NullResource(self.context, name, request).__of__(self.context) return defaultTraversal
def test_MOVE(self): container = Container('container') r = FolderDataResource('fdata', container).__of__(container) request = DAVTestRequest( environ={'URL': 'http://example.org/site/container'}) response = request.response self.assertRaises(MethodNotAllowed, r.MOVE, request, response)
def test_PUT(self): class TestContainer(Container): def PUT(self, request, response): self._put = ( request, response, ) return response container = TestContainer('container') r = FolderDataResource('fdata', container).__of__(container) request = DAVTestRequest( environ={'URL': 'http://example.org/site/container'}) response = request.response self.assertEqual(response, r.PUT(request, response)) self.assertEqual((request, response), container._put)
def test_UNLOCK(self): # Too much WebDAV magic - just test that it delegates correctly class TestContainer(Container): def UNLOCK(self, request, response): self._unlocked = ( request, response, ) return response container = TestContainer('container') r = FolderDataResource('fdata', container).__of__(container) request = DAVTestRequest( environ={'URL': 'http://example.org/site/container'}) response = request.response self.assertEqual(response, r.UNLOCK(request, response)) self.assertEqual((request, response), container._unlocked)
def test_TRACE(self): class TestContainer(Container): def get_size(self): return 10 def content_type(self): return 'text/foo' container = TestContainer('container') r = FolderDataResource('fdata', container).__of__(container) request = DAVTestRequest( environ={'URL': 'http://example.org/site/container'}) self.assertRaises(MethodNotAllowed, r.TRACE, request, request.response)
def test_PROPFIND(self): class TestContainer(Container): def get_size(self): return 10 def content_type(self): return 'text/foo' container = TestContainer('container') container.manage_changeProperties(title="Container") r = FolderDataResource('fdata', container).__of__(container) request = DAVTestRequest( environ={'URL': 'http://example.org/site/container'}) response = request.response self.replay() self.assertEqual(response, r.PROPFIND(request, response)) self.assertEqual('close', response.getHeader('connection', literal=True)) self.assertEqual('text/xml; charset="utf-8"', response.getHeader('Content-Type')) self.assertEqual(207, response.getStatus()) body = """\ <?xml version="1.0" encoding="utf-8"?> <d:multistatus xmlns:d="DAV:"> <d:response> <d:href>/site/container</d:href> <d:propstat xmlns:n="http://www.zope.org/propsets/default"> <d:prop> <n:title>Container</n:title> </d:prop> <d:status>HTTP/1.1 200 OK</d:status> </d:propstat> <d:propstat xmlns:n="DAV:"> <d:prop> <n:creationdate>1970-01-01T12:00:00Z</n:creationdate> <n:displayname>Container</n:displayname> <n:resourcetype></n:resourcetype> <n:getcontenttype>text/foo</n:getcontenttype> <n:getcontentlength>10</n:getcontentlength> <n:source></n:source> <n:supportedlock> <n:lockentry> <d:lockscope><d:exclusive/></d:lockscope> <d:locktype><d:write/></d:locktype> </n:lockentry> </n:supportedlock> <n:lockdiscovery> </n:lockdiscovery> <n:getlastmodified>...</n:getlastmodified> </d:prop> <d:status>HTTP/1.1 200 OK</d:status> </d:propstat> </d:response> </d:multistatus> """ result = response.getBody() result = re.sub(r'<n:getlastmodified>.+</n:getlastmodified>', '<n:getlastmodified>...</n:getlastmodified>', result) self.assertEqual(result.strip(), body.strip())