[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/active_record/tests/cases/ -> lmbARSubclassingTest.class.php (source)

   1  <?php
   2  /*

   3   * Limb PHP Framework

   4   *

   5   * @link http://limb-project.com

   6   * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)

   7   * @license    LGPL http://www.gnu.org/copyleft/lesser.html

   8   */
   9  lmb_require('limb/active_record/src/lmbActiveRecord.class.php');
  10  lmb_require('limb/dbal/src/lmbSimpleDb.class.php');
  11  
  12  class TestOneTableTypedObject extends lmbActiveRecord
  13  {
  14    protected $_db_table_name = 'test_one_table_typed_object';
  15  }
  16  
  17  class FooOneTableTestObject extends TestOneTableTypedObject{}
  18  class BarFooOneTableTestObject extends FooOneTableTestObject{}
  19  
  20  class TypedLectureForTest extends lmbActiveRecord
  21  {
  22    protected $_db_table_name = 'lecture_for_typed_test';
  23    protected $_belongs_to = array('course' => array('field' => 'course_id',
  24                                                     'class' => 'CourseForTestForTypedLecture'));
  25  }
  26  
  27  class FooLectureForTest extends TypedLectureForTest{}
  28  class BarFooLectureForTest extends FooLectureForTest{}
  29  
  30  class CourseForTestForTypedLecture extends lmbActiveRecord
  31  {
  32    protected $_db_table_name = 'course_for_typed_test';
  33    protected $_has_many = array('lectures' => array('field' => 'course_id',
  34                                                     'class' => 'TypedLectureForTest'),
  35                                 'foo_lectures' => array('field' => 'course_id',
  36                                                         'class' => 'FooLectureForTest'));
  37  }
  38  
  39  class lmbARSubclassingTest extends UnitTestCase
  40  {
  41    protected $db;
  42  
  43    function setUp()
  44    {
  45      $this->db = new lmbSimpleDb(lmbToolkit :: instance()->getDefaultDbConnection());
  46      $this->_dbCleanUp();
  47    }
  48  
  49    function tearDown()
  50    {
  51      $this->_dbCleanUp();
  52    }
  53  
  54    function _dbCleanUp()
  55    {
  56      $this->db->delete('lecture_for_typed_test');
  57      $this->db->delete('course_for_typed_test');
  58      $this->db->delete('test_one_table_typed_object');
  59    }
  60  
  61    function testCreate()
  62    {
  63      $object1 = new FooOneTableTestObject();
  64      $object1->setTitle('Some title');
  65      $object1->save();
  66  
  67      $object2 = new FooOneTableTestObject($object1->getId());
  68      $this->assertEqual($object2->getTitle(), $object1->getTitle());
  69  
  70      //parents are supertypes..

  71      $object3 = new TestOneTableTypedObject($object1->getId());
  72      $this->assertEqual($object3->getTitle(), $object1->getTitle());
  73  
  74      try
  75      {
  76        //..while deeper subclasses are not

  77        new BarFooOneTableTestObject($object1->getId());
  78        $this->assertTrue(false);
  79      }
  80      catch(lmbARException $e){}
  81    }
  82  
  83    function testSupertypeDelete()
  84    {
  85      $foo = new FooOneTableTestObject();
  86      $foo->setTitle('Some title');
  87      $foo->save();
  88  
  89      $bar = new BarFooOneTableTestObject();
  90      $bar->setTitle('Another title');
  91      $bar->save();
  92  
  93      lmbActiveRecord :: delete('TestOneTableTypedObject');
  94  
  95      $rs = lmbActiveRecord :: find('FooOneTableTestObject');
  96      $this->assertEqual($rs->count(), 0);
  97  
  98      $rs = lmbActiveRecord :: find('BarFooOneTableTestObject');
  99      $this->assertEqual($rs->count(), 0);
 100    }
 101  
 102    function testTypedDelete()
 103    {
 104      $foo = new FooOneTableTestObject();
 105      $foo->setTitle('Some title');
 106      $foo->save();
 107  
 108      $bar = new BarFooOneTableTestObject();
 109      $bar->setTitle('Another title');
 110      $bar->save();
 111  
 112      lmbActiveRecord :: delete('BarFooOneTableTestObject');//removing subclass

 113  
 114      $rs = lmbActiveRecord :: find('BarFooOneTableTestObject');
 115      $this->assertEqual($rs->count(), 0);
 116  
 117      $rs = lmbActiveRecord :: find('FooOneTableTestObject');//supertype stays

 118      $this->assertEqual($rs->count(), 1);
 119  
 120      lmbActiveRecord :: delete('FooOneTableTestObject');//removing supertype

 121  
 122      $rs = lmbActiveRecord :: find('FooOneTableTestObject');
 123      $this->assertEqual($rs->count(), 0);
 124    }
 125  
 126    function testFind()
 127    {
 128      $object1 = new FooOneTableTestObject();
 129      $object1->setTitle('Some title');
 130      $object1->save();
 131  
 132      $object2 = new BarFooOneTableTestObject();
 133      $object2->setTitle('Some other title');
 134      $object2->save();
 135  
 136      $rs = lmbActiveRecord :: find('FooOneTableTestObject');//supertype

 137      $this->assertEqual($rs->count(), 2);
 138      $this->assertIsA($rs->at(0), 'FooOneTableTestObject');
 139      $this->assertIsA($rs->at(1), 'BarFooOneTableTestObject');
 140  
 141      $rs = lmbActiveRecord :: find('BarFooOneTableTestObject');//subclass

 142      $this->assertEqual($rs->count(), 1);
 143      $this->assertIsA($rs->at(0), 'BarFooOneTableTestObject');
 144    }
 145  
 146    function testTypedRelationFind()
 147    {
 148      $course = new CourseForTestForTypedLecture();
 149      $course->setTitle('Source1');
 150      $course->save();
 151  
 152      $lecture1 = new FooLectureForTest();
 153      $lecture1->setTitle('Some title');
 154      $lecture1->setCourse($course);
 155      $lecture1->save();
 156  
 157      $lecture2 = new BarFooLectureForTest();
 158      $lecture2->setTitle('Some other title');
 159      $lecture2->setCourse($course);
 160      $lecture2->save();
 161  
 162      $course->getLectures()->add($lecture1);
 163      $course->getLectures()->add($lecture2);
 164  
 165      $course2 = new CourseForTestForTypedLecture($course->getId());
 166  
 167      $this->assertEqual($course2->getLectures()->count(), 2);//supertype by default

 168      $this->assertIsA($course2->getLectures()->at(0), 'FooLectureForTest');
 169      $this->assertIsA($course2->getLectures()->at(1), 'BarFooLectureForTest');
 170  
 171      //narrowing selection but again its supertype for BarFooLectureForTest

 172      $lectures = $course2->getLectures()->find(array('class' => 'FooLectureForTest'));
 173  
 174      $this->assertEqual($lectures->count(), 2);
 175      $this->assertIsA($lectures->at(0), 'FooLectureForTest');
 176      $this->assertIsA($lectures->at(1), 'BarFooLectureForTest');
 177  
 178      //narrowing more

 179      $lectures = $course2->getLectures()->find(array('class' => 'BarFooLectureForTest'));
 180      $this->assertEqual($lectures->count(), 1);
 181      $this->assertIsA($lectures->at(0), 'BarFooLectureForTest');
 182    }
 183  }
 184  
 185  ?>


Generated: Sat Nov 22 03:48:54 2008 Cross-referenced by PHPXref 0.7