Annotation of ExtFile/tests/ExtFileTestCase.py, revision 1.1
1.1 ! dwinter 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>