[z3-checkins] r18254 - in z3/sqlos/branch/jinty-3.0-fix_the_tests:
. event ftests testing
jinty at codespeak.net
jinty at codespeak.net
Fri Oct 7 11:33:08 CEST 2005
Author: jinty
Date: Fri Oct 7 11:33:05 2005
New Revision: 18254
Modified:
z3/sqlos/branch/jinty-3.0-fix_the_tests/adapter.py
z3/sqlos/branch/jinty-3.0-fix_the_tests/event/subscriber.py
z3/sqlos/branch/jinty-3.0-fix_the_tests/ftests/test_transaction.py
z3/sqlos/branch/jinty-3.0-fix_the_tests/testing/sampleperson.py
Log:
Another huge patch:
* Set the supportTransactions attribute for the Postgres and SQLite adapters to
True, because, well, they do and the tests can handle it now.
* Re-factor the SamplePerson a little and add a SampleContainer.
* Add in an ftesting.zcml to provide a central place for configuring functional
tests, this allows the functional tests to be run against different databases.
* Un-comment the functional test, simplify it greatly (perhaps too much).
All functional tests and unit tests pass now under Zope3.0. Hooray!
Modified: z3/sqlos/branch/jinty-3.0-fix_the_tests/adapter.py
==============================================================================
--- z3/sqlos/branch/jinty-3.0-fix_the_tests/adapter.py (original)
+++ z3/sqlos/branch/jinty-3.0-fix_the_tests/adapter.py Fri Oct 7 11:33:05 2005
@@ -60,6 +60,16 @@
return val
class MySQLAdapter(ConnectionAdapter, _mysql.builder()): pass
-class PostgresAdapter(ConnectionAdapter, _postgres.builder()): pass
class SybaseAdapter(ConnectionAdapter, _sybase.builder()): pass
-class SQLiteAdapter(ConnectionAdapter, _sqlite.builder()): pass
+
+
+class PostgresAdapter(ConnectionAdapter, _postgres.builder()):
+ def __init__(self, connection):
+ super(PostgresAdapter, self).__init__(connection)
+ self.supportTransactions = True
+
+
+class SQLiteAdapter(ConnectionAdapter, _sqlite.builder()):
+ def __init__(self, connection):
+ super(SQLiteAdapter, self).__init__(connection)
+ self.supportTransactions = True
Modified: z3/sqlos/branch/jinty-3.0-fix_the_tests/event/subscriber.py
==============================================================================
--- z3/sqlos/branch/jinty-3.0-fix_the_tests/event/subscriber.py (original)
+++ z3/sqlos/branch/jinty-3.0-fix_the_tests/event/subscriber.py Fri Oct 7 11:33:05 2005
@@ -31,7 +31,7 @@
def sqlobjectExpiredSubscriber(event):
obj = event.object
-
+
if not ISQLObject.providedBy(obj): return
from sqlos.connection import connCache
Modified: z3/sqlos/branch/jinty-3.0-fix_the_tests/ftests/test_transaction.py
==============================================================================
--- z3/sqlos/branch/jinty-3.0-fix_the_tests/ftests/test_transaction.py (original)
+++ z3/sqlos/branch/jinty-3.0-fix_the_tests/ftests/test_transaction.py Fri Oct 7 11:33:05 2005
@@ -10,57 +10,41 @@
$Id$
"""
import unittest
-from transaction import get_transaction
+from transaction import get
from zope.app.tests.functional import BrowserTestCase
-from zope.app import zapi
-from zope.app.tests import setup
+from zope.app.tests import ztapi, setup
from zope.app.rdb import ZopeConnection
from zope.app.rdb.interfaces import IZopeDatabaseAdapter
from zope.security.checker import defineChecker, NoProxy
from sqlos import getFactory
from sqlos.container import SQLObjectContainer
-from sqlos.testing.sampleperson import SamplePerson
+from sqlos.testing.sampleperson import SamplePerson, SamplePersonContainer
from psycopgda.adapter import PsycopgAdapter
__metaclass__ = type
-DSN = 'dbi://zope3:123@localhost:5432/zope3'
-
-defineChecker(SamplePerson, NoProxy)
-
class TestTransaction(BrowserTestCase):
def setUp(self):
- BrowserTestCase.setUp(self)
- self.conn = PsycopgAdapter(DSN)
- utilities = zapi.getService(None, zapi.servicenames.Utilities)
- utilities.provideUtility(IZopeDatabaseAdapter, self.conn, 'stub')
- container = SQLObjectContainer()
- container = self.createContainer(container)
-
- # Create a service manager at the approot level
- mgr = setup.createServiceManager(container)
-
- container.classNames = ['SamplePerson',]
- kwargs = {'fullname':'Sidnei da Silva',
- 'username':'sidnei',
- 'password':'test'}
- self.person = self.createObject(container, **kwargs)
- get_transaction().commit()
-
- def createContainer(self, container):
- folder = self.getRootFolder()
- folder['sqlcontainer'] = container
- return folder['sqlcontainer']
-
- def createObject(self, container, **kwargs):
- factory = getFactory(container.classNames[0])
- person = factory.new(**kwargs)
- container['sampleperson'] = person
- return container['SamplePerson.%s' % person.id]
+ super(TestTransaction, self).setUp()
+ root = self.getRootFolder()
+ sqlcontainer = SQLObjectContainer()
+ root['sqlcontainer'] = sqlcontainer
+ # get the factory for the container, create the person and add them
+ #factory = sqlcontainer.allowedFactories()[0]
+ SamplePerson.createTable(ifNotExists=True)
+ self.person = SamplePerson(fullname='Sidnei da Silva',
+ username='sidnei',
+ password='test')
+ sqlcontainer['SamplePerson.%s' % self.person.id] = self.person
+ # Commit what we have done
+ get().commit()
+
+ def supportTransactions(self):
+ return SamplePerson._connection.supportTransactions
def testChange(self):
person = self.person
@@ -70,11 +54,14 @@
person.fullname = 'Sidnei Silva'
person.username = 'dreamcatcher'
person.password = 'pass'
+ person.syncUpdate() # XXX - This sync should not be necessary but is
+ # unless _cacheValues=False is removed from
+ # SamplePerson - jinty
self.assertEqual(person.fullname, 'Sidnei Silva')
self.assertEqual(person.username, 'dreamcatcher')
self.assertEqual(person.password, 'pass')
-
- def testAbort(self):
+
+ def testCommit(self):
person = self.person
self.assertEqual(person.fullname, 'Sidnei da Silva')
self.assertEqual(person.username, 'sidnei')
@@ -82,19 +69,40 @@
person.fullname = 'Sidnei Silva'
person.username = 'dreamcatcher'
person.password = 'pass'
- get_transaction().abort()
+ get().commit()
+ person.syncUpdate() # Let's see what is in the database
+ self.assertEqual(person.fullname, 'Sidnei Silva')
+ self.assertEqual(person.username, 'dreamcatcher')
+ self.assertEqual(person.password, 'pass')
+
+ def testAbort(self):
+ person = self.person
self.assertEqual(person.fullname, 'Sidnei da Silva')
self.assertEqual(person.username, 'sidnei')
self.assertEqual(person.password, 'test')
+ person.fullname = 'Sidnei Silva'
+ person.username = 'dreamcatcher'
+ person.password = 'pass'
+ person.sync() # Sunc to make sure that the DB is sent the statements
+ get().abort()
+ if self.supportTransactions():
+ self.assertEqual(person.fullname, 'Sidnei da Silva')
+ self.assertEqual(person.username, 'sidnei')
+ self.assertEqual(person.password, 'test')
+ else:
+ # ya well no fine
+ self.assertEqual(person.fullname, 'Sidnei Silva')
+ self.assertEqual(person.username, 'dreamcatcher')
+ self.assertEqual(person.password, 'pass')
def tearDown(self):
self.person.destroySelf()
- BrowserTestCase.tearDown(self)
+ super(TestTransaction, self).tearDown()
+ SamplePerson.dropTable()
def test_suite():
suite = unittest.TestSuite()
- # XXX disable for now, this is too broken
- # suite.addTest(unittest.makeSuite(TestTransaction))
+ suite.addTest(unittest.makeSuite(TestTransaction))
return suite
Modified: z3/sqlos/branch/jinty-3.0-fix_the_tests/testing/sampleperson.py
==============================================================================
--- z3/sqlos/branch/jinty-3.0-fix_the_tests/testing/sampleperson.py (original)
+++ z3/sqlos/branch/jinty-3.0-fix_the_tests/testing/sampleperson.py Fri Oct 7 11:33:05 2005
@@ -1,8 +1,13 @@
-from zope.interface import implements
from sqlobject import *
+from zope.interface import implements
+from zope.schema import TextLine, Text, Datetime
+from zope.app.container.constraints import ItemTypePrecondition
+
from sqlos import SQLOS
from sqlos.interfaces import ISQLSchema
-from zope.schema import TextLine, Text, Datetime
+from sqlos.interfaces.container import ISQLObjectContainer
+from sqlos.container import SQLObjectContainer
+
class IPerson(ISQLSchema):
@@ -13,6 +18,7 @@
password = TextLine(title=u'Password',
description=u"The user's password")
+
class SamplePerson(SQLOS):
implements(IPerson)
@@ -21,8 +27,16 @@
# during testing.
_cacheValues = False
- _columns = [
- StringCol('fullname', length=50, notNull=1),
- StringCol('username', length=20, notNull=1),
- StringCol('password', length=20, notNull=1),
- ]
+ fullname = StringCol(length=50, notNull=1)
+ username = StringCol(length=20, notNull=1)
+ password = StringCol(length=20, notNull=1)
+
+
+class IPersonContainer(ISQLObjectContainer):
+ def __setitem__(name, item):
+ pass
+ __setitem__.precondition = ItemTypePrecondition(IPerson)
+
+
+class SamplePersonContainer(SQLObjectContainer):
+ implements(IPersonContainer)
More information about the z3-checkins
mailing list