[Sqlalchemy-commits] [2261] sqlalchemy/trunk/test: - added a standardized test harness for ORM test
Brought to you by:
zzzeek
From: <co...@sq...> - 2007-01-27 20:29:49
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[2261] sqlalchemy/trunk/test: - added a standardized test harness for ORM tests</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>2261</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2007-01-27 16:31:39 -0600 (Sat, 27 Jan 2007)</dd> </dl> <h3>Log Message</h3> <pre>- added a standardized test harness for ORM tests - added three-level mapping test. needed some massaging for postgres</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunktestorminheritancepy">sqlalchemy/trunk/test/orm/inheritance.py</a></li> <li><a href="#sqlalchemytrunktestorminheritance2py">sqlalchemy/trunk/test/orm/inheritance2.py</a></li> <li><a href="#sqlalchemytrunktestorminheritance3py">sqlalchemy/trunk/test/orm/inheritance3.py</a></li> <li><a href="#sqlalchemytrunktestorminheritance4py">sqlalchemy/trunk/test/orm/inheritance4.py</a></li> <li><a href="#sqlalchemytrunktestorminheritance5py">sqlalchemy/trunk/test/orm/inheritance5.py</a></li> <li><a href="#sqlalchemytrunktestormmanytomanypy">sqlalchemy/trunk/test/orm/manytomany.py</a></li> <li><a href="#sqlalchemytrunktesttestbasepy">sqlalchemy/trunk/test/testbase.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunktestorminheritancepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/orm/inheritance.py (2260 => 2261)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/orm/inheritance.py 2007-01-27 21:30:35 UTC (rev 2260) +++ sqlalchemy/trunk/test/orm/inheritance.py 2007-01-27 22:31:39 UTC (rev 2261) </span><span class="lines">@@ -14,15 +14,14 @@ </span><span class="cx"> class Group( Principal ): </span><span class="cx"> pass </span><span class="cx"> </span><del>-class InheritTest(testbase.AssertMixin): </del><ins>+class InheritTest(testbase.ORMTest): </ins><span class="cx"> """deals with inheritance and many-to-many relationships""" </span><del>- def setUpAll(self): </del><ins>+ def define_tables(self, metadata): </ins><span class="cx"> global principals </span><span class="cx"> global users </span><span class="cx"> global groups </span><span class="cx"> global user_group_map </span><del>- global metadata - metadata = BoundMetaData(testbase.db) </del><ins>+ </ins><span class="cx"> principals = Table( </span><span class="cx"> 'principals', </span><span class="cx"> metadata, </span><span class="lines">@@ -57,14 +56,6 @@ </span><span class="cx"> </span><span class="cx"> ) </span><span class="cx"> </span><del>- metadata.create_all() - - def tearDownAll(self): - metadata.drop_all() - - def setUp(self): - clear_mappers() - </del><span class="cx"> def testbasic(self): </span><span class="cx"> mapper( Principal, principals ) </span><span class="cx"> mapper( </span><span class="lines">@@ -87,11 +78,10 @@ </span><span class="cx"> sess.flush() </span><span class="cx"> # TODO: put an assertion </span><span class="cx"> </span><del>-class InheritTest2(testbase.AssertMixin): </del><ins>+class InheritTest2(testbase.ORMTest): </ins><span class="cx"> """deals with inheritance and many-to-many relationships""" </span><del>- def setUpAll(self): - global foo, bar, foo_bar, metadata - metadata = BoundMetaData(testbase.db) </del><ins>+ def define_tables(self, metadata): + global foo, bar, foo_bar </ins><span class="cx"> foo = Table('foo', metadata, </span><span class="cx"> Column('id', Integer, Sequence('foo_id_seq'), primary_key=True), </span><span class="cx"> Column('data', String(20)), </span><span class="lines">@@ -105,9 +95,6 @@ </span><span class="cx"> foo_bar = Table('foo_bar', metadata, </span><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id')), </span><span class="cx"> Column('bar_id', Integer, ForeignKey('bar.bid'))) </span><del>- metadata.create_all() - def tearDownAll(self): - metadata.drop_all() </del><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="cx"> class Foo(object): </span><span class="lines">@@ -147,11 +134,11 @@ </span><span class="cx"> {'id':b.id, 'data':'barfoo', 'foos':(Foo, [{'id':f1.id,'data':'subfoo1'}, {'id':f2.id,'data':'subfoo2'}])}, </span><span class="cx"> ) </span><span class="cx"> </span><del>-class InheritTest3(testbase.AssertMixin): </del><ins>+class InheritTest3(testbase.ORMTest): </ins><span class="cx"> """deals with inheritance and many-to-many relationships""" </span><del>- def setUpAll(self): - global foo, bar, blub, bar_foo, blub_bar, blub_foo,metadata - metadata = BoundMetaData(testbase.db) </del><ins>+ def define_tables(self, metadata): + global foo, bar, blub, bar_foo, blub_bar, blub_foo + </ins><span class="cx"> # the 'data' columns are to appease SQLite which cant handle a blank INSERT </span><span class="cx"> foo = Table('foo', metadata, </span><span class="cx"> Column('id', Integer, Sequence('foo_seq'), primary_key=True), </span><span class="lines">@@ -176,13 +163,6 @@ </span><span class="cx"> blub_foo = Table('blub_foo', metadata, </span><span class="cx"> Column('blub_id', Integer, ForeignKey('blub.id')), </span><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id'))) </span><del>- metadata.create_all() - def tearDownAll(self): - metadata.drop_all() - - def tearDown(self): - for table in metadata.table_iterator(): - table.delete().execute() </del><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="cx"> class Foo(object): </span><span class="lines">@@ -253,11 +233,10 @@ </span><span class="cx"> self.echo(x) </span><span class="cx"> self.assert_(repr(x) == compare) </span><span class="cx"> </span><del>-class InheritTest4(testbase.AssertMixin): </del><ins>+class InheritTest4(testbase.ORMTest): </ins><span class="cx"> """deals with inheritance and one-to-many relationships""" </span><del>- def setUpAll(self): - global foo, bar, blub, metadata - metadata = BoundMetaData(testbase.db) </del><ins>+ def define_tables(self, metadata): + global foo, bar, blub </ins><span class="cx"> # the 'data' columns are to appease SQLite which cant handle a blank INSERT </span><span class="cx"> foo = Table('foo', metadata, </span><span class="cx"> Column('id', Integer, Sequence('foo_seq'), primary_key=True), </span><span class="lines">@@ -271,14 +250,7 @@ </span><span class="cx"> Column('id', Integer, ForeignKey('bar.id'), primary_key=True), </span><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id'), nullable=False), </span><span class="cx"> Column('data', String(20))) </span><del>- metadata.create_all() - def tearDownAll(self): - metadata.drop_all() </del><span class="cx"> </span><del>- def tearDown(self): - for table in metadata.table_iterator(): - table.delete().execute() - </del><span class="cx"> def testbasic(self): </span><span class="cx"> class Foo(object): </span><span class="cx"> def __init__(self, data=None): </span><span class="lines">@@ -316,12 +288,11 @@ </span><span class="cx"> self.assert_(compare == result) </span><span class="cx"> self.assert_(l[0].parent_foo.data == 'foo #1' and l[1].parent_foo.data == 'foo #1') </span><span class="cx"> </span><del>-class InheritTest5(testbase.AssertMixin): </del><ins>+class InheritTest5(testbase.ORMTest): </ins><span class="cx"> """testing that construction of inheriting mappers works regardless of when extra properties </span><span class="cx"> are added to the superclass mapper""" </span><del>- def setUpAll(self): - global content_type, content, product, metadata - metadata = BoundMetaData(testbase.db) </del><ins>+ def define_tables(self, metadata): + global content_type, content, product </ins><span class="cx"> content_type = Table('content_type', metadata, </span><span class="cx"> Column('id', Integer, primary_key=True) </span><span class="cx"> ) </span><span class="lines">@@ -332,10 +303,6 @@ </span><span class="cx"> product = Table('product', metadata, </span><span class="cx"> Column('id', Integer, ForeignKey('content.id'), primary_key=True) </span><span class="cx"> ) </span><del>- def tearDownAll(self): - pass - def tearDown(self): - pass </del><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="cx"> class ContentType(object): pass </span><span class="lines">@@ -366,12 +333,11 @@ </span><span class="cx"> p.contenttype = ContentType() </span><span class="cx"> # TODO: assertion ?? </span><span class="cx"> </span><del>-class InheritTest6(testbase.AssertMixin): </del><ins>+class InheritTest6(testbase.ORMTest): </ins><span class="cx"> """tests eager load/lazy load of child items off inheritance mappers, tests that </span><span class="cx"> LazyLoader constructs the right query condition.""" </span><del>- def setUpAll(self): - global foo, bar, bar_foo, metadata - metadata=BoundMetaData(testbase.db) </del><ins>+ def define_tables(self, metadata): + global foo, bar, bar_foo </ins><span class="cx"> foo = Table('foo', metadata, Column('id', Integer, Sequence('foo_seq'), primary_key=True), </span><span class="cx"> Column('data', String(30))) </span><span class="cx"> bar = Table('bar', metadata, Column('id', Integer, ForeignKey('foo.id'), primary_key=True), </span><span class="lines">@@ -381,10 +347,7 @@ </span><span class="cx"> Column('bar_id', Integer, ForeignKey('bar.id')), </span><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id')) </span><span class="cx"> ) </span><del>- metadata.create_all() - def tearDownAll(self): - metadata.drop_all() - </del><ins>+ </ins><span class="cx"> def testbasic(self): </span><span class="cx"> class Foo(object): pass </span><span class="cx"> class Bar(Foo): pass </span><span class="lines">@@ -413,11 +376,10 @@ </span><span class="cx"> self.assert_(len(q.selectfirst().eager) == 1) </span><span class="cx"> </span><span class="cx"> </span><del>-class InheritTest7(testbase.AssertMixin): </del><ins>+class InheritTest7(testbase.ORMTest): </ins><span class="cx"> """test dependency sorting among inheriting mappers""" </span><del>- def setUpAll(self): - global users, roles, user_roles, admins, metadata - metadata=BoundMetaData(testbase.db) </del><ins>+ def define_tables(self, metadata): + global users, roles, user_roles, admins </ins><span class="cx"> users = Table('users', metadata, </span><span class="cx"> Column('id', Integer, primary_key=True), </span><span class="cx"> Column('email', String(128)), </span><span class="lines">@@ -438,12 +400,6 @@ </span><span class="cx"> Column('id', Integer, primary_key=True), </span><span class="cx"> Column('user_id', Integer, ForeignKey('users.id')) </span><span class="cx"> ) </span><del>- metadata.create_all() - def tearDownAll(self): - metadata.drop_all() - def tearDown(self): - for t in metadata.table_iterator(reverse=True): - t.delete().execute() </del><span class="cx"> </span><span class="cx"> def testone(self): </span><span class="cx"> class User(object):pass </span></span></pre></div> <a id="sqlalchemytrunktestorminheritance2py"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/orm/inheritance2.py (2260 => 2261)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/orm/inheritance2.py 2007-01-27 21:30:35 UTC (rev 2260) +++ sqlalchemy/trunk/test/orm/inheritance2.py 2007-01-27 22:31:39 UTC (rev 2261) </span><span class="lines">@@ -2,12 +2,11 @@ </span><span class="cx"> from sqlalchemy import * </span><span class="cx"> from datetime import datetime </span><span class="cx"> </span><del>-class InheritTest(testbase.AssertMixin): </del><ins>+class InheritTest(testbase.ORMTest): </ins><span class="cx"> """tests some various inheritance round trips involving a particular set of polymorphic inheritance relationships""" </span><del>- def setUpAll(self): - global metadata, products_table, specification_table, documents_table </del><ins>+ def define_tables(self, metadata): + global products_table, specification_table, documents_table </ins><span class="cx"> global Product, Detail, Assembly, SpecLine, Document, RasterDocument </span><del>- metadata = BoundMetaData(testbase.db) </del><span class="cx"> </span><span class="cx"> products_table = Table('products', metadata, </span><span class="cx"> Column('product_id', Integer, primary_key=True), </span><span class="lines">@@ -37,8 +36,6 @@ </span><span class="cx"> Column('size', Integer, default=0), </span><span class="cx"> ) </span><span class="cx"> </span><del>- metadata.create_all() - </del><span class="cx"> class Product(object): </span><span class="cx"> def __init__(self, name, mark=''): </span><span class="cx"> self.name = name </span><span class="lines">@@ -77,14 +74,6 @@ </span><span class="cx"> class RasterDocument(Document): </span><span class="cx"> pass </span><span class="cx"> </span><del>- def tearDown(self): - clear_mappers() - for t in metadata.table_iterator(reverse=True): - t.delete().execute() - - def tearDownAll(self): - metadata.drop_all() - </del><span class="cx"> def testone(self): </span><span class="cx"> product_mapper = mapper(Product, products_table, </span><span class="cx"> polymorphic_on=products_table.c.product_type, </span></span></pre></div> <a id="sqlalchemytrunktestorminheritance3py"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/orm/inheritance3.py (2260 => 2261)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/orm/inheritance3.py 2007-01-27 21:30:35 UTC (rev 2260) +++ sqlalchemy/trunk/test/orm/inheritance3.py 2007-01-27 22:31:39 UTC (rev 2261) </span><span class="lines">@@ -64,13 +64,11 @@ </span><span class="cx"> class ClassifiedPage(MagazinePage): </span><span class="cx"> pass </span><span class="cx"> </span><del>-class InheritTest(testbase.AssertMixin): </del><ins>+class InheritTest(testbase.ORMTest): </ins><span class="cx"> """tests a large polymorphic relationship""" </span><del>- def setUpAll(self): - global metadata, publication_table, issue_table, location_table, location_name_table, magazine_table, \ </del><ins>+ def define_tables(self, metadata): + global publication_table, issue_table, location_table, location_name_table, magazine_table, \ </ins><span class="cx"> page_table, magazine_page_table, classified_page_table, page_size_table </span><del>- - metadata = BoundMetaData(testbase.db) </del><span class="cx"> </span><span class="cx"> zerodefault = {} #{'default':0} </span><span class="cx"> publication_table = Table('publication', metadata, </span><span class="lines">@@ -118,8 +116,6 @@ </span><span class="cx"> Column('name', String(45), default=''), </span><span class="cx"> ) </span><span class="cx"> </span><del>- metadata.create_all() - </del><span class="cx"> publication_mapper = mapper(Publication, publication_table) </span><span class="cx"> </span><span class="cx"> issue_mapper = mapper(Issue, issue_table, properties = { </span><span class="lines">@@ -163,14 +159,6 @@ </span><span class="cx"> </span><span class="cx"> classified_page_mapper = mapper(ClassifiedPage, classified_page_table, inherits=magazine_page_mapper, polymorphic_identity='c') </span><span class="cx"> </span><del>- def tearDown(self): - for t in metadata.table_iterator(reverse=True): - t.delete().execute() - - def tearDownAll(self): - metadata.drop_all() - clear_mappers() - </del><span class="cx"> def testone(self): </span><span class="cx"> session = create_session() </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemytrunktestorminheritance4py"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/orm/inheritance4.py (2260 => 2261)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/orm/inheritance4.py 2007-01-27 21:30:35 UTC (rev 2260) +++ sqlalchemy/trunk/test/orm/inheritance4.py 2007-01-27 22:31:39 UTC (rev 2261) </span><span class="lines">@@ -1,10 +1,9 @@ </span><span class="cx"> from sqlalchemy import * </span><span class="cx"> import testbase </span><span class="cx"> </span><del>-class ConcreteTest1(testbase.AssertMixin): - def setUpAll(self): - global managers_table, engineers_table, metadata - metadata = BoundMetaData(testbase.db) </del><ins>+class ConcreteTest1(testbase.ORMTest): + def define_tables(self, metadata): + global managers_table, engineers_table </ins><span class="cx"> managers_table = Table('managers', metadata, </span><span class="cx"> Column('employee_id', Integer, primary_key=True), </span><span class="cx"> Column('name', String(50)), </span><span class="lines">@@ -17,10 +16,6 @@ </span><span class="cx"> Column('engineer_info', String(50)), </span><span class="cx"> ) </span><span class="cx"> </span><del>- metadata.create_all() - def tearDownAll(self): - metadata.drop_all() - </del><span class="cx"> def testbasic(self): </span><span class="cx"> class Employee(object): </span><span class="cx"> def __init__(self, name): </span></span></pre></div> <a id="sqlalchemytrunktestorminheritance5py"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/orm/inheritance5.py (2260 => 2261)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/orm/inheritance5.py 2007-01-27 21:30:35 UTC (rev 2260) +++ sqlalchemy/trunk/test/orm/inheritance5.py 2007-01-27 22:31:39 UTC (rev 2261) </span><span class="lines">@@ -8,11 +8,10 @@ </span><span class="cx"> return self.__class__.__name__ + ' ' + ','.join(["%s=%s" % (k,v) for k, v in self.__dict__.iteritems() if k[0] != '_']) </span><span class="cx"> </span><span class="cx"> </span><del>-class RelationTest1(testbase.PersistTest): </del><ins>+class RelationTest1(testbase.ORMTest): </ins><span class="cx"> """test self-referential relationships on polymorphic mappers""" </span><del>- def setUpAll(self): - global people, managers, metadata - metadata = BoundMetaData(testbase.db) </del><ins>+ def define_tables(self, metadata): + global people, managers </ins><span class="cx"> </span><span class="cx"> people = Table('people', metadata, </span><span class="cx"> Column('person_id', Integer, Sequence('person_id_seq', optional=True), primary_key=True), </span><span class="lines">@@ -26,17 +25,6 @@ </span><span class="cx"> Column('manager_name', String(50)) </span><span class="cx"> ) </span><span class="cx"> </span><del>- metadata.create_all() - - def tearDownAll(self): - metadata.drop_all() - - def tearDown(self): - clear_mappers() - people.update().execute(manager_id=None) - for t in metadata.table_iterator(reverse=True): - t.delete().execute() - </del><span class="cx"> def testbasic(self): </span><span class="cx"> class Person(AttrSettable): </span><span class="cx"> pass </span><span class="lines">@@ -72,12 +60,10 @@ </span><span class="cx"> print p, m, p.manager </span><span class="cx"> assert p.manager is m </span><span class="cx"> </span><del>-class RelationTest2(testbase.AssertMixin): </del><ins>+class RelationTest2(testbase.ORMTest): </ins><span class="cx"> """test self-referential relationships on polymorphic mappers""" </span><del>- def setUpAll(self): - global people, managers, metadata - metadata = BoundMetaData(testbase.db) - </del><ins>+ def define_tables(self, metadata): + global people, managers </ins><span class="cx"> people = Table('people', metadata, </span><span class="cx"> Column('person_id', Integer, Sequence('person_id_seq', optional=True), primary_key=True), </span><span class="cx"> Column('name', String(50)), </span><span class="lines">@@ -89,16 +75,6 @@ </span><span class="cx"> Column('status', String(30)), </span><span class="cx"> ) </span><span class="cx"> </span><del>- metadata.create_all() - - def tearDownAll(self): - metadata.drop_all() - - def tearDown(self): - clear_mappers() - for t in metadata.table_iterator(reverse=True): - t.delete().execute() - </del><span class="cx"> def testrelationonsubclass(self): </span><span class="cx"> class Person(AttrSettable): </span><span class="cx"> pass </span><span class="lines">@@ -130,12 +106,10 @@ </span><span class="cx"> print m </span><span class="cx"> assert m.colleague is p </span><span class="cx"> </span><del>-class RelationTest3(testbase.AssertMixin): </del><ins>+class RelationTest3(testbase.ORMTest): </ins><span class="cx"> """test self-referential relationships on polymorphic mappers""" </span><del>- def setUpAll(self): - global people, managers, metadata - metadata = BoundMetaData(testbase.db) - </del><ins>+ def define_tables(self, metadata): + global people, managers </ins><span class="cx"> people = Table('people', metadata, </span><span class="cx"> Column('person_id', Integer, Sequence('person_id_seq', optional=True), primary_key=True), </span><span class="cx"> Column('colleague_id', Integer, ForeignKey('people.person_id')), </span><span class="lines">@@ -147,16 +121,6 @@ </span><span class="cx"> Column('status', String(30)), </span><span class="cx"> ) </span><span class="cx"> </span><del>- metadata.create_all() - - def tearDownAll(self): - metadata.drop_all() - - def tearDown(self): - clear_mappers() - for t in metadata.table_iterator(reverse=True): - t.delete().execute() - </del><span class="cx"> def testrelationonbaseclass(self): </span><span class="cx"> class Person(AttrSettable): </span><span class="cx"> pass </span><span class="lines">@@ -193,10 +157,9 @@ </span><span class="cx"> assert len(p.colleagues) == 1 </span><span class="cx"> assert p.colleagues == [p2] </span><span class="cx"> </span><del>-class RelationTest4(testbase.AssertMixin): - def setUpAll(self): - global metadata, people, engineers, managers, cars - metadata = BoundMetaData(testbase.db) </del><ins>+class RelationTest4(testbase.ORMTest): + def define_tables(self, metadata): + global people, engineers, managers, cars </ins><span class="cx"> people = Table('people', metadata, </span><span class="cx"> Column('person_id', Integer, primary_key=True), </span><span class="cx"> Column('name', String(50))) </span><span class="lines">@@ -212,13 +175,6 @@ </span><span class="cx"> cars = Table('cars', metadata, </span><span class="cx"> Column('car_id', Integer, primary_key=True), </span><span class="cx"> Column('owner', Integer, ForeignKey('people.person_id'))) </span><del>- metadata.create_all() - def tearDownAll(self): - metadata.drop_all() - def tearDown(self): - clear_mappers() - for t in metadata.table_iterator(reverse=True): - t.delete().execute() </del><span class="cx"> </span><span class="cx"> def testmanytoonepolymorphic(self): </span><span class="cx"> """in this test, the polymorphic union is between two subclasses, but does not include the base table by itself </span><span class="lines">@@ -301,10 +257,9 @@ </span><span class="cx"> car1 = session.query(Car).options(eagerload('employee')).get(car1.car_id) </span><span class="cx"> assert str(car1.employee) == "Engineer E4, status X" </span><span class="cx"> </span><del>-class RelationTest5(testbase.AssertMixin): - def setUpAll(self): - global metadata, people, engineers, managers, cars - metadata = BoundMetaData(testbase.db) </del><ins>+class RelationTest5(testbase.ORMTest): + def define_tables(self, metadata): + global people, engineers, managers, cars </ins><span class="cx"> people = Table('people', metadata, </span><span class="cx"> Column('person_id', Integer, primary_key=True), </span><span class="cx"> Column('name', String(50)), </span><span class="lines">@@ -321,13 +276,6 @@ </span><span class="cx"> cars = Table('cars', metadata, </span><span class="cx"> Column('car_id', Integer, primary_key=True), </span><span class="cx"> Column('owner', Integer, ForeignKey('people.person_id'))) </span><del>- metadata.create_all() - def tearDownAll(self): - metadata.drop_all() - def tearDown(self): - clear_mappers() - for t in metadata.table_iterator(reverse=True): - t.delete().execute() </del><span class="cx"> </span><span class="cx"> def testeagerempty(self): </span><span class="cx"> """an easy one...test parent object with child relation to an inheriting mapper, using eager loads, </span><span class="lines">@@ -368,7 +316,77 @@ </span><span class="cx"> carlist = sess.query(Car).select() </span><span class="cx"> assert carlist[0].manager is None </span><span class="cx"> assert carlist[1].manager.person_id == car2.manager.person_id </span><ins>+ +class MultiLevelTest(testbase.ORMTest): + def define_tables(self, metadata): + global table_Employee, table_Engineer, table_Manager + table_Employee = Table( 'Employee', metadata, + Column( 'name', type= String, ), + Column( 'id', primary_key= True, type= Integer, ), + Column( 'atype', type= String, ), + ) + + table_Engineer = Table( 'Engineer', metadata, + Column( 'machine', type= String, ), + Column( 'id', Integer, ForeignKey( 'Employee.id', ), primary_key= True, ), + ) + + table_Manager = Table( 'Manager', metadata, + Column( 'duties', type= String, ), + Column( 'id', Integer, ForeignKey( 'Engineer.id', ), primary_key= True, ), + ) + def test_threelevels(self): + class Employee( object): + def set( me, **kargs): + for k,v in kargs.iteritems(): setattr( me, k, v) + return me + def __str__(me): return str(me.__class__.__name__)+':'+str(me.name) + __repr__ = __str__ + class Engineer( Employee): pass + class Manager( Engineer): pass + pu_Employee = polymorphic_union( { + 'Manager': table_Employee.join( table_Engineer).join( table_Manager), + 'Engineer': select([table_Employee, table_Engineer.c.machine], table_Employee.c.atype == 'Engineer', from_obj=[table_Employee.join(table_Engineer)]), + 'Employee': table_Employee.select( table_Employee.c.atype == 'Employee'), + }, None, 'pu_employee', ) </ins><span class="cx"> </span><ins>+ mapper_Employee = mapper( Employee, table_Employee, + polymorphic_identity= 'Employee', + polymorphic_on= pu_Employee.c.atype, + select_table= pu_Employee, + ) + + pu_Engineer = polymorphic_union( { + 'Manager': table_Employee.join( table_Engineer).join( table_Manager), + 'Engineer': select([table_Employee, table_Engineer.c.machine], table_Employee.c.atype == 'Engineer', from_obj=[table_Employee.join(table_Engineer)]), + }, None, 'pu_engineer', ) + mapper_Engineer = mapper( Engineer, table_Engineer, + inherit_condition= table_Engineer.c.id == table_Employee.c.id, + inherits= mapper_Employee, + polymorphic_identity= 'Engineer', + polymorphic_on= pu_Engineer.c.atype, + select_table= pu_Engineer, + ) + + mapper_Manager = mapper( Manager, table_Manager, + inherit_condition= table_Manager.c.id == table_Engineer.c.id, + inherits= mapper_Engineer, + polymorphic_identity= 'Manager', + ) + + a = Employee().set( name= 'one') + b = Engineer().set( egn= 'two', machine= 'any') + c = Manager().set( name= 'head', machine= 'fast', duties= 'many') + + session = create_session() + session.save(a) + session.save(b) + session.save(c) + session.flush() + assert set(session.query(Employee).select()) == set([a,b,c]) + assert set(session.query( Engineer).select()) == set([b,c]) + assert session.query( Manager).select() == [c] + </ins><span class="cx"> if __name__ == "__main__": </span><span class="cx"> testbase.main() </span><span class="cx"> </span><span class="cx">\ No newline at end of file </span></span></pre></div> <a id="sqlalchemytrunktestormmanytomanypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/orm/manytomany.py (2260 => 2261)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/orm/manytomany.py 2007-01-27 21:30:35 UTC (rev 2260) +++ sqlalchemy/trunk/test/orm/manytomany.py 2007-01-27 22:31:39 UTC (rev 2261) </span><span class="lines">@@ -25,10 +25,8 @@ </span><span class="cx"> def __repr__(self): </span><span class="cx"> return object.__repr__(self)+ " " + repr(self.inputs) + " " + repr(self.outputs) </span><span class="cx"> </span><del>-class M2MTest(testbase.AssertMixin): - def setUpAll(self): - global metadata - metadata = testbase.metadata </del><ins>+class M2MTest(testbase.ORMTest): + def define_tables(self, metadata): </ins><span class="cx"> global place </span><span class="cx"> place = Table('place', metadata, </span><span class="cx"> Column('place_id', Integer, Sequence('pid_seq', optional=True), primary_key=True), </span><span class="lines">@@ -67,23 +65,7 @@ </span><span class="cx"> Column('pl1_id', Integer, ForeignKey('place.place_id')), </span><span class="cx"> Column('pl2_id', Integer, ForeignKey('place.place_id')), </span><span class="cx"> ) </span><del>- metadata.create_all() </del><span class="cx"> </span><del>- def tearDownAll(self): - metadata.drop_all() - clear_mappers() - #testbase.db.tables.clear() - - def setUp(self): - clear_mappers() - - def tearDown(self): - place_place.delete().execute() - place_input.delete().execute() - place_output.delete().execute() - transition.delete().execute() - place.delete().execute() - </del><span class="cx"> def testcircular(self): </span><span class="cx"> """tests a many-to-many relationship from a table to itself.""" </span><span class="cx"> </span><span class="lines">@@ -194,9 +176,8 @@ </span><span class="cx"> self.assert_result([t1], Transition, {'outputs': (Place, [{'name':'place3'}, {'name':'place1'}])}) </span><span class="cx"> self.assert_result([p2], Place, {'inputs': (Transition, [{'name':'transition1'},{'name':'transition2'}])}) </span><span class="cx"> </span><del>-class M2MTest2(testbase.AssertMixin): - def setUpAll(self): - metadata = testbase.metadata </del><ins>+class M2MTest2(testbase.ORMTest): + def define_tables(self, metadata): </ins><span class="cx"> global studentTbl </span><span class="cx"> studentTbl = Table('student', metadata, Column('name', String(20), primary_key=True)) </span><span class="cx"> global courseTbl </span><span class="lines">@@ -205,20 +186,7 @@ </span><span class="cx"> enrolTbl = Table('enrol', metadata, </span><span class="cx"> Column('student_id', String(20), ForeignKey('student.name'),primary_key=True), </span><span class="cx"> Column('course_id', String(20), ForeignKey('course.name'), primary_key=True)) </span><del>- metadata.create_all() </del><span class="cx"> </span><del>- def tearDownAll(self): - metadata.drop_all() - clear_mappers() - - def setUp(self): - clear_mappers() - - def tearDown(self): - enrolTbl.delete().execute() - courseTbl.delete().execute() - studentTbl.delete().execute() - </del><span class="cx"> def testcircular(self): </span><span class="cx"> class Student(object): </span><span class="cx"> def __init__(self, name=''): </span><span class="lines">@@ -249,9 +217,8 @@ </span><span class="cx"> del s.courses[1] </span><span class="cx"> self.assert_(len(s.courses) == 2) </span><span class="cx"> </span><del>-class M2MTest3(testbase.AssertMixin): - def setUpAll(self): - metadata = testbase.metadata </del><ins>+class M2MTest3(testbase.ORMTest): + def define_tables(self, metadata): </ins><span class="cx"> global c, c2a1, c2a2, b, a </span><span class="cx"> c = Table('c', metadata, </span><span class="cx"> Column('c1', Integer, primary_key = True), </span><span class="lines">@@ -278,16 +245,7 @@ </span><span class="cx"> Column('a1', Integer, ForeignKey('a.a1')), </span><span class="cx"> Column('b2', Boolean) </span><span class="cx"> ) </span><del>- metadata.create_all() </del><span class="cx"> </span><del>- def tearDownAll(self): - b.drop() - c2a2.drop() - c2a1.drop() - a.drop() - c.drop() - clear_mappers() - </del><span class="cx"> def testbasic(self): </span><span class="cx"> class C(object):pass </span><span class="cx"> class A(object):pass </span></span></pre></div> <a id="sqlalchemytrunktesttestbasepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/testbase.py (2260 => 2261)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/testbase.py 2007-01-27 21:30:35 UTC (rev 2260) +++ sqlalchemy/trunk/test/testbase.py 2007-01-27 22:31:39 UTC (rev 2261) </span><span class="lines">@@ -10,8 +10,9 @@ </span><span class="cx"> import re </span><span class="cx"> import sqlalchemy </span><span class="cx"> import optparse </span><ins>+from sqlalchemy.schema import BoundMetaData +from sqlalchemy.orm import clear_mappers </ins><span class="cx"> </span><del>- </del><span class="cx"> db = None </span><span class="cx"> metadata = None </span><span class="cx"> db_uri = None </span><span class="lines">@@ -203,6 +204,24 @@ </span><span class="cx"> finally: </span><span class="cx"> self.assert_(db.sql_count == count, "desired statement count %d does not match %d" % (count, db.sql_count)) </span><span class="cx"> </span><ins>+class ORMTest(AssertMixin): + def setUpAll(self): + global metadata + metadata = BoundMetaData(db) + self.define_tables(metadata) + metadata.create_all() + def define_tables(self, metadata): + raise NotImplementedError() + def get_metadata(self): + return metadata + def tearDownAll(self): + metadata.drop_all() + def tearDown(self): + clear_mappers() + for t in metadata.table_iterator(reverse=True): + t.delete().execute().close() + + </ins><span class="cx"> class EngineAssert(proxy.BaseProxyEngine): </span><span class="cx"> """decorates a SQLEngine object to match the incoming queries against a set of assertions.""" </span><span class="cx"> def __init__(self, engine): </span></span></pre> </div> </div> </body> </html> |