[Repoze-dev] Repoze CVS: base.py test_helper.py test_root.py

Chris McDonough chrism at agendaless.com
Thu Sep 13 05:47:55 UTC 2007


Update of /home/repoze/cvs/repoze.zope2/repoze/zope2/tests
In directory laguna.palladion.com:/tmp/cvs-serv17421/repoze/zope2/tests

Modified Files:
	test_helper.py 
Added Files:
	base.py test_root.py 
Log Message:
Implement replacement root object.

Factor out dummy modules into base.

More tests for obob_helper, and some refactoring.



Index: test_helper.py
===================================================================
RCS file: /home/repoze/cvs/repoze.zope2/repoze/zope2/tests/test_helper.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- test_helper.py	13 Sep 2007 00:58:05 -0000	1.3
+++ test_helper.py	13 Sep 2007 05:47:53 -0000	1.4
@@ -1,19 +1,19 @@
 import unittest
+import os
+
+from repoze.zope2.tests.base import DummyHelper
+from repoze.zope2.tests.base import _makeEnviron
+from repoze.zope2.tests.base import DummyConnection
+from repoze.zope2.tests.base import DummyRequest
+from repoze.zope2.tests.base import DummyPublishedObject
 
 class TestTopLevelFuncs(unittest.TestCase):
     def test_get_root(self):
         from repoze.zope2.obob_helper import get_root
-        helper = DummyHelper(environ={}, config={})
-        app = get_root(helper, dummy_configure)
-        self.failUnless(isinstance(app, DummyApplication))
-
-    def test_get_connection(self):
-        from repoze.zope2.obob_helper import get_connection
-        helper = DummyHelper(environ={}, config={})
-        conn = get_connection(helper, dummy_configure)
-        self.assertEqual(conn.debuginfo, helper.environ)
-        self.failUnless(helper.environ['tm.cleanup'].has_key('closeconn'),
-                        helper.environ)
+        dummyconfig = {}
+        helper = DummyHelper(dummyconfig)
+        root = get_root(helper)
+        self.assertEqual(root, dummyconfig)
 
     def test_makeRequest(self):
         from repoze.zope2 import makeRequest
@@ -22,14 +22,6 @@
         self.assertEqual(request.stdin, environ['wsgi.input'])
         self.assertNotEqual(request.response, None)
 
-class CloserTests(unittest.TestCase):
-    def test_Closer(self):
-        from repoze.zope2 import Closer
-        jar = DummyConnection('whatever')
-        a = Closer(jar)
-        del a
-        self.assertEqual(jar.closed, True)
-    
 class TestZope2ObobHelper(unittest.TestCase):
     def tearDown(self):
         from zope.security.management import endInteraction
@@ -44,19 +36,23 @@
     def _makeOne(self, env=None):
         if env is None:
             env = _makeEnviron()
-        return self._getTargetClass()(env)
+        helper = self._getTargetClass()(env)
+        helper.request = DummyRequest(env)
+        return helper
 
     def test_ctor(self):
         environ = {}
         helper = self._makeOne(environ)
         self.assertEqual(helper.environ, environ)
-        self.assertEqual(helper.request, None)
 
     def test_setup(self):
         from zope.security.management import queryInteraction
-        helper = self._makeOne()
+        env = _makeEnviron()
+        env['SERVER_NAME'] = 'www.example.com'
+        env['SERVER_PORT'] = '80'
+        helper = self._makeOne(env)
         helper.setup()
-        self.assertEqual(helper.request['URL'], 'http://localhost:8080')
+        self.assertEqual(helper.request['URL'], 'http://www.example.com')
         self.assertNotEqual(queryInteraction(), None)
 
     def test_teardown(self):
@@ -71,83 +67,77 @@
     def test_invoke(self):
         published = DummyPublishedObject()
         helper = self._makeOne()
-        from repoze.zope2.obob_helper import makeRequest
-        helper.request = makeRequest(_makeEnviron())
         helper.invoke(published)
         self.assertEqual(helper.request['URL'], 'http://localhost:8080')
 
     def test_path_elements_bad_name(self):
