From 5c7993080a93dc142057a4ac05501bcb3291731d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 9 Jul 2006 19:48:02 +0000 Subject: some refactorings to activemapper, made relationship() class have some polymorphic behavior for initializing its real relation, added support + unittest for self-referential relationship --- test/ext/activemapper.py | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/test/ext/activemapper.py b/test/ext/activemapper.py index 1bb93dd63..2a44f8e5b 100644 --- a/test/ext/activemapper.py +++ b/test/ext/activemapper.py @@ -1,6 +1,6 @@ import testbase from sqlalchemy.ext.activemapper import ActiveMapper, column, one_to_many, one_to_one, objectstore -from sqlalchemy import and_, or_, clear_mappers +from sqlalchemy import and_, or_, clear_mappers, backref from sqlalchemy import ForeignKey, String, Integer, DateTime from datetime import datetime @@ -218,6 +218,38 @@ class testcase(testbase.PersistTest): ) self.assertEquals(len(results), 1) - +class testselfreferential(testbase.PersistTest): + def setUpAll(self): + global TreeNode + class TreeNode(activemapper.ActiveMapper): + class mapping: + id = column(Integer, primary_key=True) + name = column(String(30)) + parent_id = column(Integer, foreign_key=ForeignKey('treenode.id')) + children = one_to_many('TreeNode', colname='id', backref='parent') + + activemapper.metadata.connect(testbase.db) + activemapper.create_tables() + def tearDownAll(self): + clear_mappers() + activemapper.drop_tables() + + def testbasic(self): + t = TreeNode(name='node1') + t.children.append(TreeNode(name='node2')) + t.children.append(TreeNode(name='node3')) + objectstore.flush() + objectstore.clear() + + t = TreeNode.get_by(name='node1') + assert (t.name == 'node1') + assert (t.children[0].name == 'node2') + assert (t.children[1].name == 'node3') + assert (t.children[1].parent is t) + + objectstore.clear() + t = TreeNode.get_by(name='node3') + assert (t.parent is TreeNode.get_by(name='node1')) + if __name__ == '__main__': - unittest.main() + testbase.main() -- cgit v1.2.1