]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
small tweak to HistoryList to properly report "delete" success, new unit test added...
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 15 Dec 2005 05:09:44 +0000 (05:09 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 15 Dec 2005 05:09:44 +0000 (05:09 +0000)
lib/sqlalchemy/util.py
test/manytomany.py

index bc23d6080ae9d1ac159776aec5fcb5d75990e1e8..b8228986d9a87fb0680f1a9f95fdadccfc57f13c 100644 (file)
@@ -213,9 +213,11 @@ class HistoryArraySet(UserList.UserList):
             val = self.records[item]
             if val is None:
                 self.records[item] = False
+                return True
             elif val is True:
                 del self.records[item]
-            return True    
+                return True
+            return False
         except KeyError:
             return False
     def commit(self):
index f4498dd8f46500b0d95cc5bfc6491f8fae6eabc2..43e6999592d81fe2ea1cf4dfca4909850463035c 100644 (file)
@@ -17,7 +17,7 @@ class Transition(object):
     def __repr__(self):
         return object.__repr__(self)+ " " + repr(self.inputs) + " " + repr(self.outputs)
         
-class ManyToManyTest(testbase.AssertMixin):
+class M2MTest(testbase.AssertMixin):
     def setUpAll(self):
         db = testbase.db
         global place
@@ -129,7 +129,67 @@ class ManyToManyTest(testbase.AssertMixin):
         
         self.assert_result([t1], Transition, {'outputs': (Place, [{'name':'place3'}, {'name':'place1'}])})
         self.assert_result([p2], Place, {'inputs': (Transition, [{'name':'transition1'},{'name':'transition2'}])})
+
+class M2MTest2(testbase.AssertMixin):        
+    def setUpAll(self):
+        db = testbase.db
+        global studentTbl
+        studentTbl = Table('student', db, Column('name', String, primary_key=True))
+        global courseTbl
+        courseTbl = Table('course', db, Column('name', String, primary_key=True))
+        global enrolTbl
+        enrolTbl = Table('enrol', db,
+            Column('student_id', String, ForeignKey('student.name'),primary_key=True),
+            Column('course_id', String, ForeignKey('course.name'), primary_key=True))
+
+        studentTbl.create()
+        courseTbl.create()
+        enrolTbl.create()
+
+    def tearDownAll(self):
+        enrolTbl.drop()
+        studentTbl.drop()
+        courseTbl.drop()
+
+    def setUp(self):
+        objectstore.clear()
+        clear_mappers()
+
+    def tearDown(self):
+        courseTbl.delete().execute()
+        studentTbl.delete().execute()
+        enrolTbl.delete().execute()
+
+    def testcircular(self): 
+        class Student(object):
+            def __init__(self, name=''):
+                self.name = name
+        class Course(object):
+            def __init__(self, name=''):
+                self.name = name
+        Student.mapper = mapper(Student, studentTbl)
+        Course.mapper = mapper(Course, courseTbl, properties = {
+            'students': relation(Student.mapper, enrolTbl, lazy=True, backref='courses')
+        })
+        s1 = Student('Student1')
+        c1 = Course('Course1')
+        c2 = Course('Course2')
+        c3 = Course('Course3')
+        s1.courses.append(c1)
+        s1.courses.append(c2)
+        c1.students.append(s1)
+        c3.students.append(s1)
+        self.assert_(len(s1.courses) == 3)
+        self.assert_(len(c1.students) == 1)
+        objectstore.commit()
+        objectstore.clear()
+        s = Student.mapper.get_by(name='Student1')
+        c = Course.mapper.get_by(name='Course3')
+        self.assert_(len(s.courses) == 3)
+        del s.courses[1]
+        self.assert_(len(s.courses) == 2)
         
+    
 
 if __name__ == "__main__":    
     testbase.main()