-        helper = self._makeOne()
-        from paste.httpexceptions import HTTPNotFound
-        self.assertRaises(HTTPNotFound, helper.path_elements, '/REQUEST')
-        self.assertRaises(HTTPNotFound, helper.path_elements,'/foo/aq_self')
-        self.assertRaises(HTTPNotFound, helper.path_elements,'/foo/bar/aq_base')
+        env = _makeEnviron()
+        helper = self._makeOne(env)
+        from paste.httpexceptions import HTTPForbidden
+        env['PATH_INFO'] = '/foo/REQUEST'
+        self.assertRaises(HTTPForbidden, helper.path_elements)
+        env['PATH_INFO'] = '/foo/aq_self'
+        self.assertRaises(HTTPForbidden, helper.path_elements)
+        env['PATH_INFO'] = '/foo/bar/aq_base'
+        self.assertRaises(HTTPForbidden, helper.path_elements)
         
     def test_path_elements_startswith_endswith(self):
-        helper = self._makeOne()
+        env = _makeEnviron()
+        env['PATH_INFO'] = '/foo/'
+        helper = self._makeOne(env)
         from paste.httpexceptions import HTTPNotFound
-        self.assertEqual(helper.path_elements('/foo/'), ['foo'])
+        self.assertEqual(helper.path_elements(), ['foo'])
         self.assertEqual(helper.browser_path, '/foo/')
 
     def test_path_elements_empty_elements(self):
-        helper = self._makeOne()
+        env = _makeEnviron()
+        env['PATH_INFO'] = 'foo///'
+        helper = self._makeOne(env)
         from paste.httpexceptions import HTTPNotFound
-        self.assertEqual(helper.path_elements('foo///'), ['foo'])
+        self.assertEqual(helper.path_elements(), ['foo'])
         self.assertEqual(helper.browser_path, 'foo///')
 
     def test_path_elements_onedot(self):
-        helper = self._makeOne()
+        env = _makeEnviron()
+        env['PATH_INFO'] = 'foo/./bar'
+        helper = self._makeOne(env)
         from paste.httpexceptions import HTTPNotFound
-        self.assertEqual(helper.path_elements('foo/./bar'), ['foo', 'bar'])
+        self.assertEqual(helper.path_elements(), ['foo', 'bar'])
         self.assertEqual(helper.browser_path, 'foo/./bar')
 
     def test_path_elements_twodots(self):
-        helper = self._makeOne()
+        env = _makeEnviron()
+        env['PATH_INFO'] = 'foo/../bar'
+        helper = self._makeOne(env)
         from paste.httpexceptions import HTTPNotFound
-        self.assertEqual(helper.path_elements('foo/../bar'), ['bar'])
+        self.assertEqual(helper.path_elements(), ['bar'])
         self.assertEqual(helper.browser_path, 'foo/../bar')
 
-class DummyHelper:
-    def __init__(self, environ, config):
-        self.environ = environ
-        self.config = config
-        
-class DummyPublishedObject:
-    def __call__(self, request=None):
-        self.request = request
-
-class DummyApplication:
-    def __init__(self, conn):
-        self.conn = conn
-
-class DummyConnection:
-    closed = False
-    debuginfo = None
-    def __init__(self, db):
-        self.db = db
-
-    def close(self):
-        self.closed = True
+    def test__before_traversal_nopath_nomethod(self):
+        helper = self._makeOne()
+        helper.request['REQUEST_METHOD'] = ''
+        from paste.httpexceptions import HTTPForbidden
+        self.assertRaises(HTTPForbidden, helper._before_traversal, [], '')
 
-    def setDebugInfo(self, info):
-        self.debuginfo = info
+    def test__before_traversal_xmlrpc_response_webdav_client(self):
+        helper = self._makeOne()
+        helper.request.maybe_webdav_client = True
+        helper._before_traversal(['a'], '/a')
+        self.assertEqual(helper.no_acquire_flag, True)
 
-    def root(self):
-        return {'Application':DummyApplication(self)}
-        
-class DummyDB:
-    def open(self):
-        return DummyConnection(self)
+    def test__before_traversal_xmlrpc_response_not_webdav_client(self):
+        helper = self._makeOne()
+        helper.request.maybe_webdav_client = False
+        helper._before_traversal(['a'], '/a')
+        self.assertEqual(helper.no_acquire_flag, False)
 
-def dummy_configure(config):
-    return DummyDB()
+    def dont_test_make_root(self):
+        # XXX this is hard
+        try:
+            helper = self._makeOne()
+            here = os.path.abspath(os.path.dirname(__file__))
+            config = {'zope.conf':os.path.join(here, 'fixtures', 'zope.conf')}
+            helper.make_root(config)
+        finally:
+            pass
 
-def _makeEnviron():
-    from StringIO import StringIO
-    stdin = StringIO()
-    environ = {}
-    environ['wsgi.input'] = stdin
-    environ['SERVER_NAME'] = 'localhost'
-    environ['SERVER_PORT'] = '8080'
-    environ['PATH_INFO'] = '/foo'
-    return environ

--- NEW FILE: test_root.py ---
import unittest

from repoze.zope2.tests.base import DummyDB
from repoze.zope2.tests.base import DummyTransaction
from repoze.zope2.tests.base import DummyApplication
from repoze.zope2.tests.base import DummyRequest
from repoze.zope2.tests.base import DummyConnection
from repoze.zope2.tests.base import _makeEnviron

class TestRoot(unittest.TestCase):
    def _getTargetClass(self):
        from repoze.zope2.root import Root
        return Root

    def _makeOne(self, db, name, txn):
        return self._getTargetClass()(db, name, txn)

    def test_ctor_noapp(self):
        db = DummyDB()
        db.conn.rootob = {}
        txn = DummyTransaction()
        root = self._makeOne(db, 'Application', txn)
        from OFS.Application import Application
        app = db.conn.rootob['Application']
        self.failUnless(isinstance(app, Application), app)
        self.assertEqual(txn.committed, True)

    def test_ctor_withapp(self):
        db = DummyDB()
        txn = DummyTransaction()
        root = self._makeOne(db, 'Application', txn)
        app = db.conn.rootob['Application']
        self.failUnless(isinstance(app, DummyApplication), app)
        self.assertEqual(txn.committed, False)

    def test_call(self):
        db = DummyDB()
        root = self._makeOne(db, 'Application', None)
        app = root()
        self.failUnless(isinstance(app, DummyApplication), app)
        
    def test_bobo_traverse(self):
        db = DummyDB()
        env = _makeEnviron()
        root = self._makeOne(db, 'Application', None)
        app = root.__bobo_traverse__(DummyRequest(env))
        self.failUnless(isinstance(app, DummyApplication), app)
        self.failUnless('tm.cleanup' in env)
        self.assertEqual(db.conn.debuginfo[0], env)

class CloserTests(unittest.TestCase):
    def test_Closer(self):
        from repoze.zope2.root import Closer
        jar = DummyConnection('whatever')
        a = Closer(jar)
        del a
        self.assertEqual(jar.closed, True)
    

        

        

--- NEW FILE: base.py ---
class DummyResponse:
    pass

class DummyRequest:
    def __init__(self, env):
        self.environ = env
        self.response = DummyResponse()
        self.steps = []
        self.args = []
        self.maybe_webdav_client = False
        self.other = {}

    def get(self, name, default):
        return self.environ.get(name, default)

    def __getitem__(self, name):
        return self.environ[name]

    def __setitem__(self, name, value):
        self.environ[name] = value
        
class DummyHelper:
    def __init__(self, config):
        self.config = config

    def make_root(self):
        return self.config
        
class DummyPublishedObject:
    def __call__(self, request=None):
        self.request = request

class DummyApplication:
    def __init__(self, conn):
        self.conn = conn

class DummyConnection:
    closed = False
    debuginfo = None
    def __init__(self, db):
        self.db = db
        self.rootob = {'Application':DummyApplication(self)}

    def close(self):
        self.closed = True

    def setDebugInfo(self, info, other):
        self.debuginfo = (info, other)

    def root(self):
        return self.rootob
        
class DummyDB:
    def __init__(self):
        self.conn = DummyConnection(self)

    def open(self):
        return self.conn

class DummyTransaction:
    committed = False
    def commit(self):
        self.committed = True

def _makeEnviron():
    from StringIO import StringIO
    stdin = StringIO()
    environ = {}

    # standard CGI/WSGI things
    environ['wsgi.input'] = stdin
    environ['SERVER_NAME'] = 'localhost'
    environ['SERVER_PORT'] = '8080'
    environ['PATH_INFO'] = '/foo'

    # emulate Zope request
    environ['REQUEST_METHOD'] = 'GET'
    environ['URL'] = 'http://localhost:8080'
    environ['PARENTS'] = [None]
    return environ

        

_______________________________________________
Repoze-dev mailing list
Repoze-dev at lists.repoze.org
http://lists.repoze.org/mailman/listinfo/repoze-dev



More information about the Repoze-dev mailing list