from Testing import ZopeTestCase
import os, sys, tempfile
from Products.ExtFile import transaction
# Repository configuration
from Products.ExtFile import ExtFile, Config
ExtFile.ExtFile._repository = ['reposit']
ExtFile.REPOSITORY = Config.FLAT
ExtFile.NORMALIZE_CASE = Config.KEEP
ExtFile.ZODB_PATH = Config.VIRTUAL
ExtFile.REPOSITORY_EXTENSIONS = Config.MIMETYPE_REPLACE
ExtFile.UNDO_POLICY = Config.BACKUP_ON_DELETE
# File names of test data
from Globals import package_home
here = package_home(globals())
gifImage = os.path.join(here, 'data', 'Folder_icon.gif')
jpegImage = os.path.join(here, 'data', 'Teneriffa_small.jpg')
tiffImage = os.path.join(here, 'data', 'Mountain_cmyk.tif')
notImage = os.path.join(here, 'data', 'Binary.foo')
# Define some permission sets
standard_perms = ZopeTestCase.standard_permissions
copymove_perms = ['View management screens', 'Add ExtImages', 'Add ExtFiles', 'Delete objects']
access_perms = ['View management screens']
change_perms = ['Change ExtFile/ExtImage']
# Put some Zope objects into the test ZODB
app = ZopeTestCase.app()
factory = app.manage_addProduct['OFSP']
factory.manage_addImage('GifImage', file=open(gifImage, 'rb'))
factory.manage_addImage('JpegImage', file=open(jpegImage, 'rb'), content_type='image/jpeg')
factory.manage_addImage('TiffImage', file=open(tiffImage, 'rb'), content_type='image/tiff')
factory.manage_addFile('NotImage', file=open(notImage, 'rb'))
transaction.commit()
ZopeTestCase.close(app)
# Load ZCML to get events configured
try:
import Products.Five
import OFS.subscribers
except ImportError:
pass
else:
from Products.Five import zcml
zcml.load_config('configure.zcml', Products.Five)
class LocalInstanceHome:
local_home = here #tempfile.gettempdir()
def afterSetUp(self):
try:
import App.config
except ImportError:
# Modify builtins
b = getattr(__builtins__, '__dict__', __builtins__)
self._ih = INSTANCE_HOME
b['INSTANCE_HOME'] = self.local_home
else:
# Zope 2.7+
cfg = App.config.getConfiguration()
self._ih = cfg.instancehome
cfg.instancehome = self.local_home
App.config.setConfiguration(cfg)
def afterClear(self):
try:
import App.config
except ImportError:
# Restore builtins
b = getattr(__builtins__, '__dict__', __builtins__)
if hasattr(self, '_ih'):
b['INSTANCE_HOME'] = self._ih
else:
# Zope 2.7+
cfg = App.config.getConfiguration()
if hasattr(self, '_ih'):
cfg.instancehome = self._ih
App.config.setConfiguration(cfg)
class ExtFileTestCase(LocalInstanceHome, ZopeTestCase.ZopeTestCase):
def afterSetUp(self):
LocalInstanceHome.afterSetUp(self)
self._nuke_reposit = 1
def afterClear(self):
if getattr(self, '_nuke_reposit', 0):
# Remove repository
repository = os.path.join(INSTANCE_HOME, 'reposit')
if os.path.isdir(repository):
import shutil
shutil.rmtree(repository, 1)
del self._nuke_reposit
LocalInstanceHome.afterClear(self)
def _fsname(self, id):
return os.path.join(INSTANCE_HOME, 'reposit', id)
def _exists(self, id):
return os.path.isfile(self._fsname(id))
def _listdir(self):
return os.listdir(os.path.join(INSTANCE_HOME, 'reposit'))
def _fsize(self, id):
return os.stat(id)[6]
def addExtFile(self, id, file, content_type='', folder=None):
# Add an ExtFile
if folder is None:
folder = self.folder
id = folder.manage_addProduct['ExtFile'].manage_addExtFile(id=id, file=file, content_type=content_type)
self.file = folder[id]
return self.file
def addExtImage(self, id, file, content_type='', folder=None):
# Add an ExtImage
if folder is None:
folder = self.folder
id = folder.manage_addProduct['ExtFile'].manage_addExtImage(id=id, file=file, content_type=content_type)
self.image = folder[id]
return self.image
# FileUpload factory
from ZPublisher.HTTPRequest import FileUpload
class DummyFieldStorage:
'''Quacks like a FieldStorage'''
def __init__(self, file, filename, headers):
self.file = file
self.filename = filename
self.headers = headers
def makeFileUpload(file, content_type='', filename=''):
headers = {}
if type(file) == type(''):
file = open(file, 'rb')
if content_type:
headers['content-type'] = content_type
fs = DummyFieldStorage(file, filename, headers)
return FileUpload(fs)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>