diff options
Diffstat (limited to 'test/orm/naturalpks.py')
| -rw-r--r-- | test/orm/naturalpks.py | 126 |
1 files changed, 62 insertions, 64 deletions
diff --git a/test/orm/naturalpks.py b/test/orm/naturalpks.py index 2a8bead05..ec7d2fca9 100644 --- a/test/orm/naturalpks.py +++ b/test/orm/naturalpks.py @@ -1,4 +1,4 @@ -import testbase +import testenv; testenv.configure_for_tests() from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy import exceptions @@ -11,43 +11,43 @@ from testlib import * class NaturalPKTest(ORMTest): def define_tables(self, metadata): global users, addresses, items, users_to_items - + users = Table('users', metadata, Column('username', String(50), primary_key=True), Column('fullname', String(100))) - + addresses = Table('addresses', metadata, Column('email', String(50), primary_key=True), Column('username', String(50), ForeignKey('users.username', onupdate="cascade"))) - + items = Table('items', metadata, Column('itemname', String(50), primary_key=True), Column('description', String(100))) - + users_to_items = Table('userstoitems', metadata, Column('username', String(50), ForeignKey('users.username', onupdate='cascade'), primary_key=True), Column('itemname', String(50), ForeignKey('items.itemname', onupdate='cascade'), primary_key=True), ) - + def test_entity(self): mapper(User, users) - + sess = create_session() u1 = User(username='jack', fullname='jack') - + sess.save(u1) sess.flush() assert sess.get(User, 'jack') is u1 - + u1.username = 'ed' sess.flush() - + def go(): assert sess.get(User, 'ed') is u1 - self.assert_sql_count(testbase.db, go, 0) + self.assert_sql_count(testing.db, go, 0) assert sess.get(User, 'jack') is None - + sess.clear() u1 = sess.query(User).get('ed') self.assertEquals(User(username='ed', fullname='jack'), u1) @@ -63,7 +63,7 @@ class NaturalPKTest(ORMTest): assert sess.get(User, 'jack') is u1 users.update(values={u1.c.username:'jack'}).execute(username='ed') - + try: # expire/refresh works off of primary key. the PK is gone # in this case so theres no way to look it up. criterion- @@ -77,47 +77,47 @@ class NaturalPKTest(ORMTest): sess.clear() assert sess.get(User, 'jack') is None assert sess.get(User, 'ed').fullname == 'jack' - + @testing.unsupported('sqlite','mysql') def test_onetomany_passive(self): self._test_onetomany(True) - + def test_onetomany_nonpassive(self): self._test_onetomany(False) - + def _test_onetomany(self, passive_updates): mapper(User, users, properties={ 'addresses':relation(Address, passive_updates=passive_updates) }) mapper(Address, addresses) - + sess = create_session() u1 = User(username='jack', fullname='jack') u1.addresses.append(Address(email='jack1')) u1.addresses.append(Address(email='jack2')) sess.save(u1) sess.flush() - + assert sess.get(Address, 'jack1') is u1.addresses[0] - + u1.username = 'ed' sess.flush() assert u1.addresses[0].username == 'ed' - + sess.clear() self.assertEquals([Address(username='ed'), Address(username='ed')], sess.query(Address).all()) - + u1 = sess.get(User, 'ed') u1.username = 'jack' def go(): sess.flush() if not passive_updates: - self.assert_sql_count(testbase.db, go, 4) # test passive_updates=False; load addresses, update user, update 2 addresses + self.assert_sql_count(testing.db, go, 4) # test passive_updates=False; load addresses, update user, update 2 addresses else: - self.assert_sql_count(testbase.db, go, 1) # test passive_updates=True; update user + self.assert_sql_count(testing.db, go, 1) # test passive_updates=True; update user sess.clear() assert User(username='jack', addresses=[Address(username='jack'), Address(username='jack')]) == sess.get(User, 'jack') - + u1 = sess.get(User, 'jack') u1.addresses = [] u1.username = 'fred' @@ -133,39 +133,39 @@ class NaturalPKTest(ORMTest): def test_manytoone_nonpassive(self): self._test_manytoone(False) - + def _test_manytoone(self, passive_updates): mapper(User, users) mapper(Address, addresses, properties={ 'user':relation(User, passive_updates=passive_updates) }) - + sess = create_session() a1 = Address(email='jack1') a2 = Address(email='jack2') - + u1 = User(username='jack', fullname='jack') a1.user = u1 a2.user = u1 sess.save(a1) sess.save(a2) sess.flush() - + u1.username = 'ed' - + print id(a1), id(a2), id(u1) print u1._state.parents def go(): sess.flush() if passive_updates: - self.assert_sql_count(testbase.db, go, 1) + self.assert_sql_count(testing.db, go, 1) else: - self.assert_sql_count(testbase.db, go, 3) - + self.assert_sql_count(testing.db, go, 3) + def go(): sess.flush() - self.assert_sql_count(testbase.db, go, 0) - + self.assert_sql_count(testing.db, go, 0) + assert a1.username == a2.username == 'ed' sess.clear() self.assertEquals([Address(username='ed'), Address(username='ed')], sess.query(Address).all()) @@ -200,9 +200,9 @@ class NaturalPKTest(ORMTest): def go(): sess.flush() if passive_updates: - self.assert_sql_count(testbase.db, go, 1) + self.assert_sql_count(testing.db, go, 1) else: - self.assert_sql_count(testbase.db, go, 3) + self.assert_sql_count(testing.db, go, 3) self.assertEquals([Address(username='ed'), Address(username='ed')], [ad1, ad2]) sess.clear() self.assertEquals([Address(username='ed'), Address(username='ed')], sess.query(Address).all()) @@ -215,32 +215,32 @@ class NaturalPKTest(ORMTest): sess.flush() # check that the passive_updates is on on the other side if passive_updates: - self.assert_sql_count(testbase.db, go, 1) + self.assert_sql_count(testing.db, go, 1) else: - self.assert_sql_count(testbase.db, go, 3) + self.assert_sql_count(testing.db, go, 3) sess.clear() self.assertEquals([Address(username='fred'), Address(username='fred')], sess.query(Address).all()) - - + + @testing.unsupported('sqlite', 'mysql') def test_manytomany_passive(self): self._test_manytomany(True) - + def test_manytomany_nonpassive(self): self._test_manytomany(False) - + def _test_manytomany(self, passive_updates): mapper(User, users, properties={ 'items':relation(Item, secondary=users_to_items, backref='users', passive_updates=passive_updates) }) mapper(Item, items) - + sess = create_session() u1 = User(username='jack') u2 = User(username='fred') i1 = Item(itemname='item1') i2 = Item(itemname='item2') - + u1.items.append(i1) u1.items.append(i2) i2.users.append(u2) @@ -254,39 +254,39 @@ class NaturalPKTest(ORMTest): self.assertEquals(['jack'], [u.username for u in r[0].users]) self.assertEquals(Item(itemname='item2'), r[1]) self.assertEquals(['jack', 'fred'], [u.username for u in r[1].users]) - + u2.username='ed' def go(): sess.flush() go() def go(): sess.flush() - self.assert_sql_count(testbase.db, go, 0) - + self.assert_sql_count(testing.db, go, 0) + sess.clear() r = sess.query(Item).all() self.assertEquals(Item(itemname='item1'), r[0]) self.assertEquals(['jack'], [u.username for u in r[0].users]) self.assertEquals(Item(itemname='item2'), r[1]) self.assertEquals(['ed', 'jack'], sorted([u.username for u in r[1].users])) - + class SelfRefTest(ORMTest): def define_tables(self, metadata): global nodes, Node - + nodes = Table('nodes', metadata, Column('name', String(50), primary_key=True), Column('parent', String(50), ForeignKey('nodes.name', onupdate='cascade')) ) - + class Node(Base): pass - + def test_onetomany(self): mapper(Node, nodes, properties={ 'children':relation(Node, backref=backref('parentnode', remote_side=nodes.c.name, passive_updates=False), passive_updates=False) }) - + sess = create_session() n1 = Node(name='n1') n1.children.append(Node(name='n11')) @@ -294,13 +294,13 @@ class SelfRefTest(ORMTest): n1.children.append(Node(name='n13')) sess.save(n1) sess.flush() - + n1.name = 'new n1' sess.flush() self.assertEquals(n1.children[1].parent, 'new n1') self.assertEquals(['new n1', 'new n1', 'new n1'], [n.parent for n in sess.query(Node).filter(Node.name.in_(['n11', 'n12', 'n13']))]) - - + + class NonPKCascadeTest(ORMTest): def define_tables(self, metadata): global users, addresses @@ -335,9 +335,9 @@ class NonPKCascadeTest(ORMTest): sess.save(u1) sess.flush() a1 = u1.addresses[0] - + self.assertEquals(select([addresses.c.username]).execute().fetchall(), [('jack',), ('jack',)]) - + assert sess.get(Address, a1.id) is u1.addresses[0] u1.username = 'ed' @@ -353,13 +353,13 @@ class NonPKCascadeTest(ORMTest): def go(): sess.flush() if not passive_updates: - self.assert_sql_count(testbase.db, go, 4) # test passive_updates=False; load addresses, update user, update 2 addresses + self.assert_sql_count(testing.db, go, 4) # test passive_updates=False; load addresses, update user, update 2 addresses else: - self.assert_sql_count(testbase.db, go, 1) # test passive_updates=True; update user + self.assert_sql_count(testing.db, go, 1) # test passive_updates=True; update user sess.clear() assert User(username='jack', addresses=[Address(username='jack'), Address(username='jack')]) == sess.get(User, u1.id) sess.clear() - + u1 = sess.get(User, u1.id) u1.addresses = [] u1.username = 'fred' @@ -373,8 +373,6 @@ class NonPKCascadeTest(ORMTest): u1 = sess.get(User, u1.id) self.assertEquals(User(username='fred', fullname='jack'), u1) - + if __name__ == '__main__': - testbase.main() - - + testenv.main() |
