[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