diff options
Diffstat (limited to 'test/orm/mapper.py')
-rw-r--r-- | test/orm/mapper.py | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/test/orm/mapper.py b/test/orm/mapper.py index f3d94c10f..88b474e24 100644 --- a/test/orm/mapper.py +++ b/test/orm/mapper.py @@ -304,9 +304,12 @@ class MapperTest(MapperSuperTest): """test the with_parent()) method and one-to-many relationships""" m = mapper(User, users, properties={ + 'user_name_syn':synonym('user_name'), 'orders':relation(mapper(Order, orders, properties={ - 'items':relation(mapper(Item, orderitems)) - })) + 'items':relation(mapper(Item, orderitems)), + 'items_syn':synonym('items') + })), + 'orders_syn':synonym('orders') }) sess = create_session() @@ -334,6 +337,21 @@ class MapperTest(MapperSuperTest): assert False except exceptions.InvalidRequestError, e: assert str(e) == "Could not locate a property which relates instances of class 'Item' to instances of class 'User'" + + + for nameprop, orderprop in ( + ('user_name', 'orders'), + ('user_name_syn', 'orders'), + ('user_name', 'orders_syn'), + ('user_name_syn', 'orders_syn'), + ): + sess = create_session() + q = sess.query(User) + + u1 = q.filter_by(**{nameprop:'jack'}).one() + + o = sess.query(Order).with_parent(u1, property=orderprop).list() + self.assert_result(o, Order, *user_all_result[0]['orders'][1]) def testwithparentm2m(self): """test the with_parent() method and many-to-many relationships""" @@ -347,21 +365,36 @@ class MapperTest(MapperSuperTest): self.assert_result(k, Keyword, *item_keyword_result[1]['keywords'][1]) - def testautojoin(self): + def test_join(self): """test functions derived from Query's _join_to function.""" m = mapper(User, users, properties={ 'orders':relation(mapper(Order, orders, properties={ - 'items':relation(mapper(Item, orderitems)) - })) + 'items':relation(mapper(Item, orderitems)), + 'items_syn':synonym('items') + })), + + 'orders_syn':synonym('orders'), }) sess = create_session() q = sess.query(m) - l = q.filter(orderitems.c.item_name=='item 4').join(['orders', 'items']).list() - self.assert_result(l, User, user_result[0]) - + for j in ( + ['orders', 'items'], + ['orders', 'items_syn'], + ['orders_syn', 'items'], + ['orders_syn', 'items_syn'], + ): + for q in ( + q.filter(orderitems.c.item_name=='item 4').join(j), + q.filter(orderitems.c.item_name=='item 4').join(j[-1]), + q.filter(orderitems.c.item_name=='item 4').filter(q.join_via(j)), + q.filter(orderitems.c.item_name=='item 4').filter(q.join_to(j[-1])), + ): + l = q.all() + self.assert_result(l, User, user_result[0]) + l = q.select_by(item_name='item 4') self.assert_result(l, User, user_result[0]) @@ -1269,9 +1302,6 @@ class EagerTest(MapperSuperTest): l = q.select(q.join_to('orders'), order_by=desc(orders.c.user_id), limit=2, offset=1) self.assert_result(l, User, *(user_all_result[2], user_all_result[0])) - l = q.select(q.join_to('addresses'), order_by=desc(addresses.c.email_address), limit=1, offset=0) - self.assert_result(l, User, *(user_all_result[0],)) - def testonetoone(self): m = mapper(User, users, properties = dict( address = relation(mapper(Address, addresses), lazy = False, uselist = False) |