Commit 9f3573cd authored by Stefan H. Holek's avatar Stefan H. Holek

Reverted r90443 and r90454. We keep the shopping cart tests working by...

Reverted r90443 and r90454. We keep the shopping cart tests working by including a copy of Examples.zexp.
parent 13102631
......@@ -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 @@ The non-trivial part is that INSTANCE_HOME has two distinct purposes:
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.
......
......@@ -176,6 +176,9 @@ Writing Tests
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.
......
......@@ -43,9 +43,27 @@ ZopeTestCase Readme
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 @@ testrunner.py
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'
......
......@@ -5,6 +5,7 @@ When the skeleton test is run by typing 'python testSkeleton.py', it
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
......
......@@ -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$
"""
......
......@@ -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$
"""
......
##############################################################################
#
# 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
......@@ -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$
"""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment