[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/active_record/tests/cases/ -> lmbARImportTest.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  lmb_require('limb/core/src/lmbSet.class.php');
  12  require_once(dirname(__FILE__) . '/lmbActiveRecordTest.class.php');
  13  require_once(dirname(__FILE__) . '/lmbAROneToManyRelationsTest.class.php');
  14  require_once(dirname(__FILE__) . '/lmbAROneToOneRelationsTest.class.php');
  15  require_once(dirname(__FILE__) . '/lmbARManyToManyRelationsTest.class.php');
  16  require_once(dirname(__FILE__) . '/lmbARValueObjectTest.class.php');
  17  require_once(dirname(__FILE__) . '/lmbARAttributesLazyLoadingTest.class.php');
  18  
  19  class lmbARImportTest extends UnitTestCase
  20  {
  21    protected $db;
  22  
  23    function setUp()
  24    {
  25      $this->db = new lmbSimpleDb(lmbToolkit :: instance()->getDefaultDbConnection());
  26      $this->_dbCleanUp();
  27    }
  28  
  29    function tearDown()
  30    {
  31      $this->_dbCleanUp();
  32    }
  33  
  34    function _dbCleanUp()
  35    {
  36      lmbActiveRecord :: delete('TestOneTableObject');
  37      lmbActiveRecord :: delete('CourseForTest');
  38      lmbActiveRecord :: delete('LectureForTest');
  39      lmbActiveRecord :: delete('GroupForTest');
  40      lmbActiveRecord :: delete('UserForTest');
  41      lmbActiveRecord :: delete('LessonForTest');
  42      lmbActiveRecord :: delete('PersonForTest');
  43      lmbActiveRecord :: delete('SocialSecurityForTest');
  44    }
  45  
  46    function testImportingObjectCallsItsExportMethod()
  47    {
  48      $object = new TestOneTableObject();
  49      $object->import(new lmbSet(array('annotation' => 'Some annotation')));
  50      $this->assertEqual($object->getAnnotation(), 'Some annotation');
  51    }
  52  
  53    function testImportNewActiveRecord()
  54    {
  55      $object1 = new TestOneTableObject();
  56      $object1->setId(100); //note this

  57      $object1->setAnnotation($annotation = 'Some annotation');
  58  
  59      $object2 = new TestOneTableObject();
  60      $object2->import($object1);
  61      $this->assertEqual($object2->getId(), $object1->getId());
  62      $this->assertEqual($object2->getAnnotation(), $annotation);
  63      $this->assertTrue($object2->isNew());
  64      $this->assertTrue($object2->isDirty());
  65    }
  66  
  67    function testImportExistingActiveRecord()
  68    {
  69      $object1 = new TestOneTableObject();
  70      $object1->setAnnotation($annotation = 'Some annotation');
  71      $object1->save();
  72  
  73      $object2 = new TestOneTableObject();
  74      $object2->import($object1);
  75      $this->assertEqual($object2->getId(), $object1->getId());
  76      $this->assertEqual($object2->getAnnotation(), $annotation);
  77      $this->assertFalse($object2->isNew());
  78      $this->assertTrue($object2->isDirty());
  79    }
  80  
  81    function testPassingActiveRecordToConstructorCallsImport()
  82    {
  83      $object1 = new TestOneTableObject();
  84      $object1->setAnnotation($annotation = 'Some annotation');
  85      $object1->save();
  86  
  87      $object2 = new TestOneTableObject($object1);
  88      $this->assertEqual($object2->getId(), $object1->getId());
  89      $this->assertEqual($object2->getAnnotation(), $annotation);
  90      $this->assertFalse($object2->isNew());
  91      $this->assertTrue($object2->isDirty());
  92    }
  93  
  94    function testImportActiveRecordWithLazyAttributes()
  95    {
  96      $object = new LazyTestOneTableObject();
  97      $object->setContent($content = 'Some content');
  98      $object->setAnnotation($annotation = 'Some annotation');
  99      $object->save();
 100  
 101      $object1 = new LazyTestOneTableObject();
 102      $object2 = new LazyTestOneTableObject($object->getId());
 103  
 104      $object1->import($object2);
 105      $this->assertFalse($object1->hasAttribute('annotation'));
 106      $this->assertEqual($object1->getAnnotation(), $annotation);
 107      $this->assertFalse($object1->hasAttribute('content'));
 108      $this->assertEqual($object1->getContent(), $content);
 109    }
 110  
 111    function testImportOverwritesIdOfNewObject()
 112    {
 113      $object = new TestOneTableObject();
 114      $object->setId(1);
 115  
 116      $source = array('id' => 1000,
 117                      'annotation' => 'Some annotation',
 118                      'content' => 'Some content',
 119                      );
 120  
 121      $object->import($source);
 122      $this->assertEqual($object->getId(), 1000);
 123      $this->assertEqual($object->getAnnotation(), 'Some annotation');
 124      $this->assertEqual($object->getContent(), 'Some content');
 125      $this->assertNull($object->getJunk());
 126    }
 127  
 128    function testImportPreservesIdOfExistingObject()
 129    {
 130      $object = new TestOneTableObject();
 131      $object->setAnnotation('Initial annotation');
 132      $object->save();
 133      $id = $object->getId();
 134  
 135      $source = array('id' => 10000,
 136                      'annotation' => 'Some annotation',
 137                      'content' => 'Some content',
 138                      );
 139  
 140      $object->import($source);
 141      $this->assertEqual($object->getId(), $id);
 142      $this->assertNotEqual($object->getId(), 1000);// just one extra check

 143      $this->assertEqual($object->getAnnotation(), 'Some annotation');
 144      $this->assertEqual($object->getContent(), 'Some content');
 145    }
 146  
 147    function testPassingArrayToConstructorCallsImport()
 148    {
 149      $source = array('id' => 1000,
 150                      'annotation' => 'Some annotation',
 151                      'content' => 'Some content',
 152                      );
 153  
 154      $object = new TestOneTableObject($source);
 155      $this->assertEqual($object->getId(), 1000);
 156      $this->assertEqual($object->getAnnotation(), 'Some annotation');
 157      $this->assertEqual($object->getContent(), 'Some content');
 158    }
 159  
 160    function testImportWhereOne2ManyCollectionIsArrayOfIds()
 161    {
 162      $course = new CourseForTest();
 163      $course->setTitle('Some course');
 164  
 165      $l1 = new LectureForTest();
 166      $l1->setTitle('Physics');
 167      $l2 = new LectureForTest();
 168      $l2->setTitle('Math');
 169  
 170      $course->addToLectures($l1);
 171      $course->addToLectures($l2);
 172  
 173      $course->save();
 174  
 175      $source = array('title' => $course->getTitle(),
 176                      'lectures' => array($l1->getId(), $l2->getId()));
 177  
 178      $course2 = new CourseForTest();
 179      $course2->import($source);
 180      $this->assertEqual($course2->getTitle(), $course->getTitle());
 181      $this->assertEqual($course2->getLectures()->count(), 2);
 182      $this->assertEqual($course2->getLectures()->at(0)->getTitle(), $l1->getTitle());
 183      $this->assertEqual($course2->getLectures()->at(1)->getTitle(), $l2->getTitle());
 184    }
 185  
 186    function testImportWhereOne2ManyCollectionIsMixedArray()
 187    {
 188      $course = new CourseForTest();
 189      $course->setTitle('Some course');
 190  
 191      $l1 = new LectureForTest();
 192      $l1->setTitle('Physics');
 193      $l2 = new LectureForTest();
 194      $l2->setTitle('Math');
 195  
 196      $course->addToLectures($l1);
 197      $course->addToLectures($l2);
 198  
 199      $course->save();
 200  
 201      $source = array('title' => $course->getTitle(),
 202                      'lectures' => array($l1->getId(), $l2));
 203  
 204      $course2 = new CourseForTest();
 205      $course2->import($source);
 206      $this->assertEqual($course2->getTitle(), $course->getTitle());
 207      $this->assertEqual($course2->getLectures()->count(), 2);
 208      $this->assertEqual($course2->getLectures()->at(0)->getTitle(), $l1->getTitle());
 209      $this->assertEqual($course2->getLectures()->at(1)->getTitle(), $l2->getTitle());
 210    }
 211  
 212    function testImportResetsExistingOne2ManyCollection()
 213    {
 214      $course = new CourseForTest();
 215      $course->setTitle('Some course');
 216  
 217      $l1 = new LectureForTest();
 218      $l1->setTitle('Physics');
 219      $l2 = new LectureForTest();
 220      $l2->setTitle('Math');
 221  
 222      $course->addToLectures($l1);
 223      $course->addToLectures($l2);
 224  
 225      $course->save();
 226  
 227      $source = array('title' => $course->getTitle(),
 228                      'lectures' => array($l2->getId()));
 229  
 230      $course2 = new CourseForTest($course->getId());
 231  
 232      $course2->import($source);
 233      $this->assertEqual($course2->getTitle(), $course->getTitle());
 234      $this->assertEqual($course2->getLectures()->count(), 1);
 235      $this->assertEqual($course2->getLectures()->at(0)->getTitle(), $l2->getTitle());
 236    }
 237  
 238    function testImportResetsExistingMany2ManyCollection()
 239    {
 240      $group = new GroupForTest();
 241      $group->setTitle('Some group');
 242  
 243      $u1 = new UserForTest();
 244      $u1->setFirstName('Bob');
 245      $u2 = new UserForTest();
 246      $u2->setFirstName('John');
 247  
 248      $group->addToUsers($u1);
 249      $group->addToUsers($u2);
 250  
 251      $group->save();
 252  
 253      $source = array('title' => $group->getTitle(),
 254                      'users' => array($u2->getId()));
 255  
 256      $group2 = new GroupForTest($group->getId());
 257      $group2->import($source);
 258      $this->assertEqual($group2->getTitle(), $group->getTitle());
 259      $this->assertEqual($group2->getUsers()->count(), 1);
 260      $this->assertEqual($group2->getUsers()->at(0)->getFirstName(), $u2->getFirstName());
 261    }
 262  
 263    function testImportWhereOne2ManyParentIsNumericId()
 264    {
 265      $course = new CourseForTest();
 266      $course->setTitle('Some course');
 267  
 268      $l = new LectureForTest();
 269      $l->setTitle('Physics');
 270      $l->setCourse($course);
 271  
 272      $l->save();
 273  
 274      $source = array('title' => $l->getTitle(),
 275                      'course' => $course->getId());
 276  
 277      $l2 = new LectureForTest();
 278      $l2->import($source);
 279  
 280      $this->assertEqual($l2->getTitle(), $l->getTitle());
 281      $this->assertEqual($l2->getCourse()->getTitle(), $course->getTitle());
 282    }
 283  
 284    function testImportWhereOne2ManyParentIsObject()
 285    {
 286      $course = new CourseForTest();
 287      $course->setTitle('Some course');
 288  
 289      $l = new LectureForTest();
 290      $l->setTitle('Physics');
 291      $l->setCourse($course);
 292  
 293      $l->save();
 294  
 295      $source = array('title' => $l->getTitle(),
 296                      'course' => $course);
 297  
 298      $l2 = new LectureForTest();
 299      $l2->import($source);
 300      $this->assertEqual($l2->getTitle(), $l->getTitle());
 301      $this->assertEqual($l2->getCourse()->getTitle(), $course->getTitle());
 302    }
 303  
 304    function testImportWhereMany2ManyCollectionIsArrayOfIds()
 305    {
 306      $user1 = new UserForTest();
 307      $user1->setFirstName('Bob');
 308  
 309      $g1 = new GroupForTest();
 310      $g1->setTitle('vp1');
 311      $g2 = new GroupForTest();
 312      $g2->setTitle('vp1');
 313  
 314      $user1->addToGroups($g1);
 315      $user1->addToGroups($g2);
 316      $user1->save();
 317  
 318      $source = array('first_name' => $user1->getFirstName(),
 319                      'groups' => array($g1->getId(), $g2->getId()));
 320  
 321      $user2 = new UserForTest();
 322      $user2->import($source);
 323      $this->assertEqual($user2->getFirstName(), $user1->getFirstName());
 324      $this->assertEqual($user2->getGroups()->count(), 2);
 325      $this->assertEqual($user2->getGroups()->at(0)->getTitle(), $g1->getTitle());
 326      $this->assertEqual($user2->getGroups()->at(1)->getTitle(), $g2->getTitle());
 327    }
 328  
 329    function testImportWhereMany2ManyCollectionIsMixedArray()
 330    {
 331      $user1 = new UserForTest();
 332      $user1->setFirstName('Bob');
 333  
 334      $g1 = new GroupForTest();
 335      $g1->setTitle('vp1');
 336      $g2 = new GroupForTest();
 337      $g2->setTitle('vp1');
 338  
 339      $user1->addToGroups($g1);
 340      $user1->addToGroups($g2);
 341      $user1->save();
 342  
 343      $source = array('first_name' => $user1->getFirstName(),
 344                      'groups' => array($g1->getId(), $g2));
 345  
 346      $user2 = new UserForTest();
 347      $user2->import($source);
 348      $this->assertEqual($user2->getFirstName(), $user1->getFirstName());
 349      $this->assertEqual($user2->getGroups()->count(), 2);
 350      $this->assertEqual($user2->getGroups()->at(0)->getTitle(), $g1->getTitle());
 351      $this->assertEqual($user2->getGroups()->at(1)->getTitle(), $g2->getTitle());
 352    }
 353  
 354    function testImportOne2OneWhereParentIsNumericId()
 355    {
 356      $person = new PersonForTest();
 357      $person->setName('Jim');
 358      $number = new SocialSecurityForTest();
 359      $number->setCode('099123');
 360      $person->setSocialSecurity($number);
 361      $person->save();
 362  
 363      $source = array('code' => $number->getCode(),
 364                      'person' => $person->getId());
 365  
 366      $number2 = new SocialSecurityForTest();
 367      $number2->import($source);
 368      $this->assertEqual($number2->getCode(), $number->getCode());
 369      $this->assertEqual($number2->getPerson()->getName(), $person->getName());
 370    }
 371  
 372    function testImportOne2OneWhereParentIsObject()
 373    {
 374      $person = new PersonForTest();
 375      $person->setName('Jim');
 376