[Zope-Checkins] CVS: Products/DCOracle2/test -
test_zoracleda_basics.py:1.1 test_zoracleda.py:1.1
test_zopeda.py:1.1
Chris Withers
cvs-admin at zope.org
Fri Oct 31 12:49:41 EST 2003
Update of /cvs-repository/Products/DCOracle2/test
In directory cvs.zope.org:/tmp/cvs-serv12067
Added Files:
test_zoracleda_basics.py test_zoracleda.py test_zopeda.py
Log Message:
New ZOracleDA test suite.
=== Added File Products/DCOracle2/test/test_zoracleda_basics.py ===
import common
import test_zopeda
import unittest
class test_ZOracleDA(test_zopeda.DATests):
def _createDA(self,folder,id):
from Products.ZOracleDA.DA import manage_addZOracleConnection
manage_addZOracleConnection(
folder,
id,
'',
common.getConnectionString()
)
def _getConnectionString(self):
return common.getConnectionString()
create_sql = (
"drop table users",
"create table users (name varchar(10), password varchar(10), role varchar(10))",
)
if __name__ == '__main__':
unittest.main()
=== Added File Products/DCOracle2/test/test_zoracleda.py ===
import unittest
def test_suite():
import test_dcoracle2
import test_zoracleda_basics
return unittest.TestSuite((
test_dcoracle2.test_suite(),
unittest.makeSuite(test_zoracleda_basics.test_ZOracleDA),
))
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')
=== Added File Products/DCOracle2/test/test_zopeda.py ===
# This file defines the DATests class.
# This is an abstract base for testing a
# Zope Database Adapter's basic functionality
import unittest
import Zope
from Testing.makerequest import makerequest
from types import StringType
class DATests(unittest.TestCase):
def _createDA(self,folder,id):
# this should create a Database Adapter object
# with the id supplied of the appropriate type
# in the folder object supplied
raise NotImplementedError
def _getConnectionString(self):
# this should return the connection string
# for use during testing
raise NotImplementedError
# the following SQL should be overridden in the subclass
# if the database under test requires difference SQL
create_sql = (
'drop table user',
'create table users (name varchar, password varchar, role varchar)',
)
insert_sql = (
"insert into users(name,password,role) values ('fred','password','God')",
"insert into users(name,password,role) values ('john','monkey','Manager')",
"insert into users(name,password,role) values ('chris','wibble','Enslaved')",
)
select_sql = (
"select * from users",
)
# The stuff below should only need to be changed when subclassing
# if the database adapter under test does something non-standard.
folder_id = 'test'
def setUp( self ):
if hasattr(Zope, 'startup'):
Zope.startup()
get_transaction().begin()
self.connection = Zope.DB.open()
root = self.root = makerequest(self.connection.root()[ 'Application' ])
self.REQUEST = root.REQUEST
self.RESPONSE = root.REQUEST.RESPONSE
try:
self.root._delObject(self.folder_id)
except AttributeError:
pass
self.root.manage_addFolder(self.folder_id)
self.folder = self.root[self.folder_id]
self._createDA(self.folder,'test_connection')
self.da = self.folder.test_connection
def tearDown( self ):
get_transaction().abort()
self.connection.close()
### UI forms
def test_manage_main(self):
self.da.manage_main(None,self.REQUEST)
def test_manage_properties(self):
self.da.manage_properties(None,self.REQUEST)
def test_manage_testForm(self):
self.da.manage_testForm(None,self.REQUEST)
### support methods
def test_title_and_id(self):
self.failUnless(
isinstance(self.da.title_and_id(),StringType)
)
def test_title_or_id(self):
self.failUnless(
isinstance(self.da.title_and_id(),StringType)
)
def test_connected(self):
self.failIf(self.da.connected())
self.da()
self.failUnless(self.da.connected())
def test_edit(self):
self.da.edit('New Title',
self._getConnectionString(),
1)
self.assertEqual(self.da.title,'New Title')
# can't really check whether connection_String
# and check paramters have any effect :-S
def test_manage_edit(self):
r = self.da.manage_edit('New Title',
self._getConnectionString(),
1,
self.REQUEST)
self.failUnless(r,StringType)
self.assertEqual(self.da.title,'New Title')
# can't really check whether connection_String
# and check paramters have any effect :-S
def test_close_connection(self):
self.da()
self.failUnless(self.da.connected())
self.da.manage_close_connection(self.REQUEST)
self.failIf(self.da.connected())
def test_open_connection(self):
self.failIf(self.da.connected())
self.da.manage_open_connection()
self.failUnless(self.da.connected())
def test_connect(self):
self.failIf(self.da.connected())
self.da.connect(self._getConnectionString())
self.failUnless(self.da.connected())
def test_sql_quote(self):
self.assertEqual(
self.da.sql_quote__("'x'"),
"'''x'''"
)
### functional stuff such as working with ZSQL methods
def test_create(self):
# creation is done in setUp
pass
def test_SQLConnectionIDs(self):
from Acquisition import aq_base
from Products.ZSQLMethods.SQL import SQLConnectionIDs
self.failUnless(
('test_connection','test_connection') in SQLConnectionIDs(self.folder)
)
# paranoid check to see if 'test_conection' is really what
# we're after. Since we've created the test_connection in
# self.folder, all we really need to do is make sure it's not being
# acquired.
self.failUnless(hasattr(aq_base(self.folder),'test_connection'))
def test_call(self):
from Acquisition import aq_base
# call the DA, should return a DB connection surrogate
self.dbc = aq_base(self.da())
# does it have a query method?
self.failUnless(hasattr(self.dbc,'query'))
# do it have TM methods?
### FIXME: How do we actually check that these work?!
for name in [
'_begin',
'_register',
'tpc_begin',
'commit',
'_finish',
'_abort',
'tpc_vote',
'tpc_finish',
'abort',
'tpc_abort',
'sortKey',
]:
self.failUnless(hasattr(self.dbc,name),name)
def test_manage_test(self):
self.test_insertTable()
# this also tests the result building bits
from Shared.DC.ZRDB.Results import Results
r = self.da.manage_test(self.select_sql[0])
self.failUnless(isinstance(r,Results))
self.assertEqual(len(r),3)
self.assertEqual(
r.dictionaries(),
[{'NAME': 'fred', 'ROLE': 'God', 'PASSWORD': 'password'},
{'NAME': 'john', 'ROLE': 'Manager', 'PASSWORD': 'monkey'},
{'NAME': 'chris', 'ROLE': 'Enslaved', 'PASSWORD': 'wibble'}]
)
def _callSQL(self,attributename):
results = []
for statement in getattr(self,attributename):
results.append(self.da().query(statement))
return results
def test_createTable(self):
self.assertEqual(
self._callSQL('create_sql'),
[((), ()), ((), ())],
)
def test_insertTable(self):
self.test_createTable()
self.assertEqual(
self._callSQL('insert_sql'),
[((), ()), ((), ()), ((), ())],
)
def test_selectTable(self):
self.test_insertTable()
self.assertEqual(
self._callSQL('select_sql'),
[
([{'name': 'NAME', 'type': 's', 'null': 1, 'width': 10},
{'name': 'PASSWORD', 'type': 's', 'null': 1, 'width': 10},
{'name': 'ROLE', 'type': 's', 'null': 1, 'width': 10}],
[['fred', 'password', 'God'],
['john', 'monkey', 'Manager'],
['chris', 'wibble', 'Enslaved']])
]
)
def test_selectTableMaxRows(self):
self.test_insertTable()
# second parameter to query method is max rows
self.assertEqual(
self.da().query(self.select_sql[0],2),
([{'name': 'NAME', 'type': 's', 'null': 1, 'width': 10},
{'name': 'PASSWORD', 'type': 's', 'null': 1, 'width': 10},
{'name': 'ROLE', 'type': 's', 'null': 1, 'width': 10}],
[['fred', 'password', 'God'],
['john', 'monkey', 'Manager']])
)
More information about the Zope-Checkins
mailing list