diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-07-24 12:37:48 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-07-24 12:37:48 -0400 |
| commit | 0cc357c6caf8f5d4e33e3dedd799beeca0304518 (patch) | |
| tree | 646688445ff77f13f4b45af3a4b6460a4f3de794 /test/orm/test_cascade.py | |
| parent | 5abc41127890e92facab2dc202f365a374d2394b (diff) | |
| download | sqlalchemy-0cc357c6caf8f5d4e33e3dedd799beeca0304518.tar.gz | |
- Fixed regression from 0.6 where Session.add()
against an object which contained None in a
collection would raise an internal exception.
Reverted this to 0.6's behavior which is to
accept the None but obviously nothing is
persisted. Ideally, collections with None
present or on append() should at least emit a
warning, which is being considered for 0.8.
[ticket:2205]
Diffstat (limited to 'test/orm/test_cascade.py')
| -rw-r--r-- | test/orm/test_cascade.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/orm/test_cascade.py b/test/orm/test_cascade.py index 8c741f0a3..0ff30f906 100644 --- a/test/orm/test_cascade.py +++ b/test/orm/test_cascade.py @@ -307,6 +307,64 @@ class O2MCascadeDeleteOrphanTest(fixtures.MappedTest): assert users.count().scalar() == 1 assert orders.count().scalar() == 0 +class O2MCascadeTest(fixtures.MappedTest): + run_inserts = None + + @classmethod + def define_tables(cls, metadata): + Table('users', metadata, + Column('id', Integer, primary_key=True, test_needs_autoincrement=True), + Column('name', String(30), nullable=False), + ) + Table('addresses', metadata, + Column('id', Integer, primary_key=True, test_needs_autoincrement=True), + Column('user_id', Integer, ForeignKey('users.id')), + Column('email_address', String(50), nullable=False), + ) + + @classmethod + def setup_classes(cls): + class User(cls.Comparable): + pass + class Address(cls.Comparable): + pass + + @classmethod + def setup_mappers(cls): + users, User, Address, addresses = ( + cls.tables.users, cls.classes.User, + cls.classes.Address, cls.tables.addresses) + + mapper(Address, addresses) + mapper(User, users, properties={ + 'addresses':relationship(Address, backref="user"), + + }) + + def test_none_skipped_assignment(self): + # [ticket:2229] proposes warning/raising on None + # for 0.8 + User, Address = self.classes.User, self.classes.Address + s = Session() + u1 = User(addresses=[None]) + s.add(u1) + eq_(u1.addresses, [None]) + s.commit() + eq_(u1.addresses, []) + + def test_none_skipped_append(self): + # [ticket:2229] proposes warning/raising on None + # for 0.8 + User, Address = self.classes.User, self.classes.Address + s = Session() + + u1 = User() + s.add(u1) + u1.addresses.append(None) + eq_(u1.addresses, [None]) + s.commit() + eq_(u1.addresses, []) + class O2MCascadeDeleteNoOrphanTest(fixtures.MappedTest): run_inserts = None |
