[limb-svn] r7027 - in 3.x/trunk/limb/active_record: src tests/cases

svn at limb-project.com svn at limb-project.com
Sun May 18 14:40:18 MSD 2008


Author: svk
Date: 2008-05-18 14:40:17 +0400 (Sun, 18 May 2008)
New Revision: 7027
URL: http://fisheye.limb-project.com/changelog/limb/?cs=7027

Modified:
   3.x/trunk/limb/active_record/src/lmbAROneToManyCollection.class.php
   3.x/trunk/limb/active_record/tests/cases/lmbARManyToManyCollectionTest.class.php
   3.x/trunk/limb/active_record/tests/cases/lmbAROneToManyRelationsTest.class.php
   3.x/trunk/limb/active_record/tests/cases/lmbARTestingObjectMother.class.php
Log:
-- one2many relation setter fixed

Modified: 3.x/trunk/limb/active_record/src/lmbAROneToManyCollection.class.php
===================================================================
--- 3.x/trunk/limb/active_record/src/lmbAROneToManyCollection.class.php	2008-05-17 17:45:21 UTC (rev 7026)
+++ 3.x/trunk/limb/active_record/src/lmbAROneToManyCollection.class.php	2008-05-18 10:40:17 UTC (rev 7027)
@@ -59,7 +59,15 @@
     }
 
     foreach($old_objects as $obj)
-      $obj->destroy();
+    {
+      if (array_key_exists('nullify', $this->relation_info) && $this->relation_info['nullify'])
+      {
+        $obj->set($this->relation_info['field'], null);
+        $obj->save();
+      }
+      else
+        $obj->destroy();
+    }
   }
 
   protected function _removeRelatedRecords()

Modified: 3.x/trunk/limb/active_record/tests/cases/lmbARManyToManyCollectionTest.class.php
===================================================================
--- 3.x/trunk/limb/active_record/tests/cases/lmbARManyToManyCollectionTest.class.php	2008-05-17 17:45:21 UTC (rev 7026)
+++ 3.x/trunk/limb/active_record/tests/cases/lmbARManyToManyCollectionTest.class.php	2008-05-18 10:40:17 UTC (rev 7027)
@@ -82,6 +82,7 @@
 
     $this->assertEqual(sizeof($arr), 0);
   }
+  
 
   function testSaveWithExistingOwnerDoesNothing()
   {

Modified: 3.x/trunk/limb/active_record/tests/cases/lmbAROneToManyRelationsTest.class.php
===================================================================
--- 3.x/trunk/limb/active_record/tests/cases/lmbAROneToManyRelationsTest.class.php	2008-05-17 17:45:21 UTC (rev 7026)
+++ 3.x/trunk/limb/active_record/tests/cases/lmbAROneToManyRelationsTest.class.php	2008-05-18 10:40:17 UTC (rev 7027)
@@ -439,43 +439,62 @@
   
   function testSaveWithLessReferenceCount()
   {
-      $course1 = $this->creator->createCourse();
-      $lecture1 = $this->creator->createLecture($course1);
-      $lecture2 = $this->creator->createLecture($course1);
-      $lecture3 = $this->creator->createLecture($course1);
-      $course1->save();
-      $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 3);
-      $course_arr = $course1->export();
-      $lect_arr = $course1->getLectures()->getIds();
-      array_pop($lect_arr);
-      $course_arr['lectures'] = $lect_arr;
-      $course1->import($course_arr);
-      $course1->save();
-      $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 3);
+    $course = new NullifyCourse();
+    $course->setTitle("Title");
+    $lecture1 = new CanBeNullLecture();
+    $lecture1->setTitle("Lecture 1");
+    $lecture2 = new CanBeNullLecture();
+    $lecture2->setTitle("Lecture 2");
+    $lecture3 = new CanBeNullLecture();
+    $lecture3->setTitle("Lecture 3");
+    $course->setLectures(array($lecture1, $lecture2, $lecture3));
+    $course->save();
+    $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 3);
+    
+    $course_arr = $course->export();
+    $lect_arr = $course->getLectures()->getIds();
+    array_pop($lect_arr);
+    $course_arr['lectures'] = $lect_arr;
+    $course->import($course_arr);
+    $course->save();
+    $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 3);
   }
   
   function testSwapRelations()
   {
-      $course1 = $this->creator->createCourse();
-      $lectA = $this->creator->createLecture($course1);
-      $lectB = $this->creator->createLecture($course1);
-      $course2 = $this->creator->createCourse();
-      $lectC = $this->creator->createLecture($course2);
-      $lectD = $this->creator->createLecture($course2);
+      
+    $course1 = new NullifyCourse();
+    $lectA = new CanBeNullLecture();
+    $lectA->setTitle("Lecture A");
+    $lectB = new CanBeNullLecture();
+    $lectB->setTitle("Lecture B");
+    $course1->setLectures(array($lectA, $lectB));
+    $course1->setTitle("Course 1");
+    $course2 = new NullifyCourse();
+    $lectC = new CanBeNullLecture();
+    $lectC->setTitle("Lecture C");
+    $lectD = new CanBeNullLecture();
+    $lectD->setTitle("Lecture D");
+    $course2->setLectures(array($lectC, $lectD));
+    $course2->setTitle("Course 2");
+    
+    $course1->save();
+    $course2->save();
+    $c1 = $course1->export();
+    $c2 = $course2->export();
+    $c1['lectures'] = $course2->getLectures()->getIds();
+    $c2['lectures'] = $course1->getLectures()->getIds();
+    
+    try 
+    {
+      $course1->import($c1);
       $course1->save();
-      $course2->save();
-      $c1 = $course1->export();
-      $c2 = $course2->export();
-      $c1['lectures'] = $course2->getLectures()->getIds();
-      $c2['lectures'] = $course1->getLectures()->getIds();
-      try {
-        $course1->import($c1);
-        $course2->import($c2);
-        $c1 = $course1->save();
-        $c2 = $course2->save();
-      }
-      catch (lmbARException $e){ }
-      $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 4);
+      $course2 = new NullifyCourse($course2->getId());
+      $course2->import($c2);
+      $c2 = $course2->save();
+    }
+    catch (lmbARException $e){ }
+    $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 4);
   }
 
   function _initCourse()

Modified: 3.x/trunk/limb/active_record/tests/cases/lmbARTestingObjectMother.class.php
===================================================================
--- 3.x/trunk/limb/active_record/tests/cases/lmbARTestingObjectMother.class.php	2008-05-17 17:45:21 UTC (rev 7026)
+++ 3.x/trunk/limb/active_record/tests/cases/lmbARTestingObjectMother.class.php	2008-05-18 10:40:17 UTC (rev 7027)
@@ -64,6 +64,25 @@
   }
 }
 
+class NullifyCourse extends lmbActiveRecord
+{
+  protected $_db_table_name = 'course_for_test';
+  protected $_has_many = array('lectures' => array('field' => 'course_id',
+                                                   'class' => 'CanBeNullLecture',
+                                                   'nullify' => true),
+                               );
+}
+
+class CanBeNullLecture extends lmbActiveRecord
+{
+  protected $_db_table_name = 'lecture_for_test';
+  protected $_many_belongs_to = array('course' => array('field' => 'course_id',
+                                                        'class' => 'NullifyCourse',
+                                                        'can_be_null' => true),
+                                      );
+}
+
+
 class LectureForTest extends lmbActiveRecord
 {
   protected $_db_table_name = 'lecture_for_test';



More information about the limb-svn mailing list