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

1.1       dwinter     1: #
                      2: # Tests transactional behavior of ExtFiles
                      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.utils.startZServer(4)
                     13: 
                     14: from Products.ExtFile.tests.ExtFileTestCase import ExtFileTestCase
                     15: from Products.ExtFile.tests.ExtFileTestCase import gifImage, jpegImage, notImage
                     16: from Products.ExtFile.tests.ExtFileTestCase import copymove_perms
                     17: from Products.ExtFile.ExtImage import NO_PREVIEW, GENERATE, UPLOAD_NORESIZE, UPLOAD_RESIZE
                     18: from Products.ExtFile import transaction, TM
                     19: from Acquisition import aq_base
                     20: 
                     21: 
                     22: class TestTransactions(ExtFileTestCase):
                     23:     '''Test ExtFile/ExtImage transaction awareness.'''
                     24: 
                     25:     def beforeClose(self):
                     26:         transaction.commit()  # Commit the cleaned-up fixture
                     27: 
                     28:     def testAddFileCommit(self):
                     29:         self.addExtFile(id='file', file=gifImage)
                     30:         transaction.commit()
                     31:         self.failUnless(self._exists('file.exe'))
                     32: 
                     33:     def testAddFileAbort(self):
                     34:         # Aborting the transaction leaves the repository empty
                     35:         self.addExtFile(id='file', file=gifImage)
                     36:         transaction.savepoint(1)   # Wuhuu, force object rollback
                     37:         transaction.abort()
                     38:         self.failIf(hasattr(aq_base(self.folder), 'file'))
                     39:         self.failIf(self._exists('file.exe'))
                     40:         self.failIf(self._exists('file.exe.tmp'))
                     41: 
                     42:     def testAddImageCommit(self):
                     43:         self.addExtImage(id='image', file=gifImage)
                     44:         transaction.commit()
                     45:         self.failUnless(self._exists('image.gif'))
                     46: 
                     47:     def testAddImageAbort(self):
                     48:         # Aborting the transaction leaves the repository empty
                     49:         self.addExtImage(id='image', file=gifImage)
                     50:         transaction.savepoint(1)   # Wuhuu, force object rollback
                     51:         transaction.abort()
                     52:         self.failIf(hasattr(aq_base(self.folder), 'image'))
                     53:         self.failIf(self._exists('image.gif'))
                     54:         self.failIf(self._exists('image.gif.tmp'))
                     55: 
                     56:     def testAddImageAbortWithPreview(self):
                     57:         # Aborting the transaction leaves the repository empty
                     58:         self.addExtImage(id='image', file=gifImage)
                     59:         self.image.manage_create_prev(maxx=10, maxy=10)
                     60:         transaction.savepoint(1)   # Wuhuu, force object rollback
                     61:         transaction.abort()
                     62:         self.failIf(hasattr(aq_base(self.folder), 'image'))
                     63:         self.failIf(self._exists('image.gif'))
                     64:         self.failIf(self._exists('image.gif.tmp'))
                     65:         self.failIf(self._exists('image.jpg'))
                     66:         self.failIf(self._exists('image.jpg.tmp'))
                     67: 
                     68:     def testAddMoreThanOneFileInSeparateTransactions(self):
                     69:         # First file
                     70:         self.addExtFile(id='fred', file=notImage)
                     71:         transaction.commit()
                     72:         self.failUnless(self._exists('fred.exe'))
                     73:         self.failIf(self._exists('fred.exe.tmp'))
                     74:         # Second file
                     75:         self.addExtFile(id='barney', file=notImage)
                     76:         transaction.commit()
                     77:         self.failUnless(self._exists('barney.exe'))
                     78:         self.failIf(self._exists('barney.exe.tmp'))
                     79:         # Third file
                     80:         self.addExtFile(id='betty', file=notImage)
                     81:         transaction.commit()
                     82:         self.failUnless(self._exists('betty.exe'))
                     83:         self.failIf(self._exists('betty.exe.tmp'))
                     84: 
                     85:     def testUploadFileIntoExistingInSeparateTransactions(self):
                     86:         # Create a file 'fred'
                     87:         self.addExtFile(id='fred', file=notImage)
                     88:         self.failUnless(TM.contains(self.file))
                     89:         self.failUnless(self._exists('fred.exe.tmp'))
                     90:         transaction.commit()
                     91:         self.failIf(TM.contains(self.file))
                     92:         self.failUnless(self._exists('fred.exe'))
                     93:         self.failIf(self._exists('fred.exe.tmp'))
                     94:         # Upload new file into 'fred'
                     95:         self.file.manage_file_upload(file=gifImage)
                     96:         self.failUnless(TM.contains(self.file))
                     97:         self.failUnless(self._exists('fred.exe'))
                     98:         self.failUnless(self._exists('fred.exe.tmp'))
                     99:         transaction.commit()
                    100:         self.failIf(TM.contains(self.file))
                    101:         self.failUnless(self._exists('fred.exe'))
                    102:         self.failIf(self._exists('fred.exe.tmp'))
                    103: 
                    104: 
                    105: class TestTransactionManager(ExtFileTestCase):
                    106: 
                    107:     def afterSetUp(self):
                    108:         ExtFileTestCase.afterSetUp(self)
                    109:         self.addExtFile(id='file', file=notImage)
                    110:         self.file._register()
                    111: 
                    112:     def beforeClose(self):
                    113:         transaction.commit()  # Commit the cleaned-up fixture
                    114: 
                    115:     def testBegin(self):
                    116:         self.assertEqual(self.file._v_begin_called, 1)
                    117: 
                    118:     def testFinish(self):
                    119:         transaction.commit()
                    120:         self.assertEqual(self.file._v_finish_called, 1)
                    121: 
                    122:     def testAbort(self):
                    123:         transaction.abort()
                    124:         self.assertEqual(self.file._v_abort_called, 1)
                    125: 
                    126: 
                    127: class TestExtFileTransactions(ExtFileTestCase):
                    128: 
                    129:     def afterSetUp(self):
                    130:         ExtFileTestCase.afterSetUp(self)
                    131:         self.setPermissions(copymove_perms)
                    132:         self.folder.manage_addFolder('subfolder')
                    133:         self.subfolder = self.folder.subfolder
                    134: 
                    135:     def beforeClose(self):
                    136:         transaction.commit()  # Commit the cleaned-up fixture
                    137: 
                    138:     def testManageFileUploadCreatesTempFile(self):
                    139:         self.addExtFile(id='file', file='')
                    140:         self.file.manage_file_upload(file=notImage)
                    141:         self.failUnless(self._exists('file.exe.tmp'), 'Missing .tmp file')
                    142:         self.failIf(self._exists('file.exe'), 'No .tmp file used')
                    143: 
                    144:     def testManageHTTPUploadCreatesTempFile(self):
                    145:         self.addExtFile(id='file', file='')
                    146:         self.file.manage_http_upload(url=self.app.NotImage.absolute_url())
                    147:         self.failUnless(self._exists('file.exe.tmp'), 'Missing .tmp file')
                    148:         self.failIf(self._exists('file.exe'), 'No .tmp file used')
                    149: 
                    150:     def testPUTCreatesTempFile(self):
                    151:         self.addExtFile(id='file', file='')
                    152:         request = self.app.REQUEST
                    153:         request['BODYFILE'] = open(notImage, 'rb')
                    154:         self.file.PUT(request, request.RESPONSE)
                    155:         self.failUnless(self._exists('file.exe.tmp'), 'Missing .tmp file')
                    156:         self.failIf(self._exists('file.exe'), 'No .tmp file used')
                    157: 
                    158:     def testFinishCommitsTempFile(self):
                    159:         self.addExtFile(id='file', file=notImage)
                    160:         self.failUnless(self._exists('file.exe.tmp'))
                    161:         self.file._finish()
                    162:         self.failUnless(self._exists('file.exe'))
                    163:         self.failIf(self._exists('file.exe.tmp'))
                    164: 
                    165:     def testAbortNukesTempFile(self):
                    166:         self.addExtFile(id='file', file=notImage)
                    167:         self.failUnless(self._exists('file.exe.tmp'))
                    168:         self.file._abort()
                    169:         self.failIf(self._exists('file.exe.tmp'))
                    170:         self.failIf(self._exists('file.exe'))
                    171: 
                    172:     def testUndoCreatesTempFile(self):
                    173:         self.addExtFile(id='file', file=notImage)
                    174:         self.file._finish()
                    175:         os.rename(self._fsname('file.exe'), self._fsname('file.exe.undo'))
                    176:         self.file._undo()
                    177:         self.failIf(self._exists('file.exe.undo'))
                    178:         self.failUnless(self._exists('file.exe.tmp'))
                    179: 
                    180:     def testIsBrokenUsesTempFile(self):
                    181:         self.addExtFile(id='file', file=notImage)
                    182:         self.failUnless(self._exists('file.exe.tmp'))
                    183:         self.failIf(self._exists('file.exe'))
                    184:         self.failIf(self.file.is_broken())
                    185: 
                    186:     def testIsBrokenUsesMainFileIfTempFileNotPresent(self):
                    187:         self.addExtFile(id='file', file=notImage)
                    188:         self.file._finish()
                    189:         self.failUnless(self._exists('file.exe'))
                    190:         self.failIf(self._exists('file.exe.tmp'))
                    191:         self.failIf(self.file.is_broken())
                    192: 
                    193:     def testIsBrokenTriesToUndoIfMainFileNotPresent(self):
                    194:         self.addExtFile(id='file', file=notImage)
                    195:         os.rename(self._fsname('file.exe.tmp'), self._fsname('file.exe.undo'))
                    196:         self.failUnless(self._exists('file.exe.undo'))
                    197:         self.failIf(self._exists('file.exe'))
                    198:         self.failIf(self.file.is_broken())
                    199:         self.failUnless(self._exists('file.exe.tmp'))
                    200:         self.failIf(self._exists('file.exe.undo'))
                    201: 
                    202:     def testIsBrokenReturnsTrueIfBroken(self):
                    203:         self.addExtFile(id='file', file=notImage)
                    204:         os.remove(self._fsname('file.exe.tmp'))
                    205:         self.failUnless(self.file.is_broken())
                    206: 
                    207:     def testGetSizeUsesTempFile(self):
                    208:         self.addExtFile(id='file', file=notImage)
                    209:         self.failUnless(self._exists('file.exe.tmp'))
                    210:         self.failIf(self._exists('file.exe'))
                    211:         self.failIfEqual(self.file.get_size(), 0)
                    212: 
                    213:     def testGetSizeUsesMainFileIfTempFileNotPresent(self):
                    214:         self.addExtFile(id='file', file=notImage)
                    215:         self.file._finish()
                    216:         self.failUnless(self._exists('file.exe'))
                    217:         self.failIf(self._exists('file.exe.tmp'))
                    218:         self.failIfEqual(self.file.get_size(), 0)
                    219: 
                    220:     def testGetSizeTriesToUndoIfMainFileNotPresent(self):
                    221:         self.addExtFile(id='file', file=notImage)
                    222:         self.file._finish()
                    223:         os.rename(self._fsname('file.exe'), self._fsname('file.exe.undo'))
                    224:         self.failUnless(self._exists('file.exe.undo'))
                    225:         self.failIf(self._exists('file.exe'))
                    226:         self.failIfEqual(self.file.get_size(), 0)
                    227:         self.failUnless(self._exists('file.exe.tmp'))
                    228:         self.failIf(self._exists('file.exe.undo'))
                    229: 
                    230:     def testGetSizeReturnsZeroIfBroken(self):
                    231:         self.addExtFile(id='file', file=notImage)
                    232:         os.remove(self._fsname('file.exe.tmp'))
                    233:         self.assertEqual(self.file.get_size(), 0)
                    234: 
                    235:     def testManageFileUploadRegistersWithTM(self):
                    236:         self.addExtFile(id='file', file='')
                    237:         self.assertEqual(getattr(self.file, '_v_begin_called', 0), 0)
                    238:         self.file.manage_file_upload(file=notImage)
                    239:         self.assertEqual(getattr(self.file, '_v_begin_called', 0), 1)
                    240: 
                    241:     def testManageHTTPUploadRegistersWithTM(self):
                    242:         self.addExtFile(id='file', file='')
                    243:         self.assertEqual(getattr(self.file, '_v_begin_called', 0), 0)
                    244:         self.file.manage_http_upload(url=self.app.NotImage.absolute_url())
                    245:         self.assertEqual(getattr(self.file, '_v_begin_called', 0), 1)
                    246: 
                    247:     def testPUTRegistersWithTM(self):
                    248:         self.addExtFile(id='file', file='')
                    249:         request = self.app.REQUEST
                    250:         request['BODYFILE'] = open(notImage, 'rb')
                    251:         self.assertEqual(getattr(self.file, '_v_begin_called', 0), 0)
                    252:         self.file.PUT(request, request.RESPONSE)
                    253:         self.assertEqual(getattr(self.file, '_v_begin_called', 0), 1)
                    254: 
                    255:     def testUndoRegistersWithTM(self):
                    256:         self.addExtFile(id='file', file=notImage)
                    257:         os.rename(self._fsname('file.exe.tmp'), self._fsname('file.exe.undo'))
                    258:         self.file._v_begin_called = 0   # Clear
                    259:         TM.remove(self.file)            # Clear
                    260:         self.assertEqual(getattr(self.file, '_v_begin_called', 0), 0)
                    261:         self.file._undo()
                    262:         self.assertEqual(getattr(self.file, '_v_begin_called', 0), 1)
                    263:         self.failUnless(self._exists('file.exe.tmp'))
                    264: 
                    265:     def testGetNewUfnSkipsTempFile(self):
                    266:         self.addExtFile(id='file', file=notImage)
                    267:         self.failUnless(self._exists('file.exe.tmp'))
                    268:         fn = self.file._get_new_ufn(self.file.filename)
                    269:         self.assertEqual(fn, ['file.1.exe'])
                    270: 
                    271:     def testGetFileToServeDoesNotUseTempFile(self):
                    272:         self.addExtFile(id='file', file=notImage)
                    273:         self.failUnless(self._exists('file.exe.tmp'))
                    274:         fn = self.file._get_file_to_serve()[0]
                    275:         self.assertEqual(fn, ['file.exe'])
                    276: 
                    277:     def testManageBeforeDeleteUsesTempFile(self):
                    278:         self.addExtFile(id='file', file=notImage)
                    279:         self.failUnless(self._exists('file.exe.tmp'))
                    280:         self.folder._delObject('file')
                    281:         self.failUnless(self._exists('file.exe.undo'))
                    282:         self.failIf(self._exists('file.exe'))
                    283: 
                    284:     def testManageBeforeDeleteNukesMainFileIfTempFilePresent(self):
                    285:         self.addExtFile(id='file', file=notImage)
                    286:         self.file._finish()
                    287:         self.file.manage_file_upload(file=notImage)
                    288:         self.failUnless(self._exists('file.exe'))
                    289:         self.failUnless(self._exists('file.exe.tmp'))
                    290:         self.folder._delObject('file')
                    291:         self.failUnless(self._exists('file.exe.undo'))
                    292:         self.failIf(self._exists('file.exe'))
                    293: 
                    294:     def testManageBeforeDeleteUsesMainFileIfTempFileNotPresent(self):
                    295:         self.addExtFile(id='file', file=notImage)
                    296:         self.file._finish()
                    297:         self.failUnless(self._exists('file.exe'))
                    298:         self.failIf(self._exists('file.exe.tmp'))
                    299:         self.folder._delObject('file')
                    300:         self.failUnless(self._exists('file.exe.undo'))
                    301:         self.failIf(self._exists('file.exe'))
                    302: 
                    303:     def testManageAfterCloneCreatesTempFile(self):
                    304:         self.addExtFile(id='file', file=notImage)
                    305:         self.file._finish()
                    306:         transaction.savepoint(1) # Need a _p_oid
                    307:         cb = self.folder.manage_copyObjects(['file'])
                    308:         self.subfolder.manage_pasteObjects(cb)
                    309:         self.failUnless(self._exists('file.exe'))       # original
                    310:         self.failUnless(self._exists('file.1.exe.tmp'))  # copy
                    311:         self.assertEqual(self.subfolder.file.filename, ['file.1.exe'])
                    312: 
                    313:     def testManageAfterCloneUsesTempFileAsSource(self):
                    314:         self.addExtFile(id='file', file=notImage)
                    315:         transaction.savepoint(1) # Need a _p_oid
                    316:         self.subfolder.manage_clone(self.file, 'file')
                    317:         self.failUnless(self._exists('file.exe.tmp'))   # original
                    318:         self.failUnless(self._exists('file.1.exe.tmp'))  # copy
                    319: 
                    320:     def testManageAfterCloneUsesMainFileIfTempFileNotPresent(self):
                    321:         self.addExtFile(id='file', file=notImage)
                    322:         self.file._finish()
                    323:         transaction.savepoint(1) # Need a _p_oid
                    324:         self.subfolder.manage_clone(self.file, 'file')
                    325:         self.failUnless(self._exists('file.exe'))       # original
                    326:         self.failUnless(self._exists('file.1.exe.tmp'))  # copy
                    327: 
                    328:     def testManageAfterCloneTriesToUndoIfTempFileNotPresent(self):
                    329:         self.addExtFile(id='file', file=notImage)
                    330:         self.file._finish()
                    331:         os.rename(self._fsname('file.exe'), self._fsname('file.exe.undo'))
                    332:         transaction.savepoint(1) # Need a _p_oid
                    333:         self.subfolder.manage_clone(self.file, 'file')
                    334:         self.failUnless(self._exists('file.exe.tmp'))   # restored original
                    335:         self.failUnless(self._exists('file.1.exe.tmp'))  # copy
                    336: 
                    337:     def testManageAfterCloneRegistersWithTM(self):
                    338:         self.addExtFile(id='file', file=notImage)
                    339:         self.file._finish()
                    340:         self.file._v_begin_called = 0   # Clear
                    341:         TM.remove(self.file)            # Clear
                    342:         transaction.savepoint(1) # Need a _p_oid
                    343:         self.assertEqual(getattr(self.subfolder.file, '_v_begin_called', 0), 0)
                    344:         self.subfolder.manage_clone(self.file, 'file')
                    345:         self.assertEqual(getattr(self.subfolder.file, '_v_begin_called', 0), 1)
                    346: 
                    347: 
                    348: class TestExtImageTransactions(ExtFileTestCase):
                    349: 
                    350:     def afterSetUp(self):
                    351:         ExtFileTestCase.afterSetUp(self)
                    352:         self.setPermissions(copymove_perms)
                    353:         self.folder.manage_addFolder('subfolder')
                    354:         self.subfolder = self.folder.subfolder
                    355: 
                    356:     def beforeClose(self):
                    357:         transaction.commit()  # Commit the cleaned-up fixture
                    358: 
                    359:     def testManageFileUploadCreatesTempImage(self):
                    360:         self.addExtImage(id='image', file='')
                    361:         self.image.manage_file_upload(file=gifImage)
                    362:         self.failUnless(self._exists('image.gif.tmp'), 'Missing .tmp file')
                    363:         self.failIf(self._exists('image.gif'), 'No .tmp file used')
                    364: 
                    365:     def testManageFileUploadCreatesTempPreview(self):
                    366:         self.addExtImage(id='image', file='')
                    367:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    368:         self.failUnless(self._exists('image.jpg.tmp'), 'Missing .tmp file')
                    369:         self.failIf(self._exists('image.jpg'), 'No .tmp file used')
                    370: 
                    371:     def testManageFileUploadCreatesTempPreviewIfResize(self):
                    372:         self.addExtImage(id='image', file='')
                    373:         self.image.manage_file_upload(file=jpegImage, is_preview=1, create_prev=UPLOAD_RESIZE, maxx=10, maxy=10)
                    374:         self.failUnless(self._exists('image.jpg.tmp'), 'Missing .tmp file')
                    375:         self.failIf(self._exists('image.jpg'), 'No .tmp file used')
                    376: 
                    377:     def testManageFileUploadCreatesTempPreviewIfGenerate(self):
                    378:         self.addExtImage(id='image', file='')
                    379:         self.image.manage_file_upload(file=jpegImage, create_prev=GENERATE, maxx=10, maxy=10)
                    380:         self.failUnless(self._exists('image.jpg.tmp'), 'Missing .tmp file') # main image
                    381:         self.failIf(self._exists('image.jpg'), 'No .tmp file used')
                    382:         self.failUnless(self._exists('image.1.jpg.tmp'), 'Missing .tmp file') # preview
                    383:         self.failIf(self._exists('image.1.jpg'), 'No .tmp file used')
                    384: 
                    385:     def testManageHTTPUploadCreatesTempImage(self):
                    386:         self.addExtImage(id='image', file='')
                    387:         self.image.manage_http_upload(url=self.app.GifImage.absolute_url())
                    388:         self.failUnless(self._exists('image.gif.tmp'), 'Missing .tmp file')
                    389:         self.failIf(self._exists('image.gif'), 'No .tmp file used')
                    390: 
                    391:     def testManageHTTPUploadCreatesTempPreview(self):
                    392:         self.addExtImage(id='image', file='')
                    393:         self.image.manage_http_upload(url=self.app.GifImage.absolute_url(), is_preview=1)
                    394:         self.failUnless(self._exists('image.gif.tmp'), 'Missing .tmp file')
                    395:         self.failIf(self._exists('image.gif'), 'No .tmp file used')
                    396: 
                    397:     #def testManageHTTPUploadCreatesTempPreviewIfAutogen(self):
                    398:     #    self.addExtImage(id='image', file='')
                    399:     #    self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    400:     #    preview_size = self.image.get_prev_size()
                    401:     #    self.image.manage_http_upload(url=self.app.GifImage.absolute_url())
                    402:     #    self.failUnless(self._exists('image.gif.tmp'), 'Missing .tmp file') # main image
                    403:     #    self.failIf(self._exists('image.gif'), 'No .tmp file used')
                    404:     #    self.failUnless(self._exists('image.jpg.tmp'), 'Missing .tmp file') # preview
                    405:     #    self.failIf(self._exists('image.jpg'), 'No .tmp file used')
                    406:     #    # The preview file should no longer be the same
                    407:     #    self.failIfEqual(preview_size, self.image.get_prev_size())
                    408: 
                    409:     def testPUTCreatesTempImage(self):
                    410:         self.addExtImage(id='image', file='')
                    411:         request = self.app.REQUEST
                    412:         request['BODYFILE'] = open(jpegImage, 'rb')
                    413:         self.image.PUT(request, request.RESPONSE)
                    414:         self.failUnless(self._exists('image.jpg.tmp'), 'Missing .tmp file')
                    415:         self.failIf(self._exists('image.jpg'), 'No .tmp file used')
                    416: 
                    417:     def testPUTCreatesTempPreviewIfAutogen(self):
                    418:         self.addExtImage(id='image', file='')
                    419:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    420:         preview_size = self.image.get_prev_size()
                    421:         request = self.app.REQUEST
                    422:         request['BODYFILE'] = open(gifImage, 'rb')
                    423:         self.image.PUT(request, request.RESPONSE)
                    424:         self.failUnless(self._exists('image.gif.tmp'), 'Missing .tmp file') # main image
                    425:         self.failIf(self._exists('image.gif'), 'No .tmp file used')
                    426:         self.failUnless(self._exists('image.jpg.tmp'), 'Missing .tmp file') # preview
                    427:         self.failIf(self._exists('image.jpg'), 'No .tmp file used')
                    428:         # The preview file should no longer be the same
                    429:         self.failIfEqual(preview_size, self.image.get_prev_size())
                    430: 
                    431:     def testFinishCommitsTempImage(self):
                    432:         self.addExtImage(id='image', file=jpegImage)
                    433:         self.failUnless(self._exists('image.jpg.tmp'))
                    434:         self.image._finish()
                    435:         self.failUnless(self._exists('image.jpg'))
                    436:         self.failIf(self._exists('image.jpg.tmp'))
                    437: 
                    438:     def testFinishCommitsTempPreview(self):
                    439:         self.addExtImage(id='image', file=jpegImage)
                    440:         self.image.manage_create_prev(maxx=10, maxy=10)
                    441:         self.failUnless(self._exists('image.jpg.tmp'))
                    442:         self.failUnless(self._exists('image.1.jpg.tmp'))
                    443:         self.image._finish()
                    444:         self.failUnless(self._exists('image.jpg'))
                    445:         self.failIf(self._exists('image.jpg.tmp'))
                    446:         self.failUnless(self._exists('image.1.jpg'))
                    447:         self.failIf(self._exists('image.1.jpg.tmp'))
                    448: 
                    449:     def testAbortNukesTempImage(self):
                    450:         self.addExtImage(id='image', file=jpegImage)
                    451:         self.failUnless(self._exists('image.jpg.tmp'))
                    452:         self.image._abort()
                    453:         self.failIf(self._exists('image.jpg'))
                    454:         self.failIf(self._exists('image.jpg.tmp'))
                    455: 
                    456:     def testAbortNukesTempPreview(self):
                    457:         self.addExtImage(id='image', file=jpegImage)
                    458:         self.image.manage_create_prev(maxx=10, maxy=10)
                    459:         self.failUnless(self._exists('image.jpg.tmp'))
                    460:         self.failUnless(self._exists('image.1.jpg.tmp'))
                    461:         self.image._abort()
                    462:         self.failIf(self._exists('image.jpg'))
                    463:         self.failIf(self._exists('image.jpg.tmp'))
                    464:         self.failIf(self._exists('image.1.jpg'))
                    465:         self.failIf(self._exists('image.1.jpg.tmp'))
                    466: 
                    467:     def testUndoCreatesTempImage(self):
                    468:         self.addExtImage(id='image', file=jpegImage)
                    469:         self.image._finish()
                    470:         os.rename(self._fsname('image.jpg'), self._fsname('image.jpg.undo'))
                    471:         self.image._undo()
                    472:         self.failIf(self._exists('image.jpg.undo'))
                    473:         self.failUnless(self._exists('image.jpg.tmp'))
                    474: 
                    475:     def testUndoCreatesTempPreview(self):
                    476:         self.addExtImage(id='image', file=jpegImage)
                    477:         self.image.manage_create_prev(maxx=10, maxy=10)
                    478:         self.image._finish()
                    479:         os.rename(self._fsname('image.jpg'), self._fsname('image.jpg.undo'))
                    480:         os.rename(self._fsname('image.1.jpg'), self._fsname('image.1.jpg.undo'))
                    481:         self.image._undo()
                    482:         self.failIf(self._exists('image.jpg.undo'))
                    483:         self.failUnless(self._exists('image.jpg.tmp'))
                    484:         self.failIf(self._exists('image.1.jpg.undo'))
                    485:         self.failUnless(self._exists('image.1.jpg.tmp'))
                    486: 
                    487:     def testIsBrokenReturnsTrueIfPreviewBroken(self):
                    488:         self.addExtImage(id='image', file=jpegImage)
                    489:         self.image.manage_create_prev(maxx=10, maxy=10)
                    490:         os.remove(self._fsname('image.1.jpg.tmp'))
                    491:         self.failUnless(self.image.is_broken())
                    492: 
                    493:     def testManageFileUploadRegistersPreviewWithTM(self):
                    494:         self.addExtImage(id='image', file='')
                    495:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 0)
                    496:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    497:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    498: 
                    499:     def testManageFileUploadRegistersPreviewWithTMIfResize(self):
                    500:         self.addExtImage(id='image', file='')
                    501:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 0)
                    502:         self.image.manage_file_upload(file=jpegImage, is_preview=1, create_prev=UPLOAD_RESIZE, maxx=10, maxy=10)
                    503:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    504: 
                    505:     # XXX: Not testable atm
                    506:     def DISABLED_testManageFileUploadRegistersPreviewWithTMIfGenerate(self):
                    507:         self.addExtImage(id='image', file='')
                    508:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 0)
                    509:         self.image.manage_file_upload(file=jpegImage, create_prev=GENERATE, maxx=10, maxy=10)
                    510:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    511: 
                    512:     def testManageHTTPUploadRegistersPreviewWithTM(self):
                    513:         self.addExtImage(id='image', file='')
                    514:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 0)
                    515:         self.image.manage_http_upload(url=self.app.GifImage.absolute_url(), is_preview=1)
                    516:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    517: 
                    518:     # XXX: Not testable atm
                    519:     def DISABLED_testManageHTTPUploadRegistersPreviewWithTMIfAutogen(self):
                    520:         self.addExtImage(id='image', file='')
                    521:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    522:         self.image._v_begin_called = 0  # Clear
                    523:         TM.remove(self.image)           # Clear
                    524:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 0)
                    525:         self.image.manage_http_upload(url=self.app.GifImage.absolute_url())
                    526:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    527: 
                    528:     # XXX: Not testable atm
                    529:     def DISABLED_testPUTRegistersPreviewWithTMIfAutogen(self):
                    530:         self.addExtImage(id='image', file='')
                    531:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    532:         self.image._v_begin_called = 0  # Clear
                    533:         TM.remove(self.image)           # Clear
                    534:         request = self.app.REQUEST
                    535:         request['BODYFILE'] = open(jpegImage, 'rb')
                    536:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 0)
                    537:         self.image.PUT(request, request.RESPONSE)
                    538:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    539: 
                    540:     def testUndoRegistersPreviewWithTM(self):
                    541:         self.addExtImage(id='image', file='')
                    542:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    543:         os.rename(self._fsname('image.jpg.tmp'), self._fsname('image.jpg.undo'))
                    544:         self.image._v_begin_called = 0  # Clear
                    545:         TM.remove(self.image)           # Clear
                    546:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 0)
                    547:         self.image._undo()
                    548:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    549:         self.failUnless(self._exists('image.jpg.tmp'))
                    550: 
                    551:     def testManageBeforeDeleteUsesTempPreview(self):
                    552:         self.addExtImage(id='image', file='')
                    553:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    554:         self.failUnless(self._exists('image.jpg.tmp'))
                    555:         self.folder._delObject('image')
                    556:         self.failUnless(self._exists('image.jpg.undo'))
                    557:         self.failIf(self._exists('image.jpg.tmp'))
                    558:         self.failIf(self._exists('image.jpg'))
                    559: 
                    560:     def testManageBeforeDeleteNukesPreviewIfTempPreviewPresent(self):
                    561:         self.addExtImage(id='image', file='')
                    562:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    563:         self.image._finish()
                    564:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    565:         self.failUnless(self._exists('image.jpg'))
                    566:         self.failUnless(self._exists('image.jpg.tmp'))
                    567:         self.folder._delObject('image')
                    568:         self.failUnless(self._exists('image.jpg.undo'))
                    569:         self.failIf(self._exists('image.jpg.tmp'))
                    570:         self.failIf(self._exists('image.jpg'))
                    571: 
                    572:     def testManageBeforeDeleteUsesPreviewIfTempPreviewNotPresent(self):
                    573:         self.addExtImage(id='image', file='')
                    574:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    575:         self.image._finish()
                    576:         self.failUnless(self._exists('image.jpg'))
                    577:         self.failIf(self._exists('image.jpg.tmp'))
                    578:         self.folder._delObject('image')
                    579:         self.failUnless(self._exists('image.jpg.undo'))
                    580:         self.failIf(self._exists('image.jpg.tmp'))
                    581:         self.failIf(self._exists('image.jpg'))
                    582: 
                    583:     def testManageAfterCloneCreatesTempPreview(self):
                    584:         self.addExtImage(id='image', file='')
                    585:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    586:         self.image._finish()
                    587:         transaction.savepoint(1) # Need a _p_oid
                    588:         cb = self.folder.manage_copyObjects(['image'])
                    589:         self.subfolder.manage_pasteObjects(cb)
                    590:         self.failUnless(self._exists('image.jpg'))      # original
                    591:         self.failUnless(self._exists('image.1.jpg.tmp')) # copy
                    592:         self.assertEqual(self.subfolder.image.prev_filename, ['image.1.jpg'])
                    593: 
                    594:     def testManageAfterCloneUsesTempPreviewAsSource(self):
                    595:         self.addExtImage(id='image', file='')
                    596:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    597:         transaction.savepoint(1) # Need a _p_oid
                    598:         self.subfolder.manage_clone(self.image, 'image')
                    599:         self.failUnless(self._exists('image.jpg.tmp'))  # original
                    600:         self.failUnless(self._exists('image.1.jpg.tmp')) # copy
                    601: 
                    602:     def testManageAfterCloneUsesPreviewIfTempPreviewNotPresent(self):
                    603:         self.addExtImage(id='image', file='')
                    604:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    605:         self.image._finish()
                    606:         transaction.savepoint(1) # Need a _p_oid
                    607:         self.subfolder.manage_clone(self.image, 'image')
                    608:         self.failUnless(self._exists('image.jpg'))      # original
                    609:         self.failUnless(self._exists('image.1.jpg.tmp')) # copy
                    610: 
                    611:     def testManageAfterCloneTriesToUndoIfTempPreviewNotPresent(self):
                    612:         self.addExtImage(id='image', file='')
                    613:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    614:         self.image._finish()
                    615:         os.rename(self._fsname('image.jpg'), self._fsname('image.jpg.undo'))
                    616:         transaction.savepoint(1) # Need a _p_oid
                    617:         self.subfolder.manage_clone(self.image, 'image')
                    618:         self.failUnless(self._exists('image.jpg.tmp'))  # restored original
                    619:         self.failUnless(self._exists('image.1.jpg.tmp')) # copy
                    620: 
                    621:     def testManageAfterCloneUsesTempPreviewIfOneFile(self):
                    622:         # XXX: Fishy. It seems this tests an impossible state
                    623:         self.addExtImage(id='image', file=jpegImage)
                    624:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    625:         # Simulate main and preview being one file
                    626:         self.image.prev_filename = ['image.2.jpg']
                    627:         transaction.savepoint(1) # Need a _p_oid
                    628:         self.subfolder.manage_clone(self.image, 'image')
                    629:         self.failUnless(self._exists('image.jpg.tmp'))  # original
                    630:         self.failUnless(self._exists('image.1.jpg.tmp')) # original preview
                    631:         self.failUnless(self._exists('image.2.jpg.tmp')) # copy
                    632:         self.assertEqual(self.subfolder.image.prev_filename, ['image.2.jpg'])
                    633:         self.assertEqual(self.subfolder.image.filename, ['image.2.jpg'])
                    634: 
                    635:     # XXX: Not testable atm
                    636:     def DISABLED_testManageAfterCloneRegistersWithTM(self):
                    637:         pass
                    638: 
                    639:     def testManageCreatePrevCreatesTempFile(self):
                    640:         self.addExtImage(id='image', file=jpegImage)
                    641:         self.image.manage_create_prev(maxx=10, maxy=10)
                    642:         self.failUnless(self._exists('image.jpg.tmp'))
                    643:         self.failUnless(self._exists('image.1.jpg.tmp')) # preview
                    644:         self.assertEqual(self.image.prev_filename, ['image.1.jpg'])
                    645: 
                    646:     def testCreatePrevRegistersWithTM(self):
                    647:         self.addExtImage(id='image', file=jpegImage)
                    648:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    649:         self.image._v_begin_called = 0  # Clear
                    650:         TM.remove(self.image)           # Clear
                    651:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 0)
                    652:         self.image.manage_create_prev(maxx=10, maxy=10)
                    653:         self.assertEqual(getattr(self.image, '_v_begin_called', 0), 1)
                    654: 
                    655:     def testManageDelPrevUsesTempFile(self):
                    656:         self.addExtImage(id='image', file='')
                    657:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    658:         self.failUnless(self._exists('image.jpg.tmp'))
                    659:         self.image.manage_del_prev()
                    660:         self.failUnless(self._exists('image.jpg.undo'))
                    661:         self.failIf(self._exists('image.jpg.tmp'))
                    662:         self.failIf(self._exists('image.jpg'))
                    663: 
                    664:     def testManageDelPrevNukesPreviewIfTempPreviewPresent(self):
                    665:         self.addExtImage(id='image', file='')
                    666:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    667:         self.image._finish()
                    668:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    669:         self.failUnless(self._exists('image.jpg'))
                    670:         self.failUnless(self._exists('image.jpg.tmp'))
                    671:         self.image.manage_del_prev()
                    672:         self.failUnless(self._exists('image.jpg.undo'))
                    673:         self.failIf(self._exists('image.jpg.tmp'))
                    674:         self.failIf(self._exists('image.jpg'))
                    675: 
                    676:     def testManageDelPrevUsesPreviewIfTempPreviewNotPresent(self):
                    677:         self.addExtImage(id='image', file='')
                    678:         self.image.manage_file_upload(file=jpegImage, is_preview=1)
                    679:         self.image._finish()
                    680:         self.failUnless(self._exists('image.jpg'))
                    681:         self.failIf(self._exists('image.jpg.tmp'))
                    682:         self.image.manage_del_prev()
                    683:         self.failUnless(self._exists('image.jpg.undo'))
                    684:         self.failIf(self._exists('image.jpg.tmp'))
                    685:         self.failIf(self._exists('image.jpg'))
                    686: 
                    687: 
                    688: def test_suite():
                    689:     from unittest import TestSuite, makeSuite
                    690:     suite = TestSuite()
                    691:     suite.addTest(makeSuite(TestTransactions))
                    692:     suite.addTest(makeSuite(TestTransactionManager))
                    693:     suite.addTest(makeSuite(TestExtFileTransactions))
                    694:     suite.addTest(makeSuite(TestExtImageTransactions))
                    695:     return suite
                    696: 
                    697: if __name__ == '__main__':
                    698:     framework()
                    699: 

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