1: #
2: # Tests interaction with Photo 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: have_photo = ZopeTestCase.hasProduct('Photo')
12:
13: if have_photo:
14: ZopeTestCase.installProduct('SiteAccess')
15: ZopeTestCase.installProduct('ExtFile')
16: ZopeTestCase.installProduct('Photo')
17:
18: from Products.ExtFile.tests.ExtFileTestCase import ExtFileTestCase
19: from Products.ExtFile.tests.ExtFileTestCase import gifImage
20: from Products.ExtFile import ExtFile, Config
21: from Acquisition import aq_base
22:
23: user_name = ZopeTestCase.user_name
24: photo_perms = ['Add Photos', 'Change Photos', 'Add Documents, Images, and Files']
25:
26: import base64
27: auth_info = 'Basic %s' % base64.encodestring('%s:secret' % user_name)
28:
29:
30: class TestPhoto(ExtFileTestCase):
31:
32: def testAddPhoto(self):
33: factory = self.folder.manage_addProduct['Photo']
34: factory.manage_addPhoto('foo', '', open(gifImage, 'rb'), 'image/gif', store='ExtImage', engine='PIL', pregen=0)
35: self.folder.foo._original._finish()
36: self.failUnless(self._exists('foo.gif'))
37:
38: def testAddPhotoWithDisplays(self):
39: factory = self.folder.manage_addProduct['Photo']
40: factory.manage_addPhoto('foo', '', open(gifImage, 'rb'), 'image/gif', store='ExtImage', engine='PIL', pregen=1)
41: self.folder.foo._original._finish()
42: self.failUnless(self._exists('foo.gif'))
43:
44: for id in self.folder.foo.displayIds(None):
45: self.folder.foo._photos[id]._finish()
46: self.failUnless(self._exists('foo_large.gif'))
47: self.failUnless(self._exists('foo_medium.gif'))
48: self.failUnless(self._exists('foo_small.gif'))
49: self.failUnless(self._exists('foo_thumbnail.gif'))
50: self.failUnless(self._exists('foo_xlarge.gif'))
51: self.failUnless(self._exists('foo_xsmall.gif'))
52:
53:
54: class TestPUTPhoto(ExtFileTestCase):
55:
56: def afterSetUp(self):
57: ExtFileTestCase.afterSetUp(self)
58:
59: if not self.app.objectIds('Virtual Host Monster'):
60: factory = self.app.manage_addProduct['SiteAccess']
61: factory.manage_addVirtualHostMonster('VHM')
62:
63: request = self.app.REQUEST
64: request['PARENTS'] = [self.app]
65:
66: # Fake a dav PUT request
67: request['BODYFILE'] = open(gifImage, 'rb')
68: request.environ['CONTENT_TYPE'] = 'image/gif'
69: request.environ['REQUEST_METHOD'] = 'PUT'
70: request._auth = auth_info
71:
72: def afterClear(self):
73: ExtFileTestCase.afterClear(self)
74: ExtFile.REPOSITORY = Config.FLAT
75: ExtFile.ZODB_PATH = Config.VIRTUAL
76:
77: def testPUTPhoto(self):
78:
79: def PUT_factory(name, typ, body):
80: """Creates a Photo."""
81: from Products.Photo.Photo import Photo
82: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
83:
84: self.folder.PUT_factory = PUT_factory
85: self.setPermissions(photo_perms)
86:
87: request = self.app.REQUEST
88: put = request.traverse('/test_folder_1_/image')
89: put(request, request.RESPONSE)
90: self.failUnless(hasattr(aq_base(self.folder), 'image'))
91: self.folder.image._original._finish()
92: self.failUnless(self._exists('image.gif'))
93:
94: def testPUTPhotoWithDisplays(self):
95:
96: def PUT_factory(name, typ, body):
97: """Creates a Photo."""
98: from Products.Photo.Photo import Photo
99: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=1)
100:
101: self.folder.PUT_factory = PUT_factory
102: self.setPermissions(photo_perms)
103:
104: request = self.app.REQUEST
105: put = request.traverse('/test_folder_1_/image')
106: put(request, request.RESPONSE)
107: self.failUnless(hasattr(aq_base(self.folder), 'image'))
108: self.folder.image._original._finish()
109: self.failUnless(self._exists('image.gif'))
110:
111: for id in self.folder.image.displayIds(None):
112: self.folder.image._photos[id]._finish()
113: self.failUnless(self._exists('image_large.gif'))
114: self.failUnless(self._exists('image_medium.gif'))
115: self.failUnless(self._exists('image_small.gif'))
116: self.failUnless(self._exists('image_thumbnail.gif'))
117: self.failUnless(self._exists('image_xlarge.gif'))
118: self.failUnless(self._exists('image_xsmall.gif'))
119:
120: def testPUTPhotoSyncZodbVirtual(self):
121:
122: def PUT_factory(name, typ, body):
123: """Creates a Photo."""
124: from Products.Photo.Photo import Photo
125: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
126:
127: self.folder.PUT_factory = PUT_factory
128: self.setPermissions(photo_perms)
129:
130: ExtFile.REPOSITORY = Config.SYNC_ZODB
131: ExtFile.ZODB_PATH = Config.VIRTUAL
132: request = self.app.REQUEST
133: put = request.traverse('/test_folder_1_/image')
134: put(request, request.RESPONSE)
135: self.failUnless(hasattr(aq_base(self.folder), 'image'))
136:
137: self.assertEqual(self.folder.image._original.filename, ['test_folder_1_', 'image', 'image.gif'])
138:
139: def testPUTPhotoSyncZodbPhysical(self):
140:
141: def PUT_factory(name, typ, body):
142: """Creates a Photo."""
143: from Products.Photo.Photo import Photo
144: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
145:
146: self.folder.PUT_factory = PUT_factory
147: self.setPermissions(photo_perms)
148:
149: ExtFile.REPOSITORY = Config.SYNC_ZODB
150: ExtFile.ZODB_PATH = Config.PHYSICAL
151: request = self.app.REQUEST
152: put = request.traverse('/test_folder_1_/image')
153: put(request, request.RESPONSE)
154: self.failUnless(hasattr(aq_base(self.folder), 'image'))
155:
156: self.assertEqual(self.folder.image._original.filename, ['test_folder_1_', 'image', 'image.gif'])
157:
158: def testPUTPhotoSyncZodbVHMVirtual(self):
159:
160: def PUT_factory(name, typ, body):
161: """Creates a Photo."""
162: from Products.Photo.Photo import Photo
163: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
164:
165: self.folder.PUT_factory = PUT_factory
166: self.setPermissions(photo_perms)
167:
168: ExtFile.REPOSITORY = Config.SYNC_ZODB
169: ExtFile.ZODB_PATH = Config.VIRTUAL
170: request = self.app.REQUEST
171: put = request.traverse('/VirtualHostBase/http/foo.com:80/VirtualHostRoot/test_folder_1_/image')
172: put(request, request.RESPONSE)
173: self.failUnless(hasattr(aq_base(self.folder), 'image'))
174:
175: self.assertEqual(self.folder.image._original.filename, ['test_folder_1_', 'image', 'image.gif'])
176:
177: def testPUTPhotoSyncZodbVHMPhysical(self):
178:
179: def PUT_factory(name, typ, body):
180: """Creates a Photo."""
181: from Products.Photo.Photo import Photo
182: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
183:
184: self.folder.PUT_factory = PUT_factory
185: self.setPermissions(photo_perms)
186:
187: ExtFile.REPOSITORY = Config.SYNC_ZODB
188: ExtFile.ZODB_PATH = Config.PHYSICAL
189: request = self.app.REQUEST
190: put = request.traverse('/VirtualHostBase/http/foo.com:80/VirtualHostRoot/test_folder_1_/image')
191: put(request, request.RESPONSE)
192: self.failUnless(hasattr(aq_base(self.folder), 'image'))
193:
194: # XXX: Photos always use VIRTUAL
195: self.assertEqual(self.folder.image._original.filename, ['test_folder_1_', 'image', 'image.gif'])
196:
197: def testPUTPhotoSyncZodbVHMSubfolderHostingVirtual(self):
198:
199: def PUT_factory(name, typ, body):
200: """Creates a Photo."""
201: from Products.Photo.Photo import Photo
202: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
203:
204: self.folder.PUT_factory = PUT_factory
205: self.setPermissions(photo_perms)
206:
207: ExtFile.REPOSITORY = Config.SYNC_ZODB
208: ExtFile.ZODB_PATH = Config.VIRTUAL
209: request = self.app.REQUEST
210: put = request.traverse('/VirtualHostBase/http/foo.com:80/test_folder_1_/VirtualHostRoot/image')
211: put(request, request.RESPONSE)
212: self.failUnless(hasattr(aq_base(self.folder), 'image'))
213:
214: self.assertEqual(self.folder.image._original.filename, ['image', 'image.gif'])
215:
216: def testPUTPhotoSyncZodbVHMSubfolderHostingPhysical(self):
217:
218: def PUT_factory(name, typ, body):
219: """Creates a Photo."""
220: from Products.Photo.Photo import Photo
221: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
222:
223: self.folder.PUT_factory = PUT_factory
224: self.setPermissions(photo_perms)
225:
226: ExtFile.REPOSITORY = Config.SYNC_ZODB
227: ExtFile.ZODB_PATH = Config.PHYSICAL
228: request = self.app.REQUEST
229: put = request.traverse('/VirtualHostBase/http/foo.com:80/test_folder_1_/VirtualHostRoot/image')
230: put(request, request.RESPONSE)
231: self.failUnless(hasattr(aq_base(self.folder), 'image'))
232:
233: # XXX: Photos always use VIRTUAL
234: self.assertEqual(self.folder.image._original.filename, ['image', 'image.gif'])
235:
236: def testPUTPhotoSyncZodbVHMInsideOutHostingVirtual(self):
237:
238: def PUT_factory(name, typ, body):
239: """Creates a Photo."""
240: from Products.Photo.Photo import Photo
241: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
242:
243: self.folder.PUT_factory = PUT_factory
244: self.setPermissions(photo_perms)
245:
246: ExtFile.REPOSITORY = Config.SYNC_ZODB
247: ExtFile.ZODB_PATH = Config.VIRTUAL
248: request = self.app.REQUEST
249: put = request.traverse('/VirtualHostBase/http/foo.com:80/VirtualHostRoot/_vh_foo/test_folder_1_/image')
250: put(request, request.RESPONSE)
251: self.failUnless(hasattr(aq_base(self.folder), 'image'))
252:
253: self.assertEqual(self.folder.image._original.filename, ['test_folder_1_', 'image', 'image.gif'])
254:
255: def testPUTPhotoSyncZodbVHMInsideOutHostingPhysical(self):
256:
257: def PUT_factory(name, typ, body):
258: """Creates a Photo."""
259: from Products.Photo.Photo import Photo
260: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
261:
262: self.folder.PUT_factory = PUT_factory
263: self.setPermissions(photo_perms)
264:
265: ExtFile.REPOSITORY = Config.SYNC_ZODB
266: ExtFile.ZODB_PATH = Config.PHYSICAL
267: request = self.app.REQUEST
268: put = request.traverse('/VirtualHostBase/http/foo.com:80/VirtualHostRoot/_vh_foo/test_folder_1_/image')
269: put(request, request.RESPONSE)
270: self.failUnless(hasattr(aq_base(self.folder), 'image'))
271:
272: # XXX: Photos always use VIRTUAL
273: self.assertEqual(self.folder.image._original.filename, ['test_folder_1_', 'image', 'image.gif'])
274:
275: def testPUTPhotoSyncZodbVHMSubfolderInsideOutHostingVirtual(self):
276:
277: def PUT_factory(name, typ, body):
278: """Creates a Photo."""
279: from Products.Photo.Photo import Photo
280: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
281:
282: self.folder.PUT_factory = PUT_factory
283: self.setPermissions(photo_perms)
284:
285: ExtFile.REPOSITORY = Config.SYNC_ZODB
286: ExtFile.ZODB_PATH = Config.VIRTUAL
287: request = self.app.REQUEST
288: put = request.traverse('/VirtualHostBase/http/foo.com:80/test_folder_1_/VirtualHostRoot/_vh_foo/image')
289: put(request, request.RESPONSE)
290: self.failUnless(hasattr(aq_base(self.folder), 'image'))
291:
292: self.assertEqual(self.folder.image._original.filename, ['image', 'image.gif'])
293:
294: def testPUTPhotoSyncZodbVHMSubfolderInsideOutHostingPhysical(self):
295:
296: def PUT_factory(name, typ, body):
297: """Creates a Photo."""
298: from Products.Photo.Photo import Photo
299: return Photo(name, '', body, content_type=typ, store='ExtImage', engine='PIL', pregen=0)
300:
301: self.folder.PUT_factory = PUT_factory
302: self.setPermissions(photo_perms)
303:
304: ExtFile.REPOSITORY = Config.SYNC_ZODB
305: ExtFile.ZODB_PATH = Config.PHYSICAL
306: request = self.app.REQUEST
307: put = request.traverse('/VirtualHostBase/http/foo.com:80/test_folder_1_/VirtualHostRoot/_vh_foo/image')
308: put(request, request.RESPONSE)
309: self.failUnless(hasattr(aq_base(self.folder), 'image'))
310:
311: # XXX: Photos always use VIRTUAL
312: self.assertEqual(self.folder.image._original.filename, ['image', 'image.gif'])
313:
314:
315: def test_suite():
316: from unittest import TestSuite, makeSuite
317: suite = TestSuite()
318: if have_photo:
319: suite.addTest(makeSuite(TestPhoto))
320: suite.addTest(makeSuite(TestPUTPhoto))
321: return suite
322:
323: if __name__ == '__main__':
324: framework()
325:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>