Annotation of ExtFile/tests/testExtImage.py, revision 1.1.1.1

1.1       dwinter     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>