From 6ce3eab5920ffd21a97a31f0ea6cd987853b1be8 Mon Sep 17 00:00:00 2001 From: Reed O'Brien Date: Mon, 30 Jul 2012 20:49:26 -0400 Subject: [PATCH] 100% grid_fs coverage --- lumin/grid_fs.py | 6 ++++-- lumin/tests/test_grid_fs.py | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/lumin/grid_fs.py b/lumin/grid_fs.py index ab1b018..72b6fb1 100644 --- a/lumin/grid_fs.py +++ b/lumin/grid_fs.py @@ -31,7 +31,7 @@ def __init__(self, ## TODO: remove when mongo gets TTL capped collections. expired = self.tempstore.files.find( {'uploadDate': {"$lt": datetime.utcnow() - self.max_age}}) - for file_ in expired: + for file_ in expired: # pragma: no cover self.fs.delete(file_['_id']) def get(self, uid, default=None): @@ -40,7 +40,9 @@ def get(self, uid, default=None): return default oid = result['_id'] fp = self.fs.get(oid) - if fp is None: + if fp is None: # pragma: no cover + ## this shouldn't be able to happen. unless the file is removed in + ## TTL collection after the metadata is retreived return default result['fp'] = fp return result diff --git a/lumin/tests/test_grid_fs.py b/lumin/tests/test_grid_fs.py index 1a73a33..a2ccfb9 100644 --- a/lumin/tests/test_grid_fs.py +++ b/lumin/tests/test_grid_fs.py @@ -98,6 +98,21 @@ def test___setitem__(self): self.failUnless(one['uploadDate']) self.failUnless(cstruct['filename'] in inst.fs.list()) + def test___delitem__(self): + fp = self._make_fp() + cstruct = {'fp': fp, + 'mimetype': 'mimetype', + 'filename': 'filename', + 'uid': 'uid'} + inst = self.make_one() + inst['uid'] = cstruct + one = self.request.db.tempstore.files.find_one({'uid': 'uid'}) + self.assertEqual(one['mimetype'], 'mimetype') + self.failUnless(cstruct['filename'] in inst.fs.list()) + del inst['uid'] + self.failIf(cstruct['filename'] in inst.fs.list()) + self.assertEqual(self.request.db.tempstore.files.find_one({'uid': 'uid'}), None) + def test_preview_url(self): self.config.begin(request=self.request) self.config.add_route('preview_image', '/preview_image/:uid') @@ -174,9 +189,10 @@ def test_response(self): fp = self._make_file() oid = fs.put(fp, content_type=text_('text/plain'), filename='aname.txt', - xmetadata=self.metadata) + metadata=self.metadata) self.request.matchdict = {'slug': str(oid)} result = self.make_one(request=self.request) + self.assertEqual(result.__acl__, self.metadata['__acl__']) resp = result.response() self.assertTrue(isinstance(resp, Response)) self.assertEqual(resp.content_length, result.gf.length) @@ -185,3 +201,22 @@ def test_response(self): 'attachment; filename=aname.txt') self.assertEqual(resp.body, b'This is a file') self.assertEqual(resp.status, '200 OK') + + def test_default__acl(self): + from pyramid.security import Allow + metadata = {'uploaded_by': 'testuser', + 'mimetype': 'text/plain'} + fs = self._make_fs() + fp = self._make_file() + oid = fs.put(fp, + content_type='text/plain', + filename='aname.txt', + metadata=metadata) + self.request.matchdict = {'slug': str(oid)} + result = self.make_one(request=self.request) + self.assertEqual(result.__acl__, + [(Allow, 'group:managers', ('add', 'delete', 'edit', 'view'))]) + self.assertEqual(result.gf.filename, 'aname.txt') + self.assertEqual(result.gf.metadata, metadata) + self.assertEqual(result.gf.read(), b'This is a file') +