File:  [Repository] / ExtFile / tests / testExtImage.py
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jan 24 16:53:50 2007 UTC (19 years, 4 months ago) by dwinter
Branches: first, MAIN
CVS tags: release, HEAD
Auf der Basis http://www.zope.org/Members/shh/ExtFile Version 1.5.4

mit zlog ersetzt durch logging


    1: #
    2: # Tests the ExtFile product
    3: #
    4: 
    5: import os, sys
    6: if __name__ == '__main__':
    7:     execfile(os.path.join(sys.path[0], 'framework.py'))
    8: 
    9: from Testing import ZopeTestCase
   10: 
   11: ZopeTestCase.installProduct('ExtFile')
   12: ZopeTestCase.installProduct('PythonScripts')
   13: ZopeTestCase.utils.startZServer(4)
   14: 
   15: from Products.ExtFile.tests.ExtFileTestCase import ExtFileTestCase
   16: from Products.ExtFile.tests.ExtFileTestCase import gifImage, jpegImage, tiffImage, notImage
   17: from Products.ExtFile.tests.ExtFileTestCase import makeFileUpload
   18: from Products.ExtFile.tests.ExtFileTestCase import copymove_perms
   19: from Products.ExtFile import transaction
   20: from Products.ExtFile import ExtFile, ExtImage, Config
   21: from Products.ExtFile.ExtImage import UPLOAD_RESIZE
   22: 
   23: 
   24: class TestExtFileAdd(ExtFileTestCase):
   25:     '''Test ExtFile creation'''
   26: 
   27:     def testAddFileFromFileName(self):
   28:         # Add File from file name
   29:         self.addExtFile(id='file', file=notImage)
   30:         self.file._finish()
   31:         self.failUnless(self._exists('file.exe'))
   32:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
   33: 
   34:     def testAddFileFromFileHandle(self):
   35:         # Add File from file handle
   36:         self.addExtFile(id='file', file=open(notImage, 'rb'))
   37:         self.file._finish()
   38:         self.failUnless(self._exists('file.exe'))
   39:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
   40: 
   41:     def testAddFileFromFileUpload(self):
   42:         # Add File from file upload
   43:         self.addExtFile(id='file', file=makeFileUpload(notImage, 'application/octet-stream'))
   44:         self.file._finish()
   45:         self.failUnless(self._exists('file.exe'))
   46:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
   47: 
   48:     def testAddFileWithIdFromFilename(self):
   49:         # Add File without id - should use filename instead
   50:         self.addExtFile(id='', file=makeFileUpload(notImage, 'application/octet-stream', filename='foo'))
   51:         self.file._finish()
   52:         self.assertEqual(self.file.getId(), 'foo')
   53:         self.failUnless(self._exists('foo.exe'))
   54:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
   55: 
   56:     def testAddFileWithLatin1Filename(self):
   57:         # Add File without id - should use filename instead
   58:         self.addExtFile(id='', file=makeFileUpload(notImage, 'application/octet-stream', filename='M\xe4dchen'))
   59:         self.file._finish()
   60:         self.assertEqual(self.file.getId(), 'Madchen')
   61:         self.failUnless(self._exists('Madchen.exe'))
   62:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
   63: 
   64:     def testAddFileWithUTF8Filename(self):
   65:         # Add File without id - should use filename instead
   66:         self.addExtFile(id='', file=makeFileUpload(notImage, 'application/octet-stream', filename='M\303\244dchen'))
   67:         self.file._finish()
   68:         self.assertEqual(self.file.getId(), 'Madchen')
   69:         self.failUnless(self._exists('Madchen.exe'))
   70:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
   71: 
   72: 
   73: class TestExtImageAdd(ExtFileTestCase):
   74:     '''Test ExtImage creation'''
   75: 
   76:     def testAddImageFromName(self):
   77:         # Add Image from file name
   78:         self.addExtImage(id='image', file=gifImage)
   79:         self.image._finish()
   80:         self.failUnless(self._exists('image.gif'))
   81:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
   82: 
   83:     def testAddImageFromFileHandle(self):
   84:         # Add Image from file handle
   85:         self.addExtImage(id='image', file=open(gifImage, 'rb'))
   86:         self.image._finish()
   87:         self.failUnless(self._exists('image.gif'))
   88:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
   89: 
   90:     def testAddImageFromFileUpload(self):
   91:         # Add Image from file upload
   92:         self.addExtImage(id='image', file=makeFileUpload(gifImage, 'image/gif'))
   93:         self.image._finish()
   94:         self.failUnless(self._exists('image.gif'))
   95:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
   96: 
   97:     def testAddImageWithIdFromFilename(self):
   98:         # Add File without id - should use filename instead
   99:         self.addExtImage(id='', file=makeFileUpload(gifImage, 'image/gif', filename='foo'))
  100:         self.image._finish()
  101:         self.assertEqual(self.image.getId(), 'foo')
  102:         self.failUnless(self._exists('foo.gif'))
  103:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  104: 
  105:     def testAddUnwrappedImage(self):
  106:         # This is what Photo does with displays...
  107:         file = ExtImage.ExtImage('foo')
  108:         self.assertRaises(AttributeError,
  109:                           file.manage_file_upload, file=gifImage)
  110: 
  111:     def testAddImageWithLatin1Filename(self):
  112:         # Add File without id - should use filename instead
  113:         self.addExtImage(id='', file=makeFileUpload(gifImage, 'image/gif', filename='M\xe4dchen'))
  114:         self.image._finish()
  115:         self.assertEqual(self.image.getId(), 'Madchen')
  116:         self.failUnless(self._exists('Madchen.gif'))
  117:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  118: 
  119:     def testAddImageWithUTF8Filename(self):
  120:         # Add File without id - should use filename instead
  121:         self.addExtImage(id='', file=makeFileUpload(gifImage, 'image/gif', filename='M\303\244dchen'))
  122:         self.image._finish()
  123:         self.assertEqual(self.image.getId(), 'Madchen')
  124:         self.failUnless(self._exists('Madchen.gif'))
  125:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  126: 
  127: 
  128: class TestExtFileUpload(ExtFileTestCase):
  129:     '''Test ExtFile upload'''
  130: 
  131:     def testManageFileUploadFromFileName(self):
  132:         # Upload File from file name
  133:         self.addExtFile(id='file', file='')
  134:         self.file.manage_file_upload(file=notImage)
  135:         self.file._finish()
  136:         self.failUnless(self._exists('file.exe'))
  137:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
  138: 
  139:     def testManageFileUploadFromFileHandle(self):
  140:         # Upload File from file handle
  141:         self.addExtFile(id='file', file='')
  142:         self.file.manage_file_upload(file=open(notImage, 'rb'))
  143:         self.file._finish()
  144:         self.failUnless(self._exists('file.exe'))
  145:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
  146: 
  147:     def testManageFileUploadFromFileUpload(self):
  148:         # Upload File from file upload
  149:         self.addExtFile(id='file', file='')
  150:         self.file.manage_file_upload(file=makeFileUpload(notImage, 'application/octet-stream'))
  151:         self.file._finish()
  152:         self.failUnless(self._exists('file.exe'))
  153:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
  154: 
  155:     def testManageUploadFromStringBuffer(self):
  156:         # Upload File from file name
  157:         self.addExtFile(id='file', file='')
  158:         self.file.manage_upload(file=open(notImage, 'rb').read())
  159:         self.file._finish()
  160:         self.failUnless(self._exists('file.exe'))
  161:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
  162: 
  163:     def testManageUploadFromFileHandle(self):
  164:         # Upload File from file handle
  165:         self.addExtFile(id='file', file='')
  166:         self.file.manage_upload(file=open(notImage, 'rb'))
  167:         self.file._finish()
  168:         self.failUnless(self._exists('file.exe'))
  169:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
  170: 
  171:     def testManageUploadFromFileUpload(self):
  172:         # Upload File from file upload
  173:         self.addExtFile(id='file', file='')
  174:         self.file.manage_upload(file=makeFileUpload(notImage, 'application/octet-stream'))
  175:         self.file._finish()
  176:         self.failUnless(self._exists('file.exe'))
  177:         self.assertEqual(self.file.get_size(), self._fsize(notImage))
  178: 
  179: 
  180: class TestExtImageUpload(ExtFileTestCase):
  181:     '''Test ExtImage upload'''
  182: 
  183:     def testManageFileUploadFromFileName(self):
  184:         # Upload Image from file name
  185:         self.addExtImage(id='image', file='')
  186:         self.image.manage_file_upload(file=gifImage)
  187:         self.image._finish()
  188:         self.failUnless(self._exists('image.gif'))
  189:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  190: 
  191:     def testManageFileUploadFromFileHandle(self):
  192:         # Upload Image from file handle
  193:         self.addExtImage(id='image', file='')
  194:         self.image.manage_file_upload(file=open(gifImage, 'rb'))
  195:         self.image._finish()
  196:         self.failUnless(self._exists('image.gif'))
  197:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  198: 
  199:     def testManageFileUploadFromFileUpload(self):
  200:         # Upload Image from file upload
  201:         self.addExtImage(id='image', file='')
  202:         self.image.manage_file_upload(file=makeFileUpload(gifImage, 'image/gif'))
  203:         self.image._finish()
  204:         self.failUnless(self._exists('image.gif'))
  205:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  206: 
  207:     def testManageUploadFromStringBuffer(self):
  208:         # Upload Image from file name
  209:         self.addExtImage(id='image', file='')
  210:         self.image.manage_upload(file=open(gifImage, 'rb').read())
  211:         self.image._finish()
  212:         self.failUnless(self._exists('image.gif'))
  213:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  214: 
  215:     def testManageUploadFromFileHandle(self):
  216:         # Upload Image from file handle
  217:         self.addExtImage(id='image', file='')
  218:         self.image.manage_upload(file=open(gifImage, 'rb'))
  219:         self.image._finish()
  220:         self.failUnless(self._exists('image.gif'))
  221:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  222: 
  223:     def testManageUploadFromFileUpload(self):
  224:         # Upload Image from file upload
  225:         self.addExtImage(id='image', file='')
  226:         self.image.manage_upload(file=makeFileUpload(gifImage, 'image/gif'))
  227:         self.image._finish()
  228:         self.failUnless(self._exists('image.gif'))
  229:         self.assertEqual(self.image.get_size(), self._fsize(gifImage))
  230: 
  231: 
  232: class TestExtFileContentType(ExtFileTestCase):
  233:     '''Test ExtFile content-type detection'''
  234: 
  235:     def testDefaultContentType(self):
  236:         # Use default content type
  237:         self.addExtFile(id='file', file=notImage)
  238:         self.file._finish()
  239:         self.assertEqual(self.file.content_type, 'application/octet-stream')
  240:         self.failUnless(self._exists('file.exe'))
  241: 
  242:     def testContentTypeExplicit(self):
  243:         # Use passed-in content type
  244:         self.addExtFile(id='file', file=notImage, content_type='image/jpeg')
  245:         self.file._finish()
  246:         self.assertEqual(self.file.content_type, 'image/jpeg')
  247:         self.failUnless(self._exists('file.jpg'))
  248: 
  249:     def testContentTypeFromId(self):
  250:         # Detect GIF content type from file id
  251:         self.addExtFile(id='file.gif', file=notImage)
  252:         self.file._finish()
  253:         self.assertEqual(self.file.content_type, 'image/gif')
  254:         self.failUnless(self._exists('file.gif'))
  255: 
  256:     def testContentTypeFromIdExplicit(self):
  257:         # Passed-in content type trumps detection by id
  258:         self.addExtFile(id='file.gif', file=notImage, content_type='image/jpeg')
  259:         self.file._finish()
  260:         self.assertEqual(self.file.content_type, 'image/jpeg')
  261:         self.failUnless(self._exists('file.jpg'))
  262: 
  263:     def testContentTypeFromHeaders(self):
  264:         # Detect GIF content type from file upload headers
  265:         self.addExtFile(id='file', file=makeFileUpload(notImage, 'image/gif'))
  266:         self.file._finish()
  267:         self.assertEqual(self.file.content_type, 'image/gif')
  268:         self.failUnless(self._exists('file.gif'))
  269: 
  270:     def testContentTypeFromHeadersExplicit(self):
  271:         # Passed-in content type trumps detection by headers
  272:         self.addExtFile(id='file', file=makeFileUpload(notImage, 'image/gif'), content_type='image/jpeg')
  273:         self.file._finish()
  274:         self.assertEqual(self.file.content_type, 'image/jpeg')
  275:         self.failUnless(self._exists('file.jpg'))
  276: 
  277:     def testContentTypeFromHttpUpload(self):
  278:         # Detect content type from download headers
  279:         self.addExtFile(id='file', file=notImage)
  280:         self.file.manage_http_upload(url=self.app.TiffImage.absolute_url())
  281:         self.file._finish()
  282:         self.assertEqual(self.file.content_type, 'image/tiff')
  283:         # File is *not* renamed!
  284:         self.failUnless(self._exists('file.exe'))
  285: 
  286:     def testContentTypeFromHttpUploadDefault(self):
  287:         # Detect content type from download headers
  288:         self.addExtFile(id='file', file=notImage)
  289:         self.file.manage_http_upload(url=self.app.NotImage.absolute_url())
  290:         self.file._finish()
  291:         self.assertEqual(self.file.content_type, 'application/octet-stream')
  292:         # File is *not* renamed!
  293:         self.failUnless(self._exists('file.exe'))
  294: 
  295: 
  296: class TestExtImageContentType(ExtFileTestCase):
  297:     '''Test ExtImage content-type detection'''
  298: 
  299:     def testDefaultContentType(self):
  300:         # Use default content type
  301:         self.addExtImage(id='image', file=notImage)
  302:         self.image._finish()
  303:         self.assertEqual(self.image.content_type, 'application/octet-stream')
  304:         self.failUnless(self._exists('image.exe'))
  305: 
  306:     def testContentTypeExplicit(self):
  307:         # Use passed-in content type when we cannot detect from content
  308:         self.addExtImage(id='image', file=notImage, content_type='image/jpeg')
  309:         self.image._finish()
  310:         self.assertEqual(self.image.content_type, 'image/jpeg')
  311:         self.failUnless(self._exists('image.jpg'))
  312: 
  313:     def testContentTypeFromId(self):
  314:         # Detect GIF content type from file id
  315:         self.addExtImage(id='image.gif', file=notImage)
  316:         self.image._finish()
  317:         self.assertEqual(self.image.content_type, 'image/gif')
  318:         self.failUnless(self._exists('image.gif'))
  319: 
  320:     def testContentTypeFromIdExplicit(self):
  321:         # Passed-in content type trumps detection by id
  322:         self.addExtImage(id='image.gif', file=notImage, content_type='image/jpeg')
  323:         self.image._finish()
  324:         self.assertEqual(self.image.content_type, 'image/jpeg')
  325:         self.failUnless(self._exists('image.jpg'))
  326: 
  327:     def testContentTypeFromHeaders(self):
  328:         # Detect GIF content type from file upload headers
  329:         self.addExtImage(id='image', file=makeFileUpload(notImage, 'image/gif'))
  330:         self.image._finish()
  331:         self.assertEqual(self.image.content_type, 'image/gif')
  332:         self.failUnless(self._exists('image.gif'))
  333: 
  334:     def testContentTypeFromHeadersExplicit(self):
  335:         # Passed-in content type trumps detection by headers
  336:         self.addExtImage(id='image', file=makeFileUpload(notImage, 'image/gif'), content_type='image/jpeg')
  337:         self.image._finish()
  338:         self.assertEqual(self.image.content_type, 'image/jpeg')
  339:         self.failUnless(self._exists('image.jpg'))
  340: 
  341:     def testContentTypeFromHttpUpload(self):
  342:         # Detect content type from download headers
  343:         self.addExtImage(id='image', file=notImage)
  344:         self.image.manage_http_upload(url=self.app.TiffImage.absolute_url())
  345:         self.image._finish()
  346:         self.assertEqual(self.image.content_type, 'image/tiff')
  347:         # File is *not* renamed!
  348:         self.failUnless(self._exists('image.exe'))
  349:         # Check TIFF dimension sniffing
  350:         self.assertEqual(self.image.width(), 200)
  351:         self.assertEqual(self.image.height(), 136)
  352: 
  353:     def testContentTypeFromGifContent(self):
  354:         # Detect GIF content type from file contents
  355:         self.addExtImage(id='image', file=gifImage)
  356:         self.image._finish()
  357:         self.assertEqual(self.image.content_type, 'image/gif')
  358:         self.failUnless(self._exists('image.gif'))
  359: 
  360:     def testContentTypeFromGifContentExplicit(self):
  361:         # Detect GIF content type even when passing a content type
  362:         self.addExtImage(id='image', file=gifImage, content_type='image/jpeg')
  363:         self.image._finish()
  364:         self.assertEqual(self.image.content_type, 'image/gif')
  365:         self.failUnless(self._exists('image.gif'))
  366: 
  367:     def testContentTypeFromJpegContent(self):
  368:         # Detect JPEG content type from file contents
  369:         self.addExtImage(id='image', file=jpegImage)
  370:         self.image._finish()
  371:         self.assertEqual(self.image.content_type, 'image/jpeg')
  372:         self.failUnless(self._exists('image.jpg'))
  373: 
  374:     def testContentTypeFromJpegContentExplicit(self):
  375:         # Detect JPEG content type even when passing a content type
  376:         self.addExtImage(id='image', file=jpegImage, content_type='image/tiff')
  377:         self.image._finish()
  378:         self.assertEqual(self.image.content_type, 'image/jpeg')
  379:         self.failUnless(self._exists('image.jpg'))
  380: 
  381:     def testContentTypeFromGifString(self):
  382:         # Detect GIF content type from string buffer
  383:         self.addExtImage(id='image', file=notImage)
  384:         self.image.manage_upload(file=open(gifImage, 'rb').read())
  385:         self.image._finish()
  386:         self.assertEqual(self.image.content_type, 'image/gif')
  387:         # File is *not* renamed!
  388:         self.failUnless(self._exists('image.exe'))
  389: 
  390:     def testContentTypeFromJpegPUT(self):
  391:         # Detect JPEG content type from PUT' image
  392:         self.addExtImage(id='image', file=open(notImage, 'rb'))
  393:         request = self.app.REQUEST
  394:         request['BODYFILE'] = open(jpegImage, 'rb')
  395:         self.image.PUT(request, request.RESPONSE)
  396:         self.image._finish()
  397:         self.assertEqual(self.image.content_type, 'image/jpeg')
  398:         # File is *not* renamed!
  399:         self.failUnless(self._exists('image.exe'))
  400:         # Check PUT works
  401:         self.assertEqual(self.image.get_size(), self._fsize(jpegImage))
  402: 
  403: 
  404: class TestExtFileCopyPaste(ExtFileTestCase):
  405:     '''Tests cut/copy/paste/rename/clone'''
  406: 
  407:     def afterSetUp(self):
  408:         ExtFileTestCase.afterSetUp(self)
  409:         self.folder.manage_addFolder('subfolder')
  410:         self.subfolder = self.folder['subfolder']
  411:         self.setPermissions(copymove_perms)
  412:         self.addExtFile(id='image.gif', file=gifImage)
  413:         transaction.savepoint(1) # need a _p_jar
  414: 
  415:     def testClone(self):
  416:         # Clone a file
  417:         self.subfolder.manage_clone(self.file, 'image.gif')
  418:         self.file._finish()
  419:         self.subfolder['image.gif']._finish()
  420:         self.failUnless(self._exists('image.gif'))
  421:         self.failIf(self._exists('image.gif.undo'))
  422:         self.failUnless(self._exists('image.1.gif'))
  423: 
  424:     def testCopyPaste(self):
  425:         # Copy and paste a file
  426:         cb = self.folder.manage_copyObjects(['image.gif'])
  427:         self.subfolder.manage_pasteObjects(cb)
  428:         self.file._finish()
  429:         self.subfolder['image.gif']._finish()
  430:         self.failUnless(self._exists('image.gif'))
  431:         self.failIf(self._exists('image.gif.undo'))
  432:         self.failUnless(self._exists('image.1.gif'))
  433:         self.assertEqual(self.subfolder['image.gif'].get_size(), self._fsize(gifImage))
  434: 
  435:     def testCutPaste(self):
  436:         # Cut and paste a file
  437:         cb = self.folder.manage_cutObjects(['image.gif'])
  438:         self.subfolder.manage_pasteObjects(cb)
  439:         self.file._finish()
  440:         self.subfolder['image.gif']._finish()
  441:         self.failUnless(self._exists('image.gif'))
  442:         self.failIf(self._exists('image.gif.undo'))
  443:         self.failIf(self._exists('image.1.gif'))
  444: 
  445:     def testRename(self):
  446:         # Rename a file
  447:         self.folder.manage_renameObject('image.gif', 'image44.gif')
  448:         self.file._finish()
  449:         self.folder['image44.gif']._finish()
  450:         self.failUnless(self._exists('image.gif'))
  451:         self.failIf(self._exists('image.gif.undo'))
  452:         self.failIf(self._exists('image.1.gif'))
  453: 
  454:     def testCOPY(self):
  455:         # WebDAV copy a file
  456:         req = self.app.REQUEST
  457:         req.environ['HTTP_DEPTH'] = 'infinity'
  458:         req.environ['HTTP_DESTINATION'] = 'http://dummy.org/%s/subfolder/image.gif' % ZopeTestCase.folder_name
  459:         self.folder['image.gif'].COPY(req, req.RESPONSE)
  460:         self.file._finish()
  461:         self.subfolder['image.gif']._finish()
  462:         self.failUnless(self._exists('image.gif'))
  463:         self.failIf(self._exists('image.gif.undo'))
  464:         self.failUnless(self._exists('image.1.gif'))
  465:         self.assertEqual(self.subfolder['image.gif'].get_size(), self._fsize(gifImage))
  466: 
  467:     def testMOVE(self):
  468:         # WebDAV move a file
  469:         req = self.app.REQUEST
  470:         req.environ['HTTP_DEPTH'] = 'infinity'
  471:         req.environ['HTTP_DESTINATION'] = 'http://dummy.org/%s/subfolder/image.gif' % ZopeTestCase.folder_name
  472:         self.folder['image.gif'].MOVE(req, req.RESPONSE)
  473:         self.file._finish()
  474:         self.subfolder['image.gif']._finish()
  475:         self.failUnless(self._exists('image.gif'))
  476:         self.failIf(self._exists('image.gif.undo'))
  477:         self.failIf(self._exists('image.1.gif'))
  478:         self.failIf(self._exists('image.1.gif.undo'))
  479:         self.assertEqual(self.subfolder['image.gif'].get_size(), self._fsize(gifImage))
  480: 
  481:     def testCopyOfProtection(self):
  482:         # Copy and paste a file into the same folder.
  483:         # The filenames should not begin with 'copy_of_'
  484:         cb = self.folder.manage_copyObjects(['image.gif'])
  485:         self.folder.manage_pasteObjects(cb)
  486:         self.file._finish()
  487:         self.folder['copy_of_image.gif']._finish()
  488:         self.failUnless(self._exists('image.gif'))
  489:         self.failIf(self._exists('image.gif.undo'))
  490:         self.failIf(self._exists('copy_of_image.gif'))
  491:         self.failUnless(self._exists('image.1.gif'))
  492:         self.assertEqual(self.folder['copy_of_image.gif'].get_size(), self._fsize(gifImage))
  493: 
  494: 
  495: class TestExtImageCopyPaste(ExtFileTestCase):
  496:     '''Tests cut/copy/paste/rename/clone'''
  497: 
  498:     def afterSetUp(self):
  499:         ExtFileTestCase.afterSetUp(self)
  500:         self.folder.manage_addFolder('subfolder')
  501:         self.subfolder = self.folder['subfolder']
  502:         self.setPermissions(copymove_perms)
  503:         self.addExtImage(id='image.gif', file=gifImage)
  504:         # Add a preview image as well
  505:         self.folder['image.gif'].manage_file_upload(file=jpegImage, is_preview=1,
  506:                                                     create_prev=UPLOAD_RESIZE,
  507:                                                     maxx=100, maxy=100, ratio=1)
  508:         transaction.savepoint(1) # need a _p_jar
  509: 
  510:     def testClone(self):
  511:         # Clone an image
  512:         self.subfolder.manage_clone(self.image, 'image.gif')
  513:         self.image._finish()
  514:         self.subfolder['image.gif']._finish()
  515:         self.failUnless(self._exists('image.gif'))
  516:         self.failIf(self._exists('image.gif.undo'))
  517:         self.failUnless(self._exists('image.jpg'))
  518:         self.failIf(self._exists('image.jpg.undo'))
  519:         self.failUnless(self._exists('image.1.gif'))
  520:         self.failUnless(self._exists('image.1.jpg'))
  521: 
  522:     def testCopyPaste(self):
  523:         # Copy and paste an image
  524:         cb = self.folder.manage_copyObjects(['image.gif'])
  525:         self.subfolder.manage_pasteObjects(cb)
  526:         self.image._finish()
  527:         self.subfolder['image.gif']._finish()
  528:         self.failUnless(self._exists('image.gif'))
  529:         self.failIf(self._exists('image.gif.undo'))
  530:         self.failUnless(self._exists('image.1.gif'))
  531:         self.failIf(self._exists('image.1.gif.undo'))
  532:         self.failUnless(self._exists('image.jpg'))
  533:         self.failUnless(self._exists('image.1.jpg'))
  534:         self.assertEqual(self.subfolder['image.gif'].get_size(), self._fsize(gifImage))
  535: 
  536:     def testCutPaste(self):
  537:         # Cut and paste an image
  538:         cb = self.folder.manage_cutObjects(['image.gif'])
  539:         self.subfolder.manage_pasteObjects(cb)
  540:         self.image._finish()
  541:         self.subfolder['image.gif']._finish()
  542:         self.failUnless(self._exists('image.gif'))
  543:         self.failIf(self._exists('image.gif.undo'))
  544:         self.failUnless(self._exists('image.jpg'))
  545:         self.failIf(self._exists('image.jpg.undo'))
  546:         self.failIf(self._exists('image.1.gif'))
  547:         self.failIf(self._exists('image.1.jpg'))
  548: 
  549:     def testRename(self):
  550:         # Rename an image
  551:         self.folder.manage_renameObject('image.gif', 'image44.gif')
  552:         self.image._finish()
  553:         self.folder['image44.gif']._finish()
  554:         self.failUnless(self._exists('image.gif'))
  555:         self.failIf(self._exists('image.gif.undo'))
  556:         self.failUnless(self._exists('image.jpg'))
  557:         self.failIf(self._exists('image.jpg.undo'))
  558:         self.failIf(self._exists('image.1.gif'))
  559:         self.failIf(self._exists('image.1.jpg'))
  560: 
  561:     def testCOPY(self):
  562:         # WebDAV copy an image
  563:         req = self.app.REQUEST
  564:         req.environ['HTTP_DEPTH'] = 'infinity'
  565:         req.environ['HTTP_DESTINATION'] = 'http://dummy.org/%s/subfolder/image.gif' % ZopeTestCase.folder_name
  566:         self.folder['image.gif'].COPY(req, req.RESPONSE)
  567:         self.image._finish()
  568:         self.subfolder['image.gif']._finish()
  569:         self.failUnless(self._exists('image.gif'))
  570:         self.failIf(self._exists('image.gif.undo'))
  571:         self.failUnless(self._exists('image.1.gif'))
  572:         self.failIf(self._exists('image.1.gif.undo'))
  573:         self.failUnless(self._exists('image.jpg'))
  574:         self.failUnless(self._exists('image.1.jpg'))
  575:         self.assertEqual(self.subfolder['image.gif'].get_size(), self._fsize(gifImage))
  576: 
  577:     def testMOVE(self):
  578:         # WebDAV move an image
  579:         req = self.app.REQUEST
  580:         req.environ['HTTP_DEPTH'] = 'infinity'
  581:         req.environ['HTTP_DESTINATION'] = 'http://dummy.org/%s/subfolder/image.gif' % ZopeTestCase.folder_name
  582:         self.folder['image.gif'].MOVE(req, req.RESPONSE)
  583:         self.image._finish()
  584:         self.subfolder['image.gif']._finish()
  585:         self.failUnless(self._exists('image.gif'))
  586:         self.failIf(self._exists('image.gif.undo'))
  587:         self.failUnless(self._exists('image.jpg'))
  588:         self.failIf(self._exists('image.jpg.undo'))
  589:         self.failIf(self._exists('image.1.gif'))
  590:         self.failIf(self._exists('image.1.jpg'))
  591:         self.assertEqual(self.subfolder['image.gif'].get_size(), self._fsize(gifImage))
  592: 
  593:     def testPUTRecreatesPreview(self):
  594:         # PUT an image; the preview should be regenerated.
  595:         self.image._finish()
  596:         self.failUnless(self._exists('image.gif'))
  597:         self.failUnless(self._exists('image.jpg'))  # preview
  598:         self.failIf(self._exists('image.gif.tmp'))
  599:         self.failIf(self._exists('image.jpg.tmp'))
  600:         req = self.app.REQUEST
  601:         req['BODYFILE'] = open(gifImage, 'rb')
  602:         self.image.PUT(req, req.RESPONSE)
  603:         self.failUnless(self._exists('image.gif'))
  604:         self.failUnless(self._exists('image.jpg'))  # preview
  605:         self.failUnless(self._exists('image.gif.tmp'))  # newly put image
  606:         self.failUnless(self._exists('image.jpg.tmp'))  # regenerated preview
  607:         self.image._finish()
  608:         self.failUnless(self._exists('image.gif'))
  609:         self.failUnless(self._exists('image.jpg'))  # regenerated preview
  610:         self.failIf(self._exists('image.gif.tmp'))
  611:         self.failIf(self._exists('image.jpg.tmp'))
  612: 
  613:     def testPUTRetainsPreviewBoundaries(self):
  614:         # PUT an image; the preview should retain maxx and maxy.
  615:         self.failUnless(self.image.has_preview)
  616:         self.assertEqual(self.image.prev_width(), 100)
  617:         self.assertEqual(self.image.prev_height(), 64)
  618:         req = self.app.REQUEST
  619:         req['BODYFILE'] = open(tiffImage, 'rb')
  620:         self.image.PUT(req, req.RESPONSE)
  621:         self.assertEqual(self.image.prev_width(), 100)
  622:         self.assertEqual(self.image.prev_height(), 68)
  623: 
  624:     def testManageHTTPUploadDoesNotAffectPreview(self):
  625:         # HTTP upload an image; the preview should not change.
  626:         self.failUnless(self.image.has_preview)
  627:         self.assertEqual(self.image.prev_width(), 100)
  628:         self.assertEqual(self.image.prev_height(), 64)
  629:         self.image.manage_http_upload(url=self.app.TiffImage.absolute_url())
  630:         self.assertEqual(self.image.prev_width(), 100)
  631:         self.assertEqual(self.image.prev_height(), 64)
  632: 
  633: 
  634: class TestRepository(ExtFileTestCase):
  635:     '''Test repository directories'''
  636: 
  637:     def afterClear(self):
  638:         ExtFileTestCase.afterClear(self)
  639:         ExtFile.REPOSITORY = Config.FLAT
  640:         ExtFile.NORMALIZE_CASE = Config.KEEP
  641:         ExtFile.CUSTOM_METHOD = 'getExtFilePath'
  642: 
  643:     def testRepositoryFlat(self):
  644:         ExtFile.REPOSITORY = Config.FLAT
  645:         self.addExtImage(id='image', file=gifImage)
  646:         path = self.image.filename[:-1]
  647:         self.assertEqual(path, [])
  648: 
  649:     def testRepositorySyncZodb(self):
  650:         ExtFile.REPOSITORY = Config.SYNC_ZODB
  651:         self.addExtImage(id='image', file=gifImage)
  652:         path = self.image.filename[:-1]
  653:         self.assertEqual(path, [ZopeTestCase.folder_name])
  654: 
  655:     def testRepositorySliced(self):
  656:         ExtFile.REPOSITORY = Config.SLICED
  657:         self.addExtImage(id='image', file=gifImage)
  658:         path = self.image.filename[:-1]
  659:         self.assertEqual(path, ['i', 'm'])
  660: 
  661:     def testRepositorySlicedReverse(self):
  662:         ExtFile.REPOSITORY = Config.SLICED_REVERSE
  663:         self.addExtImage(id='image', file=gifImage)
  664:         path = self.image.filename[:-1]
  665:         self.assertEqual(path, ['e', 'g'])
  666: 
  667:     def testRepositorySlicedHash(self):
  668:         ExtFile.REPOSITORY = Config.SLICED_HASH
  669:         self.addExtImage(id='image', file=gifImage)
  670:         path = self.image.filename[:-1]
  671:         self.assertEqual(path, ['F', 'E'])
  672: 
  673:     def testRepositorySlicedHashDifferentFolder(self):
  674:         # Because the path is part of the hash, the results
  675:         # are different from the above test.
  676:         ExtFile.REPOSITORY = Config.SLICED_HASH
  677:         self.folder.manage_addFolder('subfolder')
  678:         self.subfolder = self.folder['subfolder']
  679:         self.addExtImage(id='image', file=gifImage, folder=self.subfolder)
  680:         path = self.image.filename[:-1]
  681:         self.assertEqual(path, ['L', 'd'])
  682: 
  683:     def testRepositoryCustom(self):
  684: 
  685:         def getExtFilePath(path, id):
  686:             return ['custom', 'path']
  687:         setattr(self.folder, 'getExtFilePath', getExtFilePath)
  688: 
  689:         ExtFile.REPOSITORY = Config.CUSTOM
  690:         self.addExtImage(id='image', file=gifImage)
  691:         path = self.image.filename[:-1]
  692:         self.assertEqual(path, ['custom', 'path'])
  693: 
  694:     def testRepositoryNormalizeCase(self):
  695: 
  696:         def getExtFilePath(path, id):
  697:             return ['Custom', 'Path']
  698:         setattr(self.folder, 'getExtFilePath', getExtFilePath)
  699: 
  700:         ExtFile.REPOSITORY = Config.CUSTOM
  701:         ExtFile.NORMALIZE_CASE = Config.NORMALIZE
  702:         self.addExtImage(id='image', file=gifImage)
  703:         path = self.image.filename[:-1]
  704:         self.assertEqual(path, ['custom', 'path'])
  705: 
  706:     def testRepositoryCustomScript(self):
  707: 
  708:         factory = self.folder.manage_addProduct['PythonScripts']
  709:         factory.manage_addPythonScript('getExtFilePath')
  710:         ps = self.folder.getExtFilePath
  711:         ps.ZPythonScript_edit(params='path, id', body="return ['custom', 'path']")
  712: 
  713:         ExtFile.REPOSITORY = Config.CUSTOM
  714:         self.addExtImage(id='image', file=gifImage)
  715:         path = self.image.filename[:-1]
  716:         self.assertEqual(path, ['custom', 'path'])
  717: 
  718:     def testRepositoryCustomContainer(self):
  719:         from OFS.Folder import Folder
  720: 
  721:         class CustomContainer(Folder):
  722:             def __init__(self, id):
  723:                 self.id = id
  724:             def getExtFilePath(self, path, id):
  725:                 return ['custom', 'path']
  726: 
  727:         self.folder._setObject('subfolder', CustomContainer('subfolder'))
  728:         self.folder = self.folder.subfolder
  729: 
  730:         ExtFile.REPOSITORY = Config.CUSTOM
  731:         self.addExtImage(id='image', file=gifImage)
  732:         path = self.image.filename[:-1]
  733:         self.assertEqual(path, ['custom', 'path'])
  734: 
  735:     def testRepositoryCustomContainerContainer(self):
  736:         from OFS.Folder import Folder
  737: 
  738:         class CustomContainer(Folder):
  739:             def __init__(self, id):
  740:                 self.id = id
  741:             def getExtFilePath(self, path, id):
  742:                 return ['custom', 'path']
  743: 
  744:         self.folder._setObject('subfolder', CustomContainer('subfolder'))
  745:         self.folder = self.folder.subfolder
  746:         self.folder._setObject('subsubfolder', Folder('subsubfolder'))
  747:         self.folder = self.folder.subsubfolder
  748: 
  749:         ExtFile.REPOSITORY = Config.CUSTOM
  750:         self.addExtImage(id='image', file=gifImage)
  751:         path = self.image.filename[:-1]
  752:         self.assertEqual(path, ['custom', 'path'])
  753: 
  754:     def testRepositoryCustomSubclass(self):
  755: 
  756:         class CustomImage(ExtImage.ExtImage):
  757:             def getExtFilePath(self, path, id):
  758:                 return ['custom', 'path']
  759: 
  760:         ExtFile.REPOSITORY = Config.CUSTOM
  761:         self.folder._setObject('image', CustomImage('image'))
  762:         self.folder.image.manage_file_upload(gifImage)
  763:         path = self.folder.image.filename[:-1]
  764:         self.assertEqual(path, ['custom', 'path'])
  765: 
  766:     def testRepositoryCustomPrivateMethod(self):
  767: 
  768:         def _getExtFilePath(path, id):
  769:             return ['custom', 'path']
  770:         setattr(self.folder, '_getExtFilePath', _getExtFilePath)
  771: 
  772:         ExtFile.REPOSITORY = Config.CUSTOM
  773:         ExtFile.CUSTOM_METHOD = '_getExtFilePath'
  774:         self.addExtImage(id='image', file=gifImage)
  775:         path = self.image.filename[:-1]
  776:         self.assertEqual(path, ['custom', 'path'])
  777: 
  778: 
  779: class TestRepositoryFiles(ExtFileTestCase):
  780:     '''Test repository files'''
  781: 
  782:     def afterSetUp(self):
  783:         ExtFileTestCase.afterSetUp(self)
  784:         self.folder.manage_addFolder('subfolder')
  785:         self.subfolder = self.folder['subfolder']
  786: 
  787:     def testUniqueFileName(self):
  788:         # Create a unique file name
  789:         self.addExtImage(id='image', file=gifImage)
  790:         self.image._finish()
  791:         self.addExtImage(id='image', file=gifImage, folder=self.subfolder)
  792:         self.image._finish()
  793:         self.failUnless(self._exists('image.gif'))
  794:         self.failIf(self._exists('image.gif.undo'))
  795:         self.failUnless(self._exists('image.1.gif'))
  796:         self.failIf(self._exists('image.1.gif.undo'))
  797: 
  798:     def testUniquePreviewName(self):
  799:         # Create a unique preview name
  800:         self.addExtImage(id='image', file=jpegImage)
  801:         self.image.manage_create_prev(100, 100, ratio=1)
  802:         self.image._finish()
  803:         self.failUnless(self._exists('image.jpg'))
  804:         self.failIf(self._exists('image.jpg.undo'))
  805:         self.failUnless(self._exists('image.1.jpg')) # Generated previews are always jpeg
  806:         self.failIf(self._exists('image.1.jpg.undo'))
  807: 
  808:     def testUndoNameOnDelete(self):
  809:         # Create a .undo file on delete
  810:         self.addExtImage(id='image', file=gifImage)
  811:         self.folder.manage_delObjects(['image'])
  812:         self.failIf(self._exists('image.gif'))
  813:         self.failUnless(self._exists('image.gif.undo'))
  814: 
  815:     def testUndoNameOnDeletePreview(self):
  816:         # Create a .undo file for the preview image on delete
  817:         self.addExtImage(id='image', file=gifImage)
  818:         self.image.manage_create_prev(100, 100, ratio=1)
  819:         self.image._finish()
  820:         self.failUnless(self._exists('image.gif'))
  821:         self.failUnless(self._exists('image.jpg'))  # Generated previews are always jpeg
  822:         self.folder.manage_delObjects(['image'])
  823:         self.failIf(self._exists('image.gif'))
  824:         self.failUnless(self._exists('image.gif.undo'))
  825:         self.failIf(self._exists('image.jpg'))
  826:         self.failUnless(self._exists('image.jpg.undo'))
  827: 
  828:     def testUndoNameOnUpload(self):
  829:         # Do not create a .undo file on upload
  830:         self.addExtImage(id='image', file=gifImage)
  831:         self.image.manage_file_upload(file=gifImage)
  832:         self.image._finish()
  833:         self.failUnless(self._exists('image.gif'))
  834:         self.failIf(self._exists('image.gif.undo'))
  835:         self.failIf(self._exists('image.1.gif'))
  836: 
  837:     def testUndoNameIsNotReused(self):
  838:         # If an .undo file exists the name is not reused
  839:         self.addExtImage(id='image', file=gifImage)
  840:         self.folder.manage_delObjects(['image'])
  841:         self.addExtImage(id='image', file=gifImage)
  842:         self.image._finish()
  843:         self.failIf(self._exists('image.gif'))
  844:         self.failUnless(self._exists('image.gif.undo'))
  845:         self.failUnless(self._exists('image.1.gif'))
  846: 
  847: 
  848: class TestRepositoryExtensions(ExtFileTestCase):
  849:     '''Test repository file extensions'''
  850: 
  851:     def afterClear(self):
  852:         ExtFileTestCase.afterClear(self)
  853:         ExtFile.REPOSITORY_EXTENSIONS = Config.MIMETYPE_REPLACE
  854: 
  855:     def testDefaultContentType(self):
  856:         # Use default content type
  857:         self.addExtImage(id='image', file=notImage)
  858:         self.image._finish()
  859:         self.failUnless(self._exists('image.exe'))
  860: 
  861:     def testDefaultContentTypeKeepsExistingExtension(self):
  862:         # Retain existing file extension if content type is octet-stream
  863:         self.addExtImage(id='image.foo', file=notImage)
  864:         self.image._finish()
  865:         self.failUnless(self._exists('image.foo'))
  866: 
  867:     def testDefaultContentTypeMimetypeAppend(self):
  868:         # Use default content type
  869:         ExtFile.REPOSITORY_EXTENSIONS = Config.MIMETYPE_APPEND
  870:         self.testDefaultContentType()
  871: 
  872:     def testDefaultContentTypeKeepsExistingExtensionMimetypeAppend(self):
  873:         # Retain existing file extension if content type is octet-stream
  874:         ExtFile.REPOSITORY_EXTENSIONS = Config.MIMETYPE_APPEND
  875:         self.testDefaultContentTypeKeepsExistingExtension()
  876: 
  877: 
  878: class TestDownloadPermission(ExtFileTestCase):
  879:     '''Tests the DownloadPermission'''
  880: 
  881:     def testPermissionExists(self):
  882:         # DownloadPermission should exist
  883:         perms = self.app.permissionsOfRole('Manager')
  884:         perms = [x['name'] for x in perms if x['selected']]
  885:         self.failUnless(ExtFile.DownloadPermission in perms)
  886: 
  887:     def testDownloadPermissionCheck(self):
  888:         # The use_download_permission_check property
  889:         # should control whether we can see the full image.
  890:         self.addExtImage(id='image', file=gifImage)
  891:         self.failUnless(self.image._access_permitted())
  892:         self.image.use_download_permission_check = 1
  893:         self.failIf(self.image._access_permitted())
  894: 
  895:     def testShowPreviewIfNoDownloadPermission(self):
  896:         # If we don't have the permission we should only
  897:         # see the preview.
  898:         self.addExtImage(id='image', file=gifImage)
  899:         self.image.use_download_permission_check = 1
  900:         self.image.manage_create_prev(maxx=10, maxy=10, ratio=1)
  901:         dummy, dummy, dummy, preview = self.image._get_file_to_serve()
  902:         self.failUnless(preview)
  903: 
  904:     def testShowIconIfNoDownloadPermission(self):
  905:         # If we don't have the permission, and there is no preview,
  906:         # we should only see the icon.
  907:         self.addExtImage(id='image', file=gifImage)
  908:         self.image.use_download_permission_check = 1
  909:         dummy, dummy, icon, dummy = self.image._get_file_to_serve()
  910:         self.failUnless(icon)
  911: 
  912:     def testPreviewTagIfNoDownloadPermission(self):
  913:         # If we don't have the permission we should only
  914:         # see the preview.
  915:         self.addExtImage(id='image', file=gifImage)
  916:         self.image.use_download_permission_check = 1
  917:         self.image.manage_create_prev(maxx=10, maxy=10, ratio=1)
  918:         tag = self.image.tag()
  919:         # Permission is not checked in static mode
  920:         if self.image.static_mode():
  921:             self.failUnless(tag.find('/static/image.jpg')>=0)
  922:         else:
  923:             self.failUnless(tag.find('/image?preview=1')>=0)
  924: 
  925:     def testIconTagIfNoDownloadPermission(self):
  926:         # If we don't have the permission, and there is no preview,
  927:         # we should only see the icon.
  928:         self.addExtImage(id='image', file=gifImage)
  929:         self.image.use_download_permission_check = 1
  930:         tag = self.image.tag()
  931:         self.failUnless(tag.find('/image?icon=1')>=0)
  932: 
  933:     def testPreviewTagIfNotWebviewable(self):
  934:         # If the image is not webviewable we should only
  935:         # see the preview.
  936:         self.addExtImage(id='image', file=tiffImage)
  937:         self.image.manage_create_prev(maxx=10, maxy=10, ratio=1)
  938:         tag = self.image.tag()
  939:         # Permission is not checked in static mode
  940:         if self.image.static_mode():
  941:             self.failUnless(tag.find('/static/image.jpg')>=0)
  942:         else:
  943:             self.failUnless(tag.find('/image?preview=1')>=0)
  944: 
  945: 
  946: class TestGetOwner(ExtFileTestCase):
  947: 
  948:     def afterSetUp(self):
  949:         ExtFileTestCase.afterSetUp(self)
  950:         self.addExtFile(id='file.zip', file=gifImage)
  951:         self.addExtImage(id='image.gif', file=gifImage)
  952: 
  953:     def testFileOwner(self):
  954:         self.assertEqual(self.file.getOwner().getId(), ZopeTestCase.user_name)
  955:         self.assertEqual(self.file.getOwnerTuple(),
  956:                          ([ZopeTestCase.folder_name, 'acl_users'], ZopeTestCase.user_name))
  957: 
  958:     def testImageOwner(self):
  959:         self.assertEqual(self.image.getOwner().getId(), ZopeTestCase.user_name)
  960:         self.assertEqual(self.image.getOwnerTuple(),
  961:                          ([ZopeTestCase.folder_name, 'acl_users'], ZopeTestCase.user_name))
  962: 
  963: 
  964: class TestFTPget(ExtFileTestCase):
  965: 
  966:     def afterSetUp(self):
  967:         ExtFileTestCase.afterSetUp(self)
  968:         self.addExtFile(id='file.zip', file=gifImage)
  969:         self.addExtImage(id='image.gif', file=gifImage)
  970: 
  971:     def testFTPgetFile(self):
  972:         from StringIO import StringIO
  973:         response = self.app.REQUEST.RESPONSE
  974:         response.stdout = StringIO() # Shut up
  975:         result = self.file.manage_FTPget()
  976:         #self.assertEqual(result, '')
  977:         self.assertEqual(response.headers.get('content-type'), 'application/zip')
  978:         self.assertEqual(response.headers.get('content-length'), '%s' % self._fsize(gifImage))
  979: 
  980:     def testFTPgetImage(self):
  981:         from StringIO import StringIO
  982:         response = self.app.REQUEST.RESPONSE
  983:         response.stdout = StringIO() # Shut up
  984:         result = self.image.manage_FTPget()
  985:         #self.assertEqual(result, '')
  986:         self.assertEqual(response.headers.get('content-type'), 'image/gif')
  987:         self.assertEqual(response.headers.get('content-length'), '%s' % self._fsize(gifImage))
  988: 
  989: 
  990: class TestPublish(ZopeTestCase.Functional, ExtFileTestCase):
  991: 
  992:     def afterSetUp(self):
  993:         ExtFileTestCase.afterSetUp(self)
  994:         self.addExtFile(id='file.zip', file=gifImage)
  995:         self.addExtImage(id='image.gif', file=gifImage)
  996: 
  997:     def testPublishFile(self):
  998:         folder_path = self.folder.absolute_url(1)
  999:         response = self.publish(folder_path+'/file.zip')
 1000:         self.assertEqual(response.getStatus(), 200)
 1001:         self.failUnless(response.getHeader('Content-Type').startswith('application/zip'))
 1002: 
 1003:     def testPublishImage(self):
 1004:         folder_path = self.folder.absolute_url(1)
 1005:         response = self.publish(folder_path+'/image.gif')
 1006:         self.assertEqual(response.getStatus(), 200)
 1007:         self.failUnless(response.getHeader('Content-Type').startswith('image/gif'))
 1008: 
 1009: 
 1010: def test_suite():
 1011:     from unittest import TestSuite, makeSuite
 1012:     suite = TestSuite()
 1013:     suite.addTest(makeSuite(TestExtFileAdd))
 1014:     suite.addTest(makeSuite(TestExtImageAdd))
 1015:     suite.addTest(makeSuite(TestExtFileUpload))
 1016:     suite.addTest(makeSuite(TestExtImageUpload))
 1017:     suite.addTest(makeSuite(TestExtFileContentType))
 1018:     suite.addTest(makeSuite(TestExtImageContentType))
 1019:     suite.addTest(makeSuite(TestExtFileCopyPaste))
 1020:     suite.addTest(makeSuite(TestExtImageCopyPaste))
 1021:     suite.addTest(makeSuite(TestRepository))
 1022:     suite.addTest(makeSuite(TestRepositoryFiles))
 1023:     suite.addTest(makeSuite(TestRepositoryExtensions))
 1024:     suite.addTest(makeSuite(TestDownloadPermission))
 1025:     suite.addTest(makeSuite(TestGetOwner))
 1026:     suite.addTest(makeSuite(TestFTPget))
 1027:     suite.addTest(makeSuite(TestPublish))
 1028:     return suite
 1029: 
 1030: if __name__ == '__main__':
 1031:     framework()
 1032: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>