Log message for revision 97643: Reverted r90443 and r90454. We keep the shopping cart tests working by including a copy of Examples.zexp.
Changed: U Zope/trunk/src/Testing/ZopeTestCase/doc/ENVIRONMENT.txt U Zope/trunk/src/Testing/ZopeTestCase/doc/HOWTO.stx U Zope/trunk/src/Testing/ZopeTestCase/doc/README.stx U Zope/trunk/src/Testing/ZopeTestCase/doc/TIMELINES.txt U Zope/trunk/src/Testing/ZopeTestCase/testBaseTestCase.py U Zope/trunk/src/Testing/ZopeTestCase/testPortalTestCase.py A Zope/trunk/src/Testing/ZopeTestCase/testShoppingCart.py U Zope/trunk/src/Testing/ZopeTestCase/testZopeTestCase.py A Zope/trunk/src/Testing/ZopeTestCase/testimport/ A Zope/trunk/src/Testing/ZopeTestCase/testimport/Examples.zexp -=- Modified: Zope/trunk/src/Testing/ZopeTestCase/doc/ENVIRONMENT.txt =================================================================== --- Zope/trunk/src/Testing/ZopeTestCase/doc/ENVIRONMENT.txt 2009-03-07 22:04:50 UTC (rev 97642) +++ Zope/trunk/src/Testing/ZopeTestCase/doc/ENVIRONMENT.txt 2009-03-07 22:26:44 UTC (rev 97643) @@ -2,9 +2,14 @@ ZTC makes the following assumptions about its environment: a) The 'ZopeTestCase' package is installed in the Zope "trunk" inside the - 'Testing' module. + 'Testing' module, which means: SOFTWARE_HOME/Testing/ZopeTestCase. -b) The somewhat weak assumption is that ZTC can walk up the directory tree from +b) A 'Products' directory exists inside SOFTWARE_HOME and INSTANCE_HOME. + +c) The tests (the 'tests' subdirectories) are located either below a + SOFTWARE_HOME or INSTANCE_HOME, typically in Products/MyCoolProduct/tests. + +d) The somewhat weak assumption is that ZTC can walk up the directory tree from 'tests', and find a 'Products' directory. This is how INSTANCE_HOME detection works. It regrettably fails on some filesystems when symbolic links are involved (a solution is detailed below, so hang on). @@ -19,7 +24,8 @@ ZTC attempts to resolve this by detecting an INSTANCE_HOME for 1) but leaving -the actual environment variable untouched. +the actual environment variable untouched so 2) works by still pointing into +SOFTWARE_HOME/Testing. As soon as I allow you to set INSTANCE_HOME yourself, I lose the ability to distinguish whether you mean 1) or 2) or both. Modified: Zope/trunk/src/Testing/ZopeTestCase/doc/HOWTO.stx =================================================================== --- Zope/trunk/src/Testing/ZopeTestCase/doc/HOWTO.stx 2009-03-07 22:04:50 UTC (rev 97642) +++ Zope/trunk/src/Testing/ZopeTestCase/doc/HOWTO.stx 2009-03-07 22:26:44 UTC (rev 97643) @@ -176,6 +176,9 @@ It demonstrates how to manipulate the test user's roles and permissions and how security is validated. + - **'testShoppingCart.py'** tests the ShoppingCart example. This test + uses Sessions and shows how to test a TTW Zope application. + - **'testFunctional.py'** demonstrates the new functional testing features. Tests may call 'self.publish()' to simulate URL calls to the ZPublisher. Modified: Zope/trunk/src/Testing/ZopeTestCase/doc/README.stx =================================================================== --- Zope/trunk/src/Testing/ZopeTestCase/doc/README.stx 2009-03-07 22:04:50 UTC (rev 97642) +++ Zope/trunk/src/Testing/ZopeTestCase/doc/README.stx 2009-03-07 22:26:44 UTC (rev 97643) @@ -43,9 +43,27 @@ Note that there is a skeleton test suite named 'testSkeleton.py' that you may copy into your 'tests' directory and take it from there. + Note also that when the tests are run in an INSTANCE_HOME installation of + Zope, you must set the SOFTWARE_HOME environment variable for the 'Testing' + and 'ZopeTestCase' packages to be found. + See the sample tests in the 'ZopeTestCase' directory for details on writing your own tests. +framework.py + + 1. Uses SOFTWARE_HOME (if set) to locate the Testing package. + + 2. Detects and handles INSTANCE_HOME installations of Zope. Please + see ENVIRONMENT.txt for the assumptions ZTC makes about its + environment. + + 3. Supports setting up a ZODB from a 'custom_zodb.py' file in + the 'tests' directory. + + 4. Allows to connect to a running ZEO server by setting the + ZEO_INSTANCE_HOME environment variable. + testrunner.py Alternatively, you may use Zope's testrunner utility to run your tests @@ -53,7 +71,8 @@ installation). If you do so, you will have to define a 'test_suite' method in your modules (see examples). - You may have to provide the -i flag when testing in an INSTANCE_HOME setup. + There is no need to set SOFTWARE_HOME when using the testrunner but you may + have to provide the -i flag when testing in an INSTANCE_HOME setup. Example: 'python /path/to/Zope/utilities/testrunner.py -q -i -a' Modified: Zope/trunk/src/Testing/ZopeTestCase/doc/TIMELINES.txt =================================================================== --- Zope/trunk/src/Testing/ZopeTestCase/doc/TIMELINES.txt 2009-03-07 22:04:50 UTC (rev 97642) +++ Zope/trunk/src/Testing/ZopeTestCase/doc/TIMELINES.txt 2009-03-07 22:26:44 UTC (rev 97643) @@ -5,6 +5,7 @@ 1. includes file framework.py 1.1 locates and imports the Testing package by means of + - SOFTWARE_HOME environment variable - auto-detection 1.2 locates and includes file ztc_common.py Modified: Zope/trunk/src/Testing/ZopeTestCase/testBaseTestCase.py =================================================================== --- Zope/trunk/src/Testing/ZopeTestCase/testBaseTestCase.py 2009-03-07 22:04:50 UTC (rev 97642) +++ Zope/trunk/src/Testing/ZopeTestCase/testBaseTestCase.py 2009-03-07 22:26:44 UTC (rev 97643) @@ -15,8 +15,9 @@ NOTE: This is *not* an example TestCase. Do not use this file as a blueprint for your own tests! -See testPythonScript.py for example test cases. See testSkeleton.py for a -quick way of getting started. +See testPythonScript.py and testShoppingCart.py for +example test cases. See testSkeleton.py for a quick +way of getting started. $Id$ """ Modified: Zope/trunk/src/Testing/ZopeTestCase/testPortalTestCase.py =================================================================== --- Zope/trunk/src/Testing/ZopeTestCase/testPortalTestCase.py 2009-03-07 22:04:50 UTC (rev 97642) +++ Zope/trunk/src/Testing/ZopeTestCase/testPortalTestCase.py 2009-03-07 22:26:44 UTC (rev 97643) @@ -15,8 +15,9 @@ NOTE: This is *not* an example TestCase. Do not use this file as a blueprint for your own tests! -See testPythonScript.py for example test cases. See testSkeleton.py for a -quick way of getting started. +See testPythonScript.py and testShoppingCart.py for +example test cases. See testSkeleton.py for a quick +way of getting started. $Id$ """ Copied: Zope/trunk/src/Testing/ZopeTestCase/testShoppingCart.py (from rev 90453, Zope/trunk/lib/python/Testing/ZopeTestCase/testShoppingCart.py) =================================================================== --- Zope/trunk/src/Testing/ZopeTestCase/testShoppingCart.py (rev 0) +++ Zope/trunk/src/Testing/ZopeTestCase/testShoppingCart.py 2009-03-07 22:26:44 UTC (rev 97643) @@ -0,0 +1,131 @@ +############################################################################## +# +# Copyright (c) 2005 Zope Corporation and Contributors. All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (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. +# +############################################################################## +"""Example ZopeTestCase testing the ShoppingCart example application + +Note the use of sessions and how the SESSION object is added to +the REQUEST in afterSetUp(). + +$Id$ +""" + +import os + +from Testing import ZopeTestCase + +from Testing.ZopeTestCase import layer +from Testing.ZopeTestCase import utils +from Testing.ZopeTestCase import transaction + +here = os.path.dirname(ZopeTestCase.__file__) +examples_path = os.path.join(here, 'testimport', 'Examples.zexp') + + +class ShoppingCartLayer(layer.ZopeLite): + + @classmethod + def setUp(cls): + # Set up sessioning objects + utils.appcall(utils.setupCoreSessions) + + # Set up example applications + utils.appcall(utils.importObjectFromFile, examples_path, quiet=1) + + @classmethod + def tearDown(cls): + def cleanup(app): + app._delObject('Examples') + transaction.commit() + utils.appcall(cleanup) + + +class DummyOrder: + '''Construct an order we can add to the cart''' + __allow_access_to_unprotected_subobjects__ = 1 + + def __init__(self, id, quantity): + self.id = id + self.quantity = quantity + + +class TestShoppingCart(ZopeTestCase.ZopeTestCase): + '''Test the ShoppingCart example application''' + + _setup_fixture = 0 # No default fixture + + layer = ShoppingCartLayer + + def afterSetUp(self): + self.cart = self.app.Examples.ShoppingCart + # Put SESSION object into REQUEST + request = self.app.REQUEST + sdm = self.app.session_data_manager + request.set('SESSION', sdm.getSessionData()) + self.session = request.SESSION + + def testSession(self): + # Session should work + self.session.set('boring', 'boring') + self.assertEqual(self.session.get('boring'), 'boring') + + def testCartIsEmpty(self): + # Cart should be empty + self.assertEqual(len(self.cart.currentItems()), 0) + + def testAddItems(self): + # Adding to the cart should work + self.cart.addItems([DummyOrder('510-115', 1),]) + self.assertEqual(len(self.cart.currentItems()), 1) + + def testDeleteItems(self): + # Deleting from the cart should work + self.cart.addItems([DummyOrder('510-115', 1),]) + self.cart.deleteItems(['510-115']) + self.assertEqual(len(self.cart.currentItems()), 0) + + def testAddQuantity(self): + # Adding to quantity should work + self.cart.addItems([DummyOrder('510-115', 1),]) + self.cart.addItems([DummyOrder('510-115', 2),]) + self.cart.addItems([DummyOrder('510-115', 3),]) + self.assertEqual(self.cart.currentItems()[0]['quantity'], 6) + + def testGetTotal(self): + # Totals should be computed correctly + self.cart.addItems([DummyOrder('510-115', 1),]) + self.cart.addItems([DummyOrder('510-122', 2),]) + self.cart.addItems([DummyOrder('510-007', 2),]) + self.assertEqual(self.cart.getTotal(), 149.95) + + def testGetItem(self): + # Getting an item from the "database" should work + item = self.cart.getItem('510-115') + self.assertEqual(item['id'], '510-115') + self.assertEqual(item['title'], 'Econo Feeder') + self.assertEqual(item['price'], 7.95) + + def testEight(self): + # Additional test to trigger connection pool depletion bug + pass + + +class TestSandboxedShoppingCart(ZopeTestCase.Sandboxed, TestShoppingCart): + '''Demonstrate that sessions work in sandboxes''' + + +def test_suite(): + from unittest import TestSuite, makeSuite + suite = TestSuite() + suite.addTest(makeSuite(TestShoppingCart)) + suite.addTest(makeSuite(TestSandboxedShoppingCart)) + return suite + Modified: Zope/trunk/src/Testing/ZopeTestCase/testZopeTestCase.py =================================================================== --- Zope/trunk/src/Testing/ZopeTestCase/testZopeTestCase.py 2009-03-07 22:04:50 UTC (rev 97642) +++ Zope/trunk/src/Testing/ZopeTestCase/testZopeTestCase.py 2009-03-07 22:26:44 UTC (rev 97643) @@ -15,8 +15,9 @@ NOTE: This is *not* an example TestCase. Do not use this file as a blueprint for your own tests! -See testPythonScript.py for example test cases. See testSkeleton.py for a -quick way of getting started. +See testPythonScript.py and testShoppingCart.py for +example test cases. See testSkeleton.py for a quick +way of getting started. $Id$ """ Added: Zope/trunk/src/Testing/ZopeTestCase/testimport/Examples.zexp =================================================================== (Binary files differ) Property changes on: Zope/trunk/src/Testing/ZopeTestCase/testimport/Examples.zexp ___________________________________________________________________ Added: svn:mime-type + application/octet-stream _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins