diff options
Diffstat (limited to 'test/ext/test_declarative.py')
-rw-r--r-- | test/ext/test_declarative.py | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/test/ext/test_declarative.py b/test/ext/test_declarative.py index 9d75333c8..32eae69a9 100644 --- a/test/ext/test_declarative.py +++ b/test/ext/test_declarative.py @@ -10,7 +10,8 @@ from sqlalchemy import MetaData, Integer, String, ForeignKey, \ from test.lib.schema import Table, Column from sqlalchemy.orm import relationship, create_session, class_mapper, \ joinedload, configure_mappers, backref, clear_mappers, \ - polymorphic_union, deferred, column_property + polymorphic_union, deferred, column_property, composite,\ + Session from test.lib.testing import eq_ from sqlalchemy.util import classproperty from test.orm._base import ComparableEntity, MappedTest @@ -895,6 +896,66 @@ class DeclarativeTest(DeclarativeTestBase): self.assert_sql_count(testing.db, go, 1) + def test_composite_inline(self): + class AddressComposite(ComparableEntity): + def __init__(self, street, state): + self.street = street + self.state = state + def __composite_values__(self): + return [self.street, self.state] + + class User(Base, ComparableEntity): + __tablename__ = 'user' + id = Column(Integer, primary_key=True, + test_needs_autoincrement=True) + address = composite(AddressComposite, + Column('street', String(50)), + Column('state', String(2)), + ) + + Base.metadata.create_all() + sess = Session() + sess.add(User( + address=AddressComposite('123 anywhere street', + 'MD') + )) + sess.commit() + eq_( + sess.query(User).all(), + [User(address=AddressComposite('123 anywhere street', + 'MD'))] + ) + + def test_composite_separate(self): + class AddressComposite(ComparableEntity): + def __init__(self, street, state): + self.street = street + self.state = state + def __composite_values__(self): + return [self.street, self.state] + + class User(Base, ComparableEntity): + __tablename__ = 'user' + id = Column(Integer, primary_key=True, + test_needs_autoincrement=True) + street = Column(String(50)) + state = Column(String(2)) + address = composite(AddressComposite, + street, state) + + Base.metadata.create_all() + sess = Session() + sess.add(User( + address=AddressComposite('123 anywhere street', + 'MD') + )) + sess.commit() + eq_( + sess.query(User).all(), + [User(address=AddressComposite('123 anywhere street', + 'MD'))] + ) + def test_mapping_to_join(self): users = Table('users', Base.metadata, Column('id', Integer, primary_key=True) |