[Zope-Checkins] CVS: Zope/lib/python/Products/Sessions/tests - testBrowserIdManager.py:1.12
Chris McDonough
chrism@zope.com
Mon, 19 Aug 2002 15:50:18 -0400
Update of /cvs-repository/Zope/lib/python/Products/Sessions/tests
In directory cvs.zope.org:/tmp/cvs-serv24326/tests
Modified Files:
testBrowserIdManager.py
Log Message:
Added the capability for browser ids to be encoded in URLs.
When a set of knobs is set on the browser_id_manager "settings" screen,
("look for browser id name in..." and 'automatically encode browser ids..."),
a traversal hook is installed in the browser id manager's container which
causes a) the request to be searched for a browser id name and a browser
id as the first two elements of the URL path and b) for Zope-generated URLs
to contain these path elements.
Various documentation and interface updates. No interface methods
were harmed in the filming of this checkin, but a few were added or extended
with defaults.
=== Zope/lib/python/Products/Sessions/tests/testBrowserIdManager.py 1.11 => 1.12 ===
--- Zope/lib/python/Products/Sessions/tests/testBrowserIdManager.py:1.11 Wed Aug 14 18:25:10 2002
+++ Zope/lib/python/Products/Sessions/tests/testBrowserIdManager.py Mon Aug 19 15:50:18 2002
@@ -19,24 +19,35 @@
import sys
import ZODB
-from Products.Sessions.BrowserIdManager import BrowserIdManager, BrowserIdManagerErr
+from Products.Sessions.BrowserIdManager import BrowserIdManager, \
+ BrowserIdManagerErr, BrowserIdManagerTraverser, \
+ isAWellFormedBrowserId
from unittest import TestCase, TestSuite, TextTestRunner, makeSuite
from ZPublisher.HTTPRequest import HTTPRequest
from ZPublisher.HTTPResponse import HTTPResponse
+from ZPublisher.BeforeTraverse import queryBeforeTraverse
from sys import stdin
from os import environ
+from OFS.Application import Application
class TestBrowserIdManager(TestCase):
def setUp(self):
- self.m = BrowserIdManager('foo')
+ self.app = Application()
+ self.app.id = 'App'
+ mgr = BrowserIdManager('browser_id_manager')
+ self.app._setObject('browser_id_manager', mgr)
+ self.m = self.app.browser_id_manager
resp = HTTPResponse()
environ['SERVER_NAME']='fred'
environ['SERVER_PORT']='80'
- req = HTTPRequest(stdin, environ, resp)
- self.m.REQUEST = req
+ self.req = HTTPRequest(stdin, environ, resp)
+ self.req['TraversalRequestNameStack'] = ['foo', 'bar']
+ self.app.REQUEST = self.req
def tearDown(self):
del self.m
+ self.app.REQUEST = None
+ del self.app
def testSetBrowserIdName(self):
self.m.setBrowserIdName('foo')
@@ -49,30 +60,16 @@
lambda self=self: self.m.setBrowserIdName(1))
def testSetBadNamespaces(self):
- d = {1:'gummy', 2:'froopy'}
+ d = ('gummy', 'froopy')
self.assertRaises(BrowserIdManagerErr,
lambda self=self,d=d:
self.m.setBrowserIdNamespaces(d))
def testSetGoodNamespaces(self):
- d = {1:'cookies', 2:'form'}
+ d = ('cookies', 'url', 'form')
self.m.setBrowserIdNamespaces(d)
self.failUnless(self.m.getBrowserIdNamespaces() == d)
- def testSetNamespacesByLocation(self):
- self.m.setBrowserIdLocation('cookiesonly')
- self.failUnless(self.m.getBrowserIdNamespaces() == {1:'cookies'})
- self.failUnless(self.m.getBrowserIdLocation() == 'cookiesonly')
- self.m.setBrowserIdLocation('cookiesthenform')
- self.failUnless(self.m.getBrowserIdNamespaces()=={1:'cookies',2:'form'})
- self.failUnless(self.m.getBrowserIdLocation() == 'cookiesthenform')
- self.m.setBrowserIdLocation('formonly')
- self.failUnless(self.m.getBrowserIdNamespaces() == {1:'form'})
- self.failUnless(self.m.getBrowserIdLocation() == 'formonly')
- self.m.setBrowserIdLocation('formthencookies')
- self.failUnless(self.m.getBrowserIdNamespaces()=={1:'form',2:'cookies'})
- self.failUnless(self.m.getBrowserIdLocation() == 'formthencookies')
-
def testSetBadCookiePath(self):
path = '/;'
self.assertRaises(BrowserIdManagerErr,
@@ -148,33 +145,13 @@
a = self.m.getBrowserId()
self.failUnless( self.m.isBrowserIdNew() )
- def testIsBrowserIdFromCookieFirst(self):
- token = self.m.getBrowserId()
- self.m.REQUEST.browser_id_ = token
- self.m.REQUEST.browser_id_ns_ = 'cookies'
- tokenkey = self.m.getBrowserIdName()
- self.m.REQUEST.cookies[tokenkey] = token
- self.m.setBrowserIdNamespaces({1:'cookies', 2:'form'})
- a = self.m.getBrowserId()
- self.failUnless( self.m.isBrowserIdFromCookie() )
-
- def testIsBrowserIdFromFormFirst(self):
- token = self.m.getBrowserId()
- self.m.REQUEST.browser_id_ = token
- self.m.REQUEST.browser_id_ns_ = 'form'
- tokenkey = self.m.getBrowserIdName()
- self.m.REQUEST.form[tokenkey] = token
- self.m.setBrowserIdNamespaces({1:'form', 2:'cookies'})
- a = self.m.getBrowserId()
- self.failUnless( self.m.isBrowserIdFromForm() )
-
def testIsBrowserIdFromCookieOnly(self):
token = self.m.getBrowserId()
self.m.REQUEST.browser_id_ = token
self.m.REQUEST.browser_id_ns_ = 'cookies'
tokenkey = self.m.getBrowserIdName()
self.m.REQUEST.form[tokenkey] = token
- self.m.setBrowserIdNamespaces({1:'cookies'})
+ self.m.setBrowserIdNamespaces(('cookies',))
a = self.m.getBrowserId()
self.failUnless( self.m.isBrowserIdFromCookie() )
self.failUnless( not self.m.isBrowserIdFromForm() )
@@ -185,11 +162,20 @@
self.m.REQUEST.browser_id_ns_ = 'form'
tokenkey = self.m.getBrowserIdName()
self.m.REQUEST.form[tokenkey] = token
- self.m.setBrowserIdNamespaces({1:'form'})
+ self.m.setBrowserIdNamespaces(('form',))
a = self.m.getBrowserId()
self.failUnless( not self.m.isBrowserIdFromCookie() )
self.failUnless( self.m.isBrowserIdFromForm() )
+ def testIsBrowserIdFromUrlOnly(self):
+ token = self.m.getBrowserId()
+ self.m.REQUEST.browser_id_ = token
+ self.m.REQUEST.browser_id_ns_ = 'url'
+ self.m.setBrowserIdNamespaces(('url',))
+ a = self.m.getBrowserId()
+ self.failUnless( not self.m.isBrowserIdFromCookie() )
+ self.failUnless( self.m.isBrowserIdFromUrl() )
+
def testFlushBrowserIdCookie(self):
token = self.m.getBrowserId()
self.m.REQUEST.browser_id_ = token
@@ -226,6 +212,8 @@
u = 'http://www.zope.org/Members/mcdonc?foo=bar&spam=eggs'
r = self.m.encodeUrl(u)
self.failUnless( r == '%s&%s=%s' % (u, keystring, key) )
+ r = self.m.encodeUrl(u, style='inline')
+ self.failUnless( r == 'http://www.zope.org/%s/%s/Members/mcdonc?foo=bar&spam=eggs' % (keystring, key))
def testGetHiddenFormField(self):
keystring = self.m.getBrowserIdName()
@@ -234,6 +222,47 @@
expected = ('<input type="hidden" name="%s" value="%s">' %
(keystring, key))
self.failUnless( html == expected )
+
+ def testAutoUrlEncoding(self):
+ self.m.setAutoUrlEncoding(1)
+ self.m.setBrowserIdNamespaces(('url',))
+ self.m.updateTraversalData()
+ traverser = BrowserIdManagerTraverser()
+ traverser(self.app, self.req)
+ self.failUnless(isAWellFormedBrowserId(self.req.browser_id_))
+ print self.req.browser_id_
+ self.failUnless(self.req.browser_id_ns_ == None)
+ self.failUnless(self.req._script[-1] == self.req.browser_id_)
+ self.failUnless(self.req._script[-2] == '_ZopeId')
+
+ def testUrlBrowserIdIsFound(self):
+ bid = '43295340A0bpcu4nkCI'
+ name = '_ZopeId'
+ resp = HTTPResponse()
+ environ['SERVER_NAME']='fred'
+ environ['SERVER_PORT']='80'
+ self.req = HTTPRequest(stdin, environ, resp)
+ self.req['TraversalRequestNameStack'] = ['foo', 'bar', bid, name]
+ self.app.REQUEST = self.req
+ self.m.setAutoUrlEncoding(1)
+ self.m.setBrowserIdNamespaces(('url',))
+ self.m.updateTraversalData()
+ traverser = BrowserIdManagerTraverser()
+ traverser(self.app, self.req)
+ self.failUnless(isAWellFormedBrowserId(self.req.browser_id_))
+ self.failUnless(self.req.browser_id_ns_ == 'url')
+ self.failUnless(self.req._script[-1] == self.req.browser_id_)
+ self.failUnless(self.req._script[-2] == '_ZopeId')
+ self.failUnless(self.req['TraversalRequestNameStack'] == ['foo','bar'])
+
+ def testUpdateTraversalData(self):
+ self.m.setBrowserIdNamespaces(('url',))
+ self.m.updateTraversalData()
+ self.failUnless(self.m.hasTraversalHook(self.app))
+ self.failUnless(queryBeforeTraverse(self.app, 'BrowserIdManager'))
+ self.m.setBrowserIdNamespaces(('cookies', 'form'))
+ self.m.updateTraversalData()
+ self.failUnless(not queryBeforeTraverse(self.app,'BrowserIdManager'))
def test_suite():
testsuite = makeSuite(TestBrowserIdManager, 'test')