def test_listDAVObjects(self):
        container = Container('container')
        r = FolderDataResource('fdata', container).__of__(container)

        self.replay()

        self.assertEqual([], r.listDAVObjects())
Esempio n. 2
0
    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')
        )
Esempio n. 3
0
    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())
Esempio n. 4
0
    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_listDAVObjects(self):
        container = Container('container')
        r = FolderDataResource('fdata', container).__of__(container)

        self.replay()

        self.assertEqual([], r.listDAVObjects())
Esempio n. 6
0
    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_getId(self):
        container = Container('container')
        r = FolderDataResource('fdata', container)

        self.replay()

        self.assertEqual('fdata', r.getId())
        self.assertEqual(container, r.__parent__)
Esempio n. 9
0
    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())
Esempio n. 10
0
    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())
Esempio n. 11
0
    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())
Esempio n. 12
0
    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
Esempio n. 13
0
    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)
Esempio n. 14
0
    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)
Esempio n. 15
0
    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)
Esempio n. 16
0
    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)
Esempio n. 17
0
    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())