]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
backport just the test from 0.8 for [ticket:2710]. 0.7 doesn't
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 21 Apr 2013 15:47:08 +0000 (11:47 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 21 Apr 2013 15:47:08 +0000 (11:47 -0400)
have this issue as it is a regression from [ticket:2229].

test/orm/test_manytomany.py

index edddc265e96ef9707ff9ff20603c6cfeb7ddb4d3..6e1f68837f2d90252df72b452b78a0f5c92cac91 100644 (file)
@@ -316,8 +316,10 @@ class AssortedPersistenceTests(fixtures.MappedTest):
             )
 
         Table('secondary', metadata,
-            Column('left_id', Integer, ForeignKey('left.id')),
-            Column('right_id', Integer, ForeignKey('right.id')),
+            Column('left_id', Integer, ForeignKey('left.id'),
+                                        primary_key=True),
+            Column('right_id', Integer, ForeignKey('right.id'),
+                                        primary_key=True),
             )
 
     @classmethod
@@ -337,6 +339,17 @@ class AssortedPersistenceTests(fixtures.MappedTest):
         })
         mapper(B, right)
 
+    def _bidirectional_onescalar_fixture(self):
+        left, secondary, right = self.tables.left, \
+                    self.tables.secondary, self.tables.right
+        A, B = self.classes.A, self.classes.B
+        mapper(A, left, properties={
+            'bs': relationship(B, secondary=secondary,
+                            backref=backref('a', uselist=False),
+                            order_by=right.c.id)
+        })
+        mapper(B, right)
+
     def test_session_delete(self):
         self._standard_bidirectional_fixture()
         A, B = self.classes.A, self.classes.B
@@ -359,3 +372,25 @@ class AssortedPersistenceTests(fixtures.MappedTest):
         sess.flush()
         eq_(sess.query(secondary).count(), 0)
 
+    def test_remove_scalar(self):
+        # test setting a uselist=False to None
+        self._bidirectional_onescalar_fixture()
+        A, B = self.classes.A, self.classes.B
+        secondary = self.tables.secondary
+
+        sess = Session()
+        sess.add_all([
+            A(data='a1', bs=[B(data='b1'), B(data='b2')]),
+        ])
+        sess.commit()
+
+        a1 = sess.query(A).filter_by(data='a1').one()
+        b2 = sess.query(B).filter_by(data='b2').one()
+        assert b2.a is a1
+
+        b2.a = None
+        sess.commit()
+
+        eq_(a1.bs, [B(data='b1')])
+        eq_(b2.a, None)
+        eq_(sess.query(secondary).count(), 1)