Update of /cvsroot/sqlobject/SQLObject/tests
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20327/tests
Modified Files:
SQLObjectTest.py test.py
Log Message:
I wrote a unit test to show that, when using a transaction to create a new
object, its ForeignKey objects were not using that same connection (which
they should have.) Daniel Savard implemented the fix in SQLObject.
I'm also deliberately checking in a broken test that demonstrates how we want
instance validation to work (confirmed with Ian), in the hopes that a broken
test will annoy someone enough to go in and implement in lieu of me/us having
the time to do so. :)
Index: SQLObjectTest.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/tests/SQLObjectTest.py,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** SQLObjectTest.py 4 Dec 2003 16:46:31 -0000 1.21
--- SQLObjectTest.py 11 Feb 2004 16:25:40 -0000 1.22
***************
*** 1,6 ****
import unittest
from SQLObject import *
! True, False = 1==1, 0==1
def mysqlConnection():
--- 1,8 ----
import unittest
+
from SQLObject import *
! True = (1 == 1)
! False = (0 == 1)
def mysqlConnection():
Index: test.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/tests/test.py,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -d -r1.38 -r1.39
*** test.py 21 Jan 2004 22:21:33 -0000 1.38
--- test.py 11 Feb 2004 16:25:40 -0000 1.39
***************
*** 10,13 ****
--- 10,14 ----
import sys
+ sys.path.insert(0, "..")
if '--coverage' in sys.argv:
import coverage
***************
*** 369,395 ****
########################################
! class TestSOTrans(SQLObject):
! #_cacheValues = False
! name = StringCol(length=10, alternateID=True, dbName='name_col')
_defaultOrderBy = 'name'
class TransactionTest(SQLObjectTest):
! classes = [TestSOTrans]
def inserts(self):
! TestSOTrans.new(name='bob')
! TestSOTrans.new(name='tim')
def testTransaction(self):
! if not self.supportTransactions: return
! trans = TestSOTrans._connection.transaction()
try:
! TestSOTrans._connection.autoCommit = 'exception'
! TestSOTrans.new(name='joe', connection=trans)
trans.rollback()
! self.assertEqual([n.name for n in TestSOTrans.select(connection=trans)],
! ['bob', 'tim'])
! b = TestSOTrans.byName('bob', connection=trans)
b.name = 'robert'
trans.commit()
--- 370,402 ----
########################################
! class Man(SQLObject):
! name = StringCol(length = 10, alternateID = True)
!
! class Dog(SQLObject):
_defaultOrderBy = 'name'
+ name = StringCol(length = 10, alternateID = True, dbName = 'name_col')
+ ownerID = ForeignKey('Man', notNone = True)
class TransactionTest(SQLObjectTest):
! classes = [Man, Dog]
def inserts(self):
! bob = Man.new(name = 'bob')
! Dog.new(name = 'fido', ownerID = bob.id)
! Dog.new(name = 'ralph', ownerID = bob.id)
def testTransaction(self):
! if not self.supportTransactions:
! return
!
! trans = Man._connection.transaction()
try:
! Man._connection.autoCommit = 'exception'
! Man.new(name = 'joe', connection = trans)
trans.rollback()
! self.assertEqual([n.name for n in Man.select(connection = trans)], ['bob'])
!
! b = Man.byName('bob', connection = trans)
b.name = 'robert'
trans.commit()
***************
*** 399,403 ****
self.assertEqual(b.name, 'robert')
finally:
! TestSOTrans._connection.autoCommit = True
--- 406,427 ----
self.assertEqual(b.name, 'robert')
finally:
! Man._connection.autoCommit = True
! Dog._connection.autoCommit = True
!
! def testForeignKeyObjConnectionWithinTransaction(self):
! if not self.supportTransactions:
! return
!
! trans = Man._connection.transaction()
! try:
! jim = Man.new(name = 'jim')
! jims_id = jim.id
! del jim
! benji = Dog.new(name = 'benji', ownerID = jims_id, connection = trans)
! self.assertEqual(benji._connection, trans)
! self.assertEqual(benji._connection, benji.owner._connection)
! finally:
! Man._connection.autoCommit = True
! Dog._connection.autoCommit = True
***************
*** 782,790 ****
--- 806,834 ----
########################################
+ class Age2GreaterThanAge1(Validator.FancyValidator):
+ def validatePython(self, values, state):
+ cur_obj = state.soObject
+ if values.has_key('age1'):
+ age1 = int(values['age1'])
+ else:
+ age1 = cur_obj.age1
+
+ if values.has_key('age2'):
+ age2 = int(values['age2'])
+ else:
+ age2 = cur_obj.age2
+
+ if not (age2 > age1):
+ raise Validator.InvalidField(
+ self.message('badAges', 'Age 2 must be greater than age1'), value, state)
+
class SOValidation(SQLObject):
+ _validator = Age2GreaterThanAge1()
name = StringCol(validator=Validator.PlainText(), default='x', dbName='name_col')
name2 = StringCol(validator=Validator.ConfirmType(str), default='y')
name3 = IntCol(validator=Validator.Wrapper(fromPython=int), default=100)
+ age1 = IntCol(notNone = True, default = 1)
+ age2 = IntCol(notNone = True, default = 2)
class ValidationTest(SQLObjectTest):
***************
*** 815,818 ****
--- 859,868 ----
self.assertEqual(t.name3, 0)
+ def testInstanceValidation(self):
+ obj = SOValidation.new(age1 = 5, age2 = 18)
+ self.assertRaises(Validator.InvalidField, setattr, obj, 'age2', 4)
+ self.assertRaises(Validator.InvalidField, obj.set, age1 = 20, age2 = 19)
+ self.assertRaises(Validator.InvalidField, SOValidation.new, age1 = 7, age2 = 3)
+
########################################
|