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>