There used to be a problem when creating an object named 'index_html' in Plone using WebDAV. The problem occurred because Plone Folder's 'index_html' was a ComputedAttribute used to acquire index_html from skins when there was no index_html Document on the portal root. However, this ComputedAttribute didn't handle WebDAV 'PUT' request correctly. This test ensures that the fix doesn't regress. >>> from Products.CMFPlone.tests.PloneTestCase import default_user >>> from Products.CMFPlone.tests.PloneTestCase import default_password Get path of our home folder: >>> folder_path = '/'.join(self.folder.getPhysicalPath()) Make sure index_html doesn't exist yet: >>> 'index_html' in self.folder.objectIds() False PUT index_html into a Plone Folder. Should work just fine. >>> body = 'I am the walrus' >>> length = len(body) >>> print http(r""" ... PUT %s/index_html HTTP/1.1 ... Content-Length: %d ... Authorization: Basic %s:%s ... ... %s ... """ % (folder_path, length, ... default_user, default_password, body), ... handle_errors=False) HTTP/1.1 201 Created... >>> 'index_html' in self.folder.objectIds() True >>> print self.folder._getOb('index_html').meta_type ATDocument Now, let's try the same at the Portal level: >>> portal_path = '/'.join(self.portal.getPhysicalPath()) Make sure index_html doesn't exist yet: >>> 'index_html' in self.portal.objectIds() False But when we access it directly we should get a FSPageTemplate: >>> print self.portal.index_html.meta_type Filesystem Page Template Give Manager role to the test user: >>> self.setRoles(['Manager']) PUT index_html into Plone root. Should work just fine. >>> body = 'I am the walrus' >>> length = len(body) >>> print http(r""" ... PUT %s/index_html HTTP/1.1 ... Content-Length: %d ... Authorization: Basic %s:%s ... ... %s ... """ % (portal_path, length, ... default_user, default_password, body), ... handle_errors=False) HTTP/1.1 201 Created... >>> 'index_html' in self.portal.objectIds() True >>> print self.portal._getOb('index_html').meta_type ATDocument