summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-06-22 22:23:57 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-06-22 22:23:57 +0000
commitad7ffd767d26aef8caba3e52b8c3c1114ec6709c (patch)
tree8039bb3553aa64a6710cf37a442338f9e9412605 /test
parent0e0cedaf9dc085f61949fbe93f389f5a1f5b9cf8 (diff)
downloadsqlalchemy-ad7ffd767d26aef8caba3e52b8c3c1114ec6709c.tar.gz
fixes to inheritance firing off dependency processors correctly + unittest
Diffstat (limited to 'test')
-rw-r--r--test/orm/inheritance.py59
1 files changed, 58 insertions, 1 deletions
diff --git a/test/orm/inheritance.py b/test/orm/inheritance.py
index 095763867..842a63a26 100644
--- a/test/orm/inheritance.py
+++ b/test/orm/inheritance.py
@@ -412,6 +412,63 @@ class InheritTest6(testbase.AssertMixin):
q = sess.query(Bar)
self.assert_(len(q.selectfirst().lazy) == 1)
self.assert_(len(q.selectfirst().eager) == 1)
-
+
+
+class InheritTest7(testbase.AssertMixin):
+ """test dependency sorting among inheriting mappers"""
+ def setUpAll(self):
+ global users, roles, user_roles, admins, metadata
+ metadata=BoundMetaData(testbase.db)
+ users = Table('user', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('email', String(128)),
+ Column('password', String(16)),
+ )
+
+ roles = Table('role', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('description', String(32))
+ )
+
+ user_roles = Table('user_role', metadata,
+ Column('user_id', Integer, ForeignKey('user.id'), primary_key=True),
+ Column('role_id', Integer, ForeignKey('role.id'), primary_key=True)
+ )
+
+ admins = Table('admin', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('user_id', Integer, ForeignKey('user.id'))
+ )
+ metadata.create_all()
+ def tearDownAll(self):
+ metadata.drop_all()
+
+ def testbasic(self):
+ class User(object):pass
+ class Role(object):pass
+ class Admin(User):pass
+ role_mapper = mapper(Role, roles)
+ user_mapper = mapper(User, users, properties = {
+ 'roles' : relation(Role, secondary=user_roles, lazy=False, private=False)
+ }
+ )
+ admin_mapper = mapper(Admin, admins, inherits=user_mapper)
+ sess = create_session()
+ adminrole = Role('admin')
+ sess.save(adminrole)
+ sess.flush()
+
+ # create an Admin, and append a Role. the dependency processors
+ # corresponding to the "roles" attribute for the Admin mapper and the User mapper
+ # have to insure that two dependency processors dont fire off and insert the
+ # many to many row twice.
+ a = Admin()
+ a.roles.append(adminrole)
+ a.password = 'admin'
+ sess.save(a)
+ sess.flush()
+
+ assert user_roles.count().scalar() == 1
+
if __name__ == "__main__":
testbase.main()