[Zope-Checkins] CVS: Zope/lib/python/OFS/tests -
testAppInitializer.py:1.2
Chris McDonough
chrism at zopemafia.com
Sat Dec 20 13:56:06 EST 2003
Update of /cvs-repository/Zope/lib/python/OFS/tests
In directory cvs.zope.org:/tmp/cvs-serv16192/tests
Added Files:
testAppInitializer.py
Log Message:
Overhaul how the Application object is initialized (replace long function with a somewhat structured recipe). Include tests for initializer functionality.
=== Zope/lib/python/OFS/tests/testAppInitializer.py 1.1 => 1.2 ===
--- /dev/null Sat Dec 20 13:56:06 2003
+++ Zope/lib/python/OFS/tests/testAppInitializer.py Sat Dec 20 13:56:05 2003
@@ -0,0 +1,211 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+import os, sys, unittest, tempfile, cStringIO
+
+import ZODB
+from OFS.Application import Application, AppInitializer, get_products
+import Zope.Startup
+import ZConfig
+from App.config import getConfiguration, setConfiguration
+
+TEMPNAME = tempfile.mktemp()
+TEMPPRODUCTS = os.path.join(TEMPNAME, "Products")
+
+bad_cfg = """
+instancehome <<INSTANCE_HOME>>
+
+<zodb_db main>
+ mount-point /
+ <mappingstorage>
+ name mappingstorage
+ </mappingstorage>
+</zodb_db>
+"""
+
+good_cfg = bad_cfg + """
+<zodb_db temporary>
+ # Temporary storage database (for sessions)
+ <temporarystorage>
+ name temporary storage for sessioning
+ </temporarystorage>
+ mount-point /temp_folder
+ container-class Products.TemporaryFolder.TemporaryContainer
+</zodb_db>
+"""
+
+def getSchema():
+ startup = os.path.dirname(os.path.realpath(Zope.Startup.__file__))
+ schemafile = os.path.join(startup, 'zopeschema.xml')
+ return ZConfig.loadSchema(schemafile)
+
+def getApp():
+ from ZODB.ZApplication import ZApplicationWrapper
+ DB = getConfiguration().dbtab.getDatabase('/')
+ return ZApplicationWrapper(DB, 'Application', Application, (), 'foo')()
+
+original_config = None
+
+class TestInitialization( unittest.TestCase ):
+ """ Test the application initializer object """
+
+ def setUp(self):
+ global original_config
+ if original_config is None:
+ original_config = getConfiguration()
+ self.schema = getSchema()
+ os.makedirs(TEMPNAME)
+ os.makedirs(TEMPPRODUCTS)
+
+ def tearDown(self):
+ import App.config
+ del self.schema
+ App.config.setConfiguration(original_config)
+ os.rmdir(TEMPPRODUCTS)
+ os.rmdir(TEMPNAME)
+
+ def configure(self, text):
+ # We have to create a directory of our own since the existence
+ # of the directory is checked. This handles this in a
+ # platform-independent way.
+ schema = self.schema
+ sio = cStringIO.StringIO(text.replace("<<INSTANCE_HOME>>", TEMPNAME))
+ conf, handler = ZConfig.loadConfigFile(schema, sio)
+ self.assertEqual(conf.instancehome, TEMPNAME)
+ setConfiguration(conf)
+
+ def getOne(self):
+ app = getApp()
+ return AppInitializer(app)
+
+ def test_install_cp_and_products(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ app = i.getApp()
+ i.install_cp_and_products()
+ self.failUnless(hasattr(app, 'Control_Panel'))
+ self.assertEqual(app.Control_Panel.meta_type, 'Control Panel')
+ self.failUnless(hasattr(app.Control_Panel, 'Products'))
+ self.assertEqual(app.Control_Panel.Products.meta_type,
+ 'Product Management')
+
+ def test_install_tempfolder_and_sdc(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ i.install_tempfolder_and_sdc()
+ app = i.getApp()
+ self.assertEqual(app.temp_folder.meta_type, 'Temporary Folder')
+ self.assertEqual(app.temp_folder.session_data.meta_type,
+ 'Transient Object Container')
+ self.failUnless(app._getInitializerFlag('temp_folder'))
+
+ def test_install_tempfolder_and_sdc_status(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ status = i.install_tempfolder_and_sdc()
+ self.failUnless(status)
+
+ i = self.getOne()
+ self.configure(bad_cfg)
+ status = i.install_tempfolder_and_sdc()
+ self.failIf(status)
+
+ def test_install_browser_id_manager(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ app = i.getApp()
+ i.install_browser_id_manager()
+ self.assertEqual(app.browser_id_manager.meta_type,'Browser Id Manager')
+ self.failUnless(app._getInitializerFlag('browser_id_manager'))
+
+ def test_install_session_data_manager(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ i.install_session_data_manager()
+ app = i.getApp()
+ self.assertEqual(app.session_data_manager.meta_type,
+ 'Session Data Manager')
+ self.failUnless(app._getInitializerFlag('session_data_manager'))
+
+ def test_install_required_roles(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ i.install_required_roles()
+ app = i.getApp()
+ self.failUnless('Owner' in app.__ac_roles__)
+ self.failUnless('Authenticated' in app.__ac_roles__)
+
+ def test_install_zglobals(self):
+ from BTrees.OOBTree import OOBTree
+ self.configure(good_cfg)
+ i = self.getOne()
+ i.install_zglobals()
+ root = i.getApp()._p_jar.root()
+ self.failUnless(root.has_key('ZGlobals'))
+ self.failUnless(isinstance(root['ZGlobals'], OOBTree))
+
+ def test_install_inituser(self):
+ fname = os.path.join(TEMPNAME, 'inituser')
+ f = open(fname, 'w')
+ f.write('theuser:password')
+ f.close()
+ try:
+ self.configure(good_cfg)
+ i = self.getOne()
+ i.install_inituser()
+ app = i.getApp()
+ self.failUnless(app.acl_users.getUser('theuser'))
+ finally:
+ if os.path.exists(fname):
+ os.unlink(fname)
+
+ def test_install_errorlog(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ i.install_errorlog()
+ app = i.getApp()
+ self.assertEqual(app.error_log.meta_type, 'Site Error Log')
+ self.failUnless(app._getInitializerFlag('error_log'))
+
+ def test_install_products(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ i.install_products()
+ self.failUnless(Application.misc_.__dict__.has_key('OFSP'))
+
+ def test_install_standards(self):
+ self.configure(good_cfg)
+ i = self.getOne()
+ i.install_products() # required
+ i .install_standards()
+ app = i.getApp()
+ self.assertEqual(app.index_html.meta_type, 'DTML Method')
+ self.assertEqual(app.standard_error_message.meta_type, 'DTML Method')
+ self.assertEqual(app.standard_html_header.meta_type, 'DTML Method')
+ self.assertEqual(app.standard_html_footer.meta_type, 'DTML Method')
+ self.assertEqual(getattr(app, 'standard_template.pt').meta_type,
+ 'Page Template')
+ self.failUnless(hasattr(app, '_standard_objects_have_been_added'))
+
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest( unittest.makeSuite( TestInitialization ) )
+ return suite
+
+def main():
+ unittest.main(defaultTest='test_suite')
+
+if __name__ == '__main__':
+ main()
More information about the Zope-Checkins
mailing list