1:
2: from Testing import ZopeTestCase
3:
4: import os, sys, tempfile
5:
6: from Products.ExtFile import transaction
7:
8: # Repository configuration
9: from Products.ExtFile import ExtFile, Config
10: ExtFile.ExtFile._repository = ['reposit']
11: ExtFile.REPOSITORY = Config.FLAT
12: ExtFile.NORMALIZE_CASE = Config.KEEP
13: ExtFile.ZODB_PATH = Config.VIRTUAL
14: ExtFile.REPOSITORY_EXTENSIONS = Config.MIMETYPE_REPLACE
15: ExtFile.UNDO_POLICY = Config.BACKUP_ON_DELETE
16:
17: # File names of test data
18: from Globals import package_home
19: here = package_home(globals())
20: gifImage = os.path.join(here, 'data', 'Folder_icon.gif')
21: jpegImage = os.path.join(here, 'data', 'Teneriffa_small.jpg')
22: tiffImage = os.path.join(here, 'data', 'Mountain_cmyk.tif')
23: notImage = os.path.join(here, 'data', 'Binary.foo')
24:
25: # Define some permission sets
26: standard_perms = ZopeTestCase.standard_permissions
27: copymove_perms = ['View management screens', 'Add ExtImages', 'Add ExtFiles', 'Delete objects']
28: access_perms = ['View management screens']
29: change_perms = ['Change ExtFile/ExtImage']
30:
31: # Put some Zope objects into the test ZODB
32: app = ZopeTestCase.app()
33: factory = app.manage_addProduct['OFSP']
34: factory.manage_addImage('GifImage', file=open(gifImage, 'rb'))
35: factory.manage_addImage('JpegImage', file=open(jpegImage, 'rb'), content_type='image/jpeg')
36: factory.manage_addImage('TiffImage', file=open(tiffImage, 'rb'), content_type='image/tiff')
37: factory.manage_addFile('NotImage', file=open(notImage, 'rb'))
38: transaction.commit()
39: ZopeTestCase.close(app)
40:
41: # Load ZCML to get events configured
42: try:
43: import Products.Five
44: import OFS.subscribers
45: except ImportError:
46: pass
47: else:
48: from Products.Five import zcml
49: zcml.load_config('configure.zcml', Products.Five)
50:
51:
52: class LocalInstanceHome:
53:
54: local_home = here #tempfile.gettempdir()
55:
56: def afterSetUp(self):
57: try:
58: import App.config
59: except ImportError:
60: # Modify builtins
61: b = getattr(__builtins__, '__dict__', __builtins__)
62: self._ih = INSTANCE_HOME
63: b['INSTANCE_HOME'] = self.local_home
64: else:
65: # Zope 2.7+
66: cfg = App.config.getConfiguration()
67: self._ih = cfg.instancehome
68: cfg.instancehome = self.local_home
69: App.config.setConfiguration(cfg)
70:
71: def afterClear(self):
72: try:
73: import App.config
74: except ImportError:
75: # Restore builtins
76: b = getattr(__builtins__, '__dict__', __builtins__)
77: if hasattr(self, '_ih'):
78: b['INSTANCE_HOME'] = self._ih
79: else:
80: # Zope 2.7+
81: cfg = App.config.getConfiguration()
82: if hasattr(self, '_ih'):
83: cfg.instancehome = self._ih
84: App.config.setConfiguration(cfg)
85:
86:
87: class ExtFileTestCase(LocalInstanceHome, ZopeTestCase.ZopeTestCase):
88:
89: def afterSetUp(self):
90: LocalInstanceHome.afterSetUp(self)
91: self._nuke_reposit = 1
92:
93: def afterClear(self):
94: if getattr(self, '_nuke_reposit', 0):
95: # Remove repository
96: repository = os.path.join(INSTANCE_HOME, 'reposit')
97: if os.path.isdir(repository):
98: import shutil
99: shutil.rmtree(repository, 1)
100: del self._nuke_reposit
101: LocalInstanceHome.afterClear(self)
102:
103: def _fsname(self, id):
104: return os.path.join(INSTANCE_HOME, 'reposit', id)
105:
106: def _exists(self, id):
107: return os.path.isfile(self._fsname(id))
108:
109: def _listdir(self):
110: return os.listdir(os.path.join(INSTANCE_HOME, 'reposit'))
111:
112: def _fsize(self, id):
113: return os.stat(id)[6]
114:
115: def addExtFile(self, id, file, content_type='', folder=None):
116: # Add an ExtFile
117: if folder is None:
118: folder = self.folder
119: id = folder.manage_addProduct['ExtFile'].manage_addExtFile(id=id, file=file, content_type=content_type)
120: self.file = folder[id]
121: return self.file
122:
123: def addExtImage(self, id, file, content_type='', folder=None):
124: # Add an ExtImage
125: if folder is None:
126: folder = self.folder
127: id = folder.manage_addProduct['ExtFile'].manage_addExtImage(id=id, file=file, content_type=content_type)
128: self.image = folder[id]
129: return self.image
130:
131:
132: # FileUpload factory
133: from ZPublisher.HTTPRequest import FileUpload
134:
135: class DummyFieldStorage:
136: '''Quacks like a FieldStorage'''
137:
138: def __init__(self, file, filename, headers):
139: self.file = file
140: self.filename = filename
141: self.headers = headers
142:
143: def makeFileUpload(file, content_type='', filename=''):
144: headers = {}
145: if type(file) == type(''):
146: file = open(file, 'rb')
147: if content_type:
148: headers['content-type'] = content_type
149: fs = DummyFieldStorage(file, filename, headers)
150: return FileUpload(fs)
151:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>