[Zope-Checkins] CVS: Zope/lib/python/Products/Sessions/tests - testBrowserIdManager.py:1.5 testSessionDataManager.py:1.8

Chris McDonough chrism@zope.com
Wed, 21 Nov 2001 17:36:22 -0500


Update of /cvs-repository/Zope/lib/python/Products/Sessions/tests
In directory cvs.zope.org:/tmp/cvs-serv8883/tests

Modified Files:
	testBrowserIdManager.py testSessionDataManager.py 
Log Message:
Browser Id Manager is no longer __replaceable__ = UNIQUE, meaning
that other things named browser_id_manager can be created in subfolders.

Wrap transient data objects only in session data manager upon return.
Previously, they had been wrapped also in session data container.

Took out clever traversal error logging code in fear that it would
bloat the ZODB.

Added SessionDataManagerErr and BrowserIdManagerErr to API docs and
made them importable within a PythonScript.

Extended test suite with request-autopopulate tests.



=== Zope/lib/python/Products/Sessions/tests/testBrowserIdManager.py 1.4 => 1.5 ===
         
 if __name__ == '__main__':
-    runner = TextTestRunner()
+    runner = TextTestRunner(verbosity=9)
     runner.run(test_suite())


=== Zope/lib/python/Products/Sessions/tests/testSessionDataManager.py 1.7 => 1.8 ===
 if __name__ == "__main__":
     sys.path.insert(0, '../../..')
-    #os.chdir('../../..')
+
 from Testing import makerequest
 import ZODB # in order to get Persistence.Persistent working
+from OFS.DTMLMethod import DTMLMethod
 import Acquisition
 from Acquisition import aq_base
 from Products.Sessions.BrowserIdManager import BrowserIdManager
 from Products.Sessions.SessionDataManager import \
-    SessionDataManager, SessionDataManagerErr
+    SessionDataManager, SessionDataManagerErr, SessionDataManagerTraverser
 from Products.Transience.Transience import \
     TransientObjectContainer, TransientObject
 from Products.TemporaryFolder.TemporaryFolder import MountedTemporaryFolder
@@ -103,8 +104,9 @@
 from cPickle import UnpickleableError
 from ZODB.DemoStorage import DemoStorage
 from OFS.Application import Application
+from ZPublisher.BeforeTraverse import registerBeforeTraverse, \
+    unregisterBeforeTraverse
 import sys
-sys.setcheckinterval(200)
 
 tf_name = 'temp_folder'
 idmgr_name = 'browser_id_manager'
@@ -139,7 +141,8 @@
     toc = TransientObjectContainer(toc_name, title='Temporary '
         'Transient Object Container', timeout_mins=20)
     session_data_manager=SessionDataManager(id='session_data_manager',
-        path='/'+tf_name+'/'+toc_name, title='Session Data Manager')
+        path='/'+tf_name+'/'+toc_name, title='Session Data Manager',
+        requestName='TESTOFSESSION')
 
     try: app._delObject(idmgr_name)
     except AttributeError: pass
@@ -150,6 +153,9 @@
     try: app._delObject('session_data_manager')
     except AttributeError: pass
 
+    try: app._delObject('index_html')
+    except AttributeError: pass
+
     app._setObject(idmgr_name, bidmgr)
 
     app._setObject('session_data_manager', session_data_manager)
@@ -159,7 +165,11 @@
 
     app.temp_folder._setObject(toc_name, toc)
     get_transaction().commit()
-
+    
+    # index_html necessary for publishing emulation for testAutoReqPopulate
+    app._setObject('index_html', DTMLMethod('', __name__='foo'))
+    get_transaction().commit()
+    
 class TestBase(TestCase):
     def setUp(self):
         db = _getDB()
@@ -191,6 +201,11 @@
         sd = self.app.session_data_manager.getSessionData()
         assert self.app.session_data_manager.hasSessionData()
 
+    def testSessionDataWrappedInSDM(self):
+        sd = self.app.session_data_manager.getSessionData(1)
+        assert aq_base(sd.aq_parent) is \
+               aq_base(self.app.session_data_manager), sd.aq_parent
+
     def testNewSessionDataObjectIsValid(self):
         sdType = type(TransientObject(1))
         sd = self.app.session_data_manager.getSessionData()
@@ -201,6 +216,7 @@
         sd = self.app.session_data_manager.getSessionData()
         sd.invalidate()
         assert hasattr(sd, '_invalid')
+        assert not sd.isValid()
         
     def testBrowserIdIsSet(self):
         sd = self.app.session_data_manager.getSessionData()
@@ -215,29 +231,30 @@
         assert sd == bykeysd, (sd, bykeysd, token)
 
     def testBadExternalSDCPath(self):
+        sdm = self.app.session_data_manager
         # fake out webdav
-        self.app.session_data_manager.REQUEST['REQUEST_METHOD'] = 'GET'
-        self.app.session_data_manager.setContainerPath('/fudgeffoloo')
-        try:
-            self.app.session_data_manager.getSessionData()
-        except SessionDataManagerErr:
-            pass
-        else:
-            assert 1 == 2, self.app.session_data_manager.getSessionDataContainerPath()
+        sdm.REQUEST['REQUEST_METHOD'] = 'GET'
+        sdm.setContainerPath('/fudgeffoloo')
+        self.assertRaises(SessionDataManagerErr, self._testbadsdcpath)
+
+    def _testbadsdcpath(self):
+        self.app.session_data_manager.getSessionData()
 
     def testInvalidateSessionDataObject(self):
-        sd = self.app.session_data_manager.getSessionData()
+        sdm = self.app.session_data_manager
+        sd = sdm.getSessionData()
         sd['test'] = 'Its alive!  Alive!'
         sd.invalidate()
-        assert not self.app.session_data_manager.getSessionData().has_key('test')
+        assert not sdm.getSessionData().has_key('test')
 
     def testGhostUnghostSessionManager(self):
+        sdm = self.app.session_data_manager
         get_transaction().commit()
-        sd = self.app.session_data_manager.getSessionData()
+        sd = sdm.getSessionData()
         sd.set('foo', 'bar')
-        self.app.session_data_manager._p_changed = None
+        sdm._p_changed = None
         get_transaction().commit()
-        assert self.app.session_data_manager.getSessionData().get('foo') == 'bar'
+        assert sdm.getSessionData().get('foo') == 'bar'
 
     def testSubcommit(self):
         sd = self.app.session_data_manager.getSessionData()
@@ -260,6 +277,20 @@
         sd = self.app.session_data_manager.getSessionData()
         sd.set('foo', aq_wrapped)
         self.assertRaises(UnpickleableError, get_transaction().commit)
+
+    def testAutoReqPopulate(self):
+        self.app.REQUEST['PARENTS'] = [self.app]
+        self.app.REQUEST['URL'] = 'a'
+        self.app.REQUEST.traverse('/')
+        assert self.app.REQUEST.has_key('TESTOFSESSION')
+
+    def testUnlazifyAutoPopulated(self):
+        self.app.REQUEST['PARENTS'] = [self.app]
+        self.app.REQUEST['URL'] = 'a'
+        self.app.REQUEST.traverse('/')
+        sess = self.app.REQUEST['TESTOFSESSION']
+        sdType = type(TransientObject(1))
+        assert type(aq_base(sess)) is sdType, type(aq_base(sess))
 
 def test_suite():
     test_datamgr = makeSuite(TestSessionManager, 'test')