def _initSite(self, foo=2): site = Folder(id='site').__of__(self.app) ctool = CatalogTool() getSiteManager().registerUtility(ctool, ICatalogTool) for obj_id in ctool.objectIds(): ctool._delObject(obj_id) for idx_id in ctool.indexes(): ctool.delIndex(idx_id) for col in list(ctool.schema()): ctool.delColumn(col) if foo > 0: ctool._setObject('foo_plexicon', PLexicon('foo_plexicon')) lex = ctool.foo_plexicon lex._pipeline = (Splitter(), CaseNormalizer(), StopWordRemover()) extra = _extra() extra.lexicon_id = 'foo_plexicon' extra.index_type = 'Okapi BM25 Rank' ctool.addIndex('foo_zctext', 'ZCTextIndex', extra) ctool.addColumn('foo_zctext') return site, ctool
def _initSite(self, foo=2): site = Folder(id='site').__of__(self.app) ctool = CatalogTool() getSiteManager().registerUtility(ctool, ICatalogTool) for obj_id in ctool.objectIds(): ctool._delObject(obj_id) for idx_id in ctool.indexes(): ctool.delIndex(idx_id) for col in ctool.schema()[:]: ctool.delColumn(col) if foo > 0: ctool._setObject('foo_plexicon', PLexicon('foo_plexicon')) lex = ctool.foo_plexicon lex._pipeline = (Splitter(), CaseNormalizer(), StopWordRemover()) extra = _extra() extra.lexicon_id = 'foo_plexicon' extra.index_type = 'Okapi BM25 Rank' ctool.addIndex('foo_zctext', 'ZCTextIndex', extra) ctool.addColumn('foo_zctext') return site, ctool
def test_itemCataloguing(self): ctool = CatalogTool() ctool.addColumn('in_reply_to') getSiteManager().registerUtility(ctool, ICatalogTool) dtool = self.dtool test = self._makeDummyContent('test', catalog=1) test.allow_discussion = 1 self.assertEqual( len(ctool), 1 ) self.failUnless(has_path(ctool, test.getPhysicalPath())) talkback = dtool.getDiscussionFor(test) self.assertEqual( talkback.getPhysicalPath(), ('', 'bar', 'site', 'test', 'talkback') ) talkback.createReply( title='test' , text='blah' ) self.assertEqual( len(ctool), 2 ) for reply in talkback.getReplies(): self.failUnless(has_path(ctool, reply.getPhysicalPath())) self.failUnless(has_path(ctool, '/bar/site/test/talkback/%s' % reply.getId())) reply1 = talkback.getReplies()[0] path1 = '/'.join(reply1.getPhysicalPath()) self.assertEqual( ctool.getMetadataForUID(path1), {'in_reply_to': None} ) talkback1 = dtool.getDiscussionFor(reply1) talkback1.createReply( title='test2' , text='blah2' ) for reply in talkback.getReplies(): self.failUnless(has_path(ctool, reply.getPhysicalPath())) self.failUnless(has_path(ctool, '/bar/site/test/talkback/%s' % reply.getId())) for reply in talkback1.getReplies(): self.failUnless(has_path(ctool, reply.getPhysicalPath())) self.failUnless(has_path(ctool, '/bar/site/test/talkback/%s' % reply.getId())) reply2 = talkback1.getReplies()[0] path2 = '/'.join(reply2.getPhysicalPath()) self.assertEqual( ctool.getMetadataForUID(path2), {'in_reply_to': reply1.getId()} )
class UniqueIdHandlerTests(SecurityTest): def _getTargetClass(self): from Products.CMFUid.UniqueIdHandlerTool import UniqueIdHandlerTool return UniqueIdHandlerTool def _makeOne(self, *args, **kw): return self._getTargetClass()(*args, **kw) def setUp(self): from Products.CMFCore.CatalogTool import CatalogTool from Products.CMFUid.interfaces import IUniqueIdHandler from Products.CMFUid.UniqueIdAnnotationTool \ import UniqueIdAnnotationTool from Products.CMFUid.UniqueIdGeneratorTool \ import UniqueIdGeneratorTool SecurityTest.setUp(self) self.app._setObject('dummy', DummyContent(id='dummy')) self.app._setObject('dummy2', DummyContent(id='dummy2')) self.ctool = CatalogTool().__of__(self.app) self.uidhandler = self._makeOne() sm = getSiteManager() sm.registerUtility(self.ctool, ICatalogTool) sm.registerUtility(self.uidhandler, IUniqueIdHandler) sm.registerUtility(UniqueIdAnnotationTool(), IUniqueIdAnnotationManagement) sm.registerUtility(UniqueIdGeneratorTool(), IUniqueIdGenerator) # Make sure we have our indices/columns uid_name = self.uidhandler.UID_ATTRIBUTE_NAME self.ctool.addIndex(uid_name, 'FieldIndex') self.ctool.addColumn(uid_name) def tearDown(self): cleanUp() SecurityTest.tearDown(self) def test_interfaces(self): from Products.CMFUid.interfaces import IUniqueIdBrainQuery from Products.CMFUid.interfaces import IUniqueIdHandler from Products.CMFUid.interfaces import IUniqueIdUnrestrictedQuery verifyClass(IUniqueIdBrainQuery, self._getTargetClass()) verifyClass(IUniqueIdHandler, self._getTargetClass()) verifyClass(IUniqueIdUnrestrictedQuery, self._getTargetClass()) def test_getUidOfNotYetRegisteredObject(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError self.assertEqual(handler.queryUid(dummy, None), None) self.assertRaises(UniqueIdError, handler.getUid, dummy) def test_getInvalidUid(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError self.assertEqual(handler.queryObject(100, None), None) self.assertRaises(UniqueIdError, handler.getObject, 100) self.assertEqual(handler.unrestrictedQueryObject(100, None), None) self.assertRaises(UniqueIdError, handler.unrestrictedGetObject, 100) uid = handler.register(dummy) self.assertEqual(handler.queryObject(uid + 1, None), None) self.assertRaises(UniqueIdError, handler.getObject, uid + 1) self.assertEqual(handler.unrestrictedQueryObject(uid + 1, None), None) self.assertRaises(UniqueIdError, handler.unrestrictedGetObject, uid + 1) def test_getUidOfRegisteredObject(self): handler = self.uidhandler dummy = self.app.dummy uid = handler.register(dummy) self.assertEqual(handler.getUid(dummy), uid) def test_getRegisteredObjectByUid(self): handler = self.uidhandler dummy = self.app.dummy uid = handler.register(dummy) self.assertEqual(handler.getObject(uid), dummy) self.assertEqual(handler.unrestrictedGetObject(uid), dummy) def test_getUnregisteredObject(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError uid = handler.register(dummy) handler.unregister(dummy) self.assertEqual(handler.queryObject(uid, None), None) self.assertRaises(UniqueIdError, handler.getObject, uid) self.assertEqual(handler.unrestrictedQueryObject(uid, None), None) self.assertRaises(UniqueIdError, handler.unrestrictedGetObject, uid) def test_getUidOfUnregisteredObject(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError handler.register(dummy) handler.unregister(dummy) self.assertEqual(handler.queryUid(dummy, None), None) self.assertRaises(UniqueIdError, handler.getUid, dummy) def test_reregisterObject(self): handler = self.uidhandler dummy = self.app.dummy uid1_reg = handler.register(dummy) uid1_get = handler.getUid(dummy) uid2_reg = handler.register(dummy) uid2_get = handler.getUid(dummy) self.assertEqual(uid1_reg, uid2_reg) self.assertEqual(uid1_get, uid2_get) self.assertEqual(uid1_reg, uid1_get) def test_unregisterObjectWithoutUid(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError self.assertRaises(UniqueIdError, handler.unregister, dummy) def test_setNewUidByHandWithCheck(self): handler = self.uidhandler dummy = self.app.dummy # registering and unregisterung a object just to get a free uid unused_uid = handler.register(dummy) handler.unregister(dummy) handler.setUid(dummy, unused_uid) result = handler.getUid(dummy) self.assertEqual(unused_uid, result) def test_setSameUidOnSameObjectWithCheck(self): handler = self.uidhandler dummy = self.app.dummy uid = handler.register(dummy) # just setting the same uid another time is allowed handler.setUid(dummy, uid) result = handler.getUid(dummy) self.assertEqual(uid, result) def test_setExistingUidOnDifferentObjectWithCheckRaisesException(self): handler = self.uidhandler dummy = self.app.dummy dummy2 = self.app.dummy2 UniqueIdError = handler.UniqueIdError # registering and unregisterung a object just to get a free uid uid1_reg = handler.register(dummy) handler.register(dummy2) self.assertRaises(UniqueIdError, handler.setUid, dummy2, uid1_reg) def test_setExistingUidOnDifferentObjectWithoutCheck(self): handler = self.uidhandler dummy = self.app.dummy dummy2 = self.app.dummy2 UniqueIdError = handler.UniqueIdError # registering and unregisterung a object just to get a free uid uid1_reg = handler.register(dummy) uid2_reg = handler.register(dummy2) # now lets double the unique id handler.setUid(dummy2, uid1_reg, check_uniqueness=False) # calling a getter returns one object and generates a log # we can't capture. So let's ask the catalog directly. catalog = self.ctool result = catalog({handler.UID_ATTRIBUTE_NAME: uid1_reg}) self.assertEqual(len(result), 2) # dummy2 shall not be reachable anymore by uid2_reg self.assertRaises(UniqueIdError, handler.getBrain, uid2_reg) def test_setNoneAsUidRaisesException(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError handler.register(dummy) self.assertRaises(UniqueIdError, handler.setUid, dummy, None) def test_setArbitraryKindOfUidRaisesException(self): handler = self.uidhandler dummy = self.app.dummy handler.register(dummy) # As we don't know what kind of exception the implementation # throws lets check for all exceptions! # IMHO it makes sense here to catch exceptions in general here! self.assertRaises(Exception, handler.setUid, dummy, DummyUid()) def test_UidCataloging(self): handler = self.uidhandler catalog = self.ctool dummy = self.app.dummy uid = handler.register(dummy) brains = catalog(cmf_uid=uid) self.assertEqual(len(brains), 1) def test_UidCatalogingDoesNotAcquireUid(self): handler = self.uidhandler catalog = self.ctool self.app._setObject('folder', DummyFolder('folder')) folder = self.app.folder uid = handler.register(folder) brains = catalog(cmf_uid=uid) self.assertEqual(len(brains), 1) # Now catalog an unregistered subobject of the folder. # It should not acquire the cmf_uid, obviously. folder._setObject('dummy', DummyContent(id='dummy')) folder.dummy.indexObject() brains = catalog(cmf_uid=uid) self.assertEqual(len(brains), 1) def test_UidCatalogingDoesNotCatalogPortalRoot(self): handler = self.uidhandler catalog = self.ctool dummy = self.app.dummy # mock the portal root, which has empty indexing attributes dummy.reindexObject = lambda: None uid = handler.register(dummy) brains = catalog(cmf_uid=uid) self.assertEqual(len(brains), 0)
class UniqueIdHandlerTests(SecurityTest): def _getTargetClass(self): from Products.CMFUid.UniqueIdHandlerTool import UniqueIdHandlerTool return UniqueIdHandlerTool def _makeOne(self, *args, **kw): return self._getTargetClass()(*args, **kw) def setUp(self): from Products.CMFCore.CatalogTool import CatalogTool from Products.CMFUid.interfaces import IUniqueIdHandler from Products.CMFUid.UniqueIdAnnotationTool \ import UniqueIdAnnotationTool from Products.CMFUid.UniqueIdGeneratorTool \ import UniqueIdGeneratorTool SecurityTest.setUp(self) self.app._setObject('dummy', DummyContent(id='dummy')) self.app._setObject('dummy2', DummyContent(id='dummy2')) self.ctool = CatalogTool().__of__(self.app) self.uidhandler = self._makeOne() sm = getSiteManager() sm.registerUtility(self.ctool, ICatalogTool) sm.registerUtility(self.uidhandler, IUniqueIdHandler) sm.registerUtility(UniqueIdAnnotationTool(), IUniqueIdAnnotationManagement) sm.registerUtility(UniqueIdGeneratorTool(), IUniqueIdGenerator) # Make sure we have our indices/columns uid_name = self.uidhandler.UID_ATTRIBUTE_NAME self.ctool.addIndex(uid_name, 'FieldIndex') self.ctool.addColumn(uid_name) def tearDown(self): cleanUp() SecurityTest.tearDown(self) def test_interfaces(self): from Products.CMFUid.interfaces import IUniqueIdBrainQuery from Products.CMFUid.interfaces import IUniqueIdHandler from Products.CMFUid.interfaces import IUniqueIdUnrestrictedQuery verifyClass(IUniqueIdBrainQuery, self._getTargetClass()) verifyClass(IUniqueIdHandler, self._getTargetClass()) verifyClass(IUniqueIdUnrestrictedQuery, self._getTargetClass()) def test_getUidOfNotYetRegisteredObject(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError self.assertEqual(handler.queryUid(dummy, None), None) self.assertRaises(UniqueIdError, handler.getUid, dummy) def test_getInvalidUid(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError self.assertEqual(handler.queryObject(100, None), None) self.assertRaises(UniqueIdError, handler.getObject, 100) self.assertEqual(handler.unrestrictedQueryObject(100, None), None) self.assertRaises(UniqueIdError, handler.unrestrictedGetObject, 100) uid = handler.register(dummy) self.assertEqual(handler.queryObject(uid + 1, None), None) self.assertRaises(UniqueIdError, handler.getObject, uid + 1) self.assertEqual(handler.unrestrictedQueryObject(uid + 1, None), None) self.assertRaises(UniqueIdError, handler.unrestrictedGetObject, uid + 1) def test_getUidOfRegisteredObject(self): handler = self.uidhandler dummy = self.app.dummy uid = handler.register(dummy) self.assertEqual(handler.getUid(dummy), uid) def test_getRegisteredObjectByUid(self): handler = self.uidhandler dummy = self.app.dummy uid = handler.register(dummy) self.assertEqual(handler.getObject(uid), dummy) self.assertEqual(handler.unrestrictedGetObject(uid), dummy) def test_getUnregisteredObject(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError uid = handler.register(dummy) handler.unregister(dummy) self.assertEqual(handler.queryObject(uid, None), None) self.assertRaises(UniqueIdError, handler.getObject, uid) self.assertEqual(handler.unrestrictedQueryObject(uid, None), None) self.assertRaises(UniqueIdError, handler.unrestrictedGetObject, uid) def test_getUidOfUnregisteredObject(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError handler.register(dummy) handler.unregister(dummy) self.assertEqual(handler.queryUid(dummy, None), None) self.assertRaises(UniqueIdError, handler.getUid, dummy) def test_reregisterObject(self): handler = self.uidhandler dummy = self.app.dummy uid1_reg = handler.register(dummy) uid1_get = handler.getUid(dummy) uid2_reg = handler.register(dummy) uid2_get = handler.getUid(dummy) self.assertEqual(uid1_reg, uid2_reg) self.assertEqual(uid1_get, uid2_get) self.assertEqual(uid1_reg, uid1_get) def test_unregisterObjectWithoutUid(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError self.assertRaises(UniqueIdError, handler.unregister, dummy) def test_setNewUidByHandWithCheck(self): handler = self.uidhandler dummy = self.app.dummy # registering and unregisterung a object just to get a free uid unused_uid = handler.register(dummy) handler.unregister(dummy) handler.setUid(dummy, unused_uid) result = handler.getUid(dummy) self.assertEqual(unused_uid, result) def test_setSameUidOnSameObjectWithCheck(self): handler = self.uidhandler dummy = self.app.dummy uid = handler.register(dummy) # just setting the same uid another time is allowed handler.setUid(dummy, uid) result = handler.getUid(dummy) self.assertEqual(uid, result) def test_setExistingUidOnDifferentObjectWithCheckRaisesException(self): handler = self.uidhandler dummy = self.app.dummy dummy2 = self.app.dummy2 UniqueIdError = handler.UniqueIdError # registering and unregisterung a object just to get a free uid uid1_reg = handler.register(dummy) handler.register(dummy2) self.assertRaises(UniqueIdError, handler.setUid, dummy2, uid1_reg) def test_setExistingUidOnDifferentObjectWithoutCheck(self): handler = self.uidhandler dummy = self.app.dummy dummy2 = self.app.dummy2 UniqueIdError = handler.UniqueIdError # registering and unregisterung a object just to get a free uid uid1_reg = handler.register(dummy) uid2_reg = handler.register(dummy2) # now lets double the unique id handler.setUid(dummy2, uid1_reg, check_uniqueness=False) # calling a getter returns one object and generates a log # we can't capture. So let's ask the catalog directly. catalog = self.ctool result = catalog({handler.UID_ATTRIBUTE_NAME: uid1_reg}) self.assertEqual(len(result), 2) # dummy2 shall not be reachable anymore by uid2_reg self.assertRaises(UniqueIdError, handler.getBrain, uid2_reg) def test_setNoneAsUidRaisesException(self): handler = self.uidhandler dummy = self.app.dummy UniqueIdError = handler.UniqueIdError handler.register(dummy) self.assertRaises(UniqueIdError, handler.setUid, dummy, None) def test_setArbitraryKindOfUidRaisesException(self): handler = self.uidhandler dummy = self.app.dummy handler.register(dummy) # As we don't know what kind of exception the implementation # throws lets check for all exceptions! # IMHO it makes sense here to catch exceptions in general here! self.assertRaises(Exception, handler.setUid, dummy, DummyUid()) def test_UidCataloging(self): handler = self.uidhandler catalog = self.ctool dummy = self.app.dummy uid = handler.register(dummy) brains = catalog(cmf_uid=uid) self.assertEqual(len(brains), 1) def test_UidCatalogingDoesNotAcquireUid(self): handler = self.uidhandler catalog = self.ctool self.app._setObject('folder', DummyFolder('folder')) folder = self.app.folder uid = handler.register(folder) brains = catalog(cmf_uid=uid) self.assertEqual(len(brains), 1) # Now catalog an unregistered subobject of the folder. # It should not acquire the cmf_uid, obviously. folder._setObject('dummy', DummyContent(id='dummy')) folder.dummy.indexObject() brains = catalog(cmf_uid=uid) self.assertEqual(len(brains), 1) def test_UidCatalogingDoesNotCatalogPortalRoot(self): handler = self.uidhandler catalog = self.ctool dummy = self.app.dummy # mock the portal root, which has empty indexing attributes dummy.reindexObject = lambda: None uid = handler.register(dummy) brains = catalog(cmf_uid=uid) self.assertEqual(len(brains), 0)