RecordTestCase.php 29.7 KB
Newer Older
romanb's avatar
romanb committed
1
<?php
zYne's avatar
zYne committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/*
 *  $Id$
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the LGPL. For more information, see
 * <http://www.phpdoctrine.com>.
 */

/**
 * Doctrine_Record_TestCase
 *
 * @package     Doctrine
 * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
 * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
 * @category    Object Relational Mapping
 * @link        www.phpdoctrine.com
 * @since       1.0
 * @version     $Revision$
 */
zYne's avatar
zYne committed
33 34
class Doctrine_Record_TestCase extends Doctrine_UnitTestCase 
{
zYne's avatar
zYne committed
35

zYne's avatar
zYne committed
36 37 38 39 40 41
    public function prepareTables() 
    {
        $this->tables[] = 'enumTest';
        $this->tables[] = 'fieldNameTest';
        $this->tables[] = 'GzipTest';
        $this->tables[] = 'Book';
42
        $this->tables[] = 'EntityAddress';
romanb's avatar
romanb committed
43 44
        parent::prepareTables();
    }
45

zYne's avatar
zYne committed
46 47 48 49
    public function testOne2OneForeign() 
    {
        $user = new User();
        $user->name = "Richard Linklater";
meus's avatar
meus committed
50

zYne's avatar
zYne committed
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
        $rel = $user->getTable()->getRelation('Account');

        $this->assertTrue($rel instanceof Doctrine_Relation_ForeignKey);

        $account = $user->Account;
        $account->amount = 1000;
        $this->assertTrue($account instanceof Account);
        $this->assertEqual($account->state(), Doctrine_Record::STATE_TDIRTY);
        $this->assertEqual($account->entity_id->getOid(), $user->getOid());
        $this->assertEqual($account->amount, 1000);
        $this->assertEqual($user->name, "Richard Linklater");

        $user->save();
        $this->assertEqual($account->entity_id, $user->id);

        $user->refresh();

        $account = $user->Account;
        $this->assertTrue($account instanceof Account);
        $this->assertEqual($account->state(), Doctrine_Record::STATE_CLEAN);
        $this->assertEqual($account->entity_id, $user->id);
        $this->assertEqual($account->amount, 1000);
        $this->assertEqual($user->name, "Richard Linklater");


        $user = new User();
        $user->name = 'John Rambo';
        $account = $user->Account;
        $account->amount = 2000;
        $this->assertEqual($account->getTable()->getColumnNames(), array('id', 'entity_id', 'amount'));

        $this->connection->flush();
        $this->assertEqual($user->state(), Doctrine_Record::STATE_CLEAN);
        $this->assertTrue($account instanceof Account);

        $this->assertEqual($account->getTable()->getColumnNames(), array('id', 'entity_id', 'amount'));
        $this->assertEqual($account->entity_id, $user->id);
        $this->assertEqual($account->amount, 2000);


        $user = $user->getTable()->find($user->id);
        $this->assertEqual($user->state(), Doctrine_Record::STATE_CLEAN);


        $account = $user->Account;
        $this->assertTrue($account instanceof Account);

        $this->assertEqual($account->state(), Doctrine_Record::STATE_CLEAN);
        $this->assertEqual($account->getTable()->getColumnNames(), array('id', 'entity_id', 'amount'));

        $this->assertEqual($account->entity_id, $user->id);
        $this->assertEqual($account->amount, 2000);
        $this->assertEqual($user->name, "John Rambo");

    }

zYne's avatar
zYne committed
107 108
    public function testIssetForPrimaryKey() 
    {
romanb's avatar
romanb committed
109 110 111 112 113 114
        $this->assertTrue(isset($this->users[0]->id));
        $this->assertTrue(isset($this->users[0]['id']));
        $this->assertTrue($this->users[0]->contains('id'));

        $user = new User();

zYne's avatar
zYne committed
115 116 117
        $this->assertTrue(isset($user->id));
        $this->assertTrue(isset($user['id']));
        $this->assertTrue($user->contains('id'));
romanb's avatar
romanb committed
118
    }
zYne's avatar
zYne committed
119

zYne's avatar
zYne committed
120 121
    public function testNotNullConstraint() 
    {
romanb's avatar
romanb committed
122 123 124 125 126 127 128 129
        $null = new NotNullTest();

        $null->name = null;

        $null->type = 1;
        try {
            $null->save();
            $this->fail();
zYne's avatar
zYne committed
130
        } catch(Exception $e) {
romanb's avatar
romanb committed
131 132 133 134 135 136
            $this->pass();
            $this->connection->rollback();
        }

    }

zYne's avatar
zYne committed
137 138
    public function testGzipType() 
    {
romanb's avatar
romanb committed
139 140 141 142 143 144 145 146 147 148 149 150
        $gzip = new GzipTest();
        $gzip->gzip = "compressed";

        $this->assertEqual($gzip->gzip, "compressed");
        $gzip->save();
        $this->assertEqual($gzip->gzip, "compressed");
        $gzip->refresh();
        $this->assertEqual($gzip->gzip, "compressed");

        $this->connection->clear();
        $gzip = $gzip->getTable()->find($gzip->id);
        $this->assertEqual($gzip->gzip, "compressed");
meus's avatar
meus committed
151

romanb's avatar
romanb committed
152 153 154 155 156 157 158 159 160
        $gzip->gzip = "compressed 2";

        $this->assertEqual($gzip->gzip, "compressed 2");
        $gzip->save();
        $this->assertEqual($gzip->gzip, "compressed 2");
        $gzip->refresh();
        $this->assertEqual($gzip->gzip, "compressed 2");
    }

zYne's avatar
zYne committed
161 162
    public function testDefaultValues() 
    {
romanb's avatar
romanb committed
163 164

        $test = new FieldNameTest;
meus's avatar
meus committed
165

romanb's avatar
romanb committed
166 167 168 169 170 171 172 173
        $this->assertEqual($test->someColumn, 'some string');
        $this->assertEqual($test->someEnum, 'php');
        $this->assertEqual($test->someArray, array());
        $this->assertTrue(is_object($test->someObject));
        $this->assertEqual($test->someInt, 11);
    }


zYne's avatar
zYne committed
174 175
    public function testToArray() 
    {
romanb's avatar
romanb committed
176
        $user = new User();
meus's avatar
meus committed
177

romanb's avatar
romanb committed
178 179 180 181
        $a = $user->toArray();

        $this->assertTrue(is_array($a));
        $this->assertTrue(array_key_exists('name', $a));
meus's avatar
meus committed
182

zYne's avatar
zYne committed
183

romanb's avatar
romanb committed
184 185 186
        $this->assertEqual($a['name'], null);
        $this->assertTrue(array_key_exists('id', $a));
        $this->assertEqual($a['id'], null);
zYne's avatar
zYne committed
187

romanb's avatar
romanb committed
188 189 190 191 192 193 194 195 196 197 198
        $user->name = 'Someone';

        $user->save();

        $a = $user->toArray();

        $this->assertTrue(is_array($a));
        $this->assertTrue(array_key_exists('name', $a));
        $this->assertEqual($a['name'], 'Someone');
        $this->assertTrue(array_key_exists('id', $a));
        $this->assertTrue(is_numeric($a['id']));
meus's avatar
meus committed
199

romanb's avatar
romanb committed
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
        $user->refresh();

        $a = $user->toArray();

        $this->assertTrue(is_array($a));
        $this->assertTrue(array_key_exists('name', $a));
        $this->assertEqual($a['name'], 'Someone');
        $this->assertTrue(array_key_exists('id', $a));
        $this->assertTrue(is_numeric($a['id']));
        $this->connection->clear();
        $user = $user->getTable()->find($user->id);

        $a = $user->toArray();

        $this->assertTrue(is_array($a));
        $this->assertTrue(array_key_exists('name', $a));
        $this->assertEqual($a['name'], 'Someone');
        $this->assertTrue(array_key_exists('id', $a));
        $this->assertTrue(is_numeric($a['id']));
    }

zYne's avatar
zYne committed
221 222
    public function testReferences2() 
    {
romanb's avatar
romanb committed
223 224
        $user = new User();
        $user->Phonenumber[0]->phonenumber = '123 123';
zYne's avatar
zYne committed
225
        $ref = $user->Phonenumber[0]->entity_id;
romanb's avatar
romanb committed
226

zYne's avatar
zYne committed
227
        $this->assertEqual($ref->getOid(), $user->getOid());
romanb's avatar
romanb committed
228
    }
zYne's avatar
zYne committed
229

zYne's avatar
zYne committed
230 231
    public function testUpdatingWithNullValue() 
    {
romanb's avatar
romanb committed
232 233 234 235 236 237 238
        $user = $this->connection->getTable('User')->find(5);
        $user->name = null;
        $this->assertEqual($user->name, null);

        $user->save();

        $this->assertEqual($user->name, null);
zYne's avatar
zYne committed
239

romanb's avatar
romanb committed
240 241 242 243 244 245
        $this->connection->clear();

        $user = $this->connection->getTable('User')->find(5);
        $this->assertEqual($user->name, null);

    }
zYne's avatar
zYne committed
246

zYne's avatar
zYne committed
247 248
    public function testSerialize() 
    {
romanb's avatar
romanb committed
249 250 251 252 253
        $user = $this->connection->getTable("User")->find(4);
        $str = serialize($user);
        $user2 = unserialize($str);

        $this->assertTrue($user2 instanceof User);
254
        $this->assertEqual($user2->identifier(), $user->identifier());
romanb's avatar
romanb committed
255 256
    }

zYne's avatar
zYne committed
257 258
    public function testCallback() 
    {
romanb's avatar
romanb committed
259 260 261 262 263 264 265
        $user = new User();
        $user->name = " zYne ";
        $user->call('trim', 'name');
        $this->assertEqual($user->name, 'zYne');
        $user->call('substr', 'name', 0, 1);
        $this->assertEqual($user->name, 'z');
    }
zYne's avatar
zYne committed
266

romanb's avatar
romanb committed
267 268 269
    public function testCompositePK() {
        $record = new EntityReference();
        $this->assertEqual($record->getTable()->getIdentifier(), array("entity1","entity2"));
zYne's avatar
zYne committed
270
        $this->assertEqual($record->getTable()->getIdentifierType(), Doctrine::IDENTIFIER_COMPOSITE);
271
        $this->assertEqual($record->identifier(), array("entity1" => null, "entity2" => null));
zYne's avatar
zYne committed
272
        $this->assertEqual($record->state(), Doctrine_Record::STATE_TCLEAN);
romanb's avatar
romanb committed
273 274 275 276 277

        $record->entity1 = 3;
        $record->entity2 = 4;
        $this->assertEqual($record->entity2, 4);
        $this->assertEqual($record->entity1, 3);
zYne's avatar
zYne committed
278
        $this->assertEqual($record->state(), Doctrine_Record::STATE_TDIRTY);
279
        $this->assertEqual($record->identifier(), array("entity1" => null, "entity2" => null));
romanb's avatar
romanb committed
280 281

        $record->save();
zYne's avatar
zYne committed
282
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
283 284
        $this->assertEqual($record->entity2, 4);
        $this->assertEqual($record->entity1, 3);
285
        $this->assertEqual($record->identifier(), array("entity1" => 3, "entity2" => 4));
romanb's avatar
romanb committed
286

287
        $record = $record->getTable()->find($record->identifier());
zYne's avatar
zYne committed
288
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
289 290 291
        $this->assertEqual($record->entity2, 4);
        $this->assertEqual($record->entity1, 3);

292
        $this->assertEqual($record->identifier(), array("entity1" => 3, "entity2" => 4));
meus's avatar
meus committed
293

romanb's avatar
romanb committed
294 295
        $record->entity2 = 5;
        $record->entity1 = 2;
zYne's avatar
zYne committed
296
        $this->assertEqual($record->state(), Doctrine_Record::STATE_DIRTY);
romanb's avatar
romanb committed
297 298
        $this->assertEqual($record->entity2, 5);
        $this->assertEqual($record->entity1, 2);
299
        $this->assertEqual($record->identifier(), array("entity1" => 3, "entity2" => 4));
romanb's avatar
romanb committed
300 301

        $record->save();
zYne's avatar
zYne committed
302
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
303 304
        $this->assertEqual($record->entity2, 5);
        $this->assertEqual($record->entity1, 2);
305 306
        $this->assertEqual($record->identifier(), array("entity1" => 2, "entity2" => 5));
        $record = $record->getTable()->find($record->identifier());
romanb's avatar
romanb committed
307

zYne's avatar
zYne committed
308
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
309 310
        $this->assertEqual($record->entity2, 5);
        $this->assertEqual($record->entity1, 2);
311
        $this->assertEqual($record->identifier(), array("entity1" => 2, "entity2" => 5));
meus's avatar
meus committed
312

romanb's avatar
romanb committed
313
        $record->refresh();
zYne's avatar
zYne committed
314
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
315 316
        $this->assertEqual($record->entity2, 5);
        $this->assertEqual($record->entity1, 2);
317
        $this->assertEqual($record->identifier(), array("entity1" => 2, "entity2" => 5));
romanb's avatar
romanb committed
318 319 320 321 322

        $record = new EntityReference();
        $record->entity2 = 6;
        $record->entity1 = 2;
        $record->save();
meus's avatar
meus committed
323

zYne's avatar
zYne committed
324
        $coll = $this->connection->query("FROM EntityReference");
romanb's avatar
romanb committed
325
        $this->assertTrue($coll[0] instanceof EntityReference);
zYne's avatar
zYne committed
326
        $this->assertEqual($coll[0]->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
327
        $this->assertTrue($coll[1] instanceof EntityReference);
zYne's avatar
zYne committed
328
        $this->assertEqual($coll[1]->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
329

zYne's avatar
zYne committed
330
        $coll = $this->connection->query("FROM EntityReference WHERE EntityReference.entity2 = 5");
romanb's avatar
romanb committed
331 332 333
        $this->assertEqual($coll->count(), 1);
    }

zYne's avatar
zYne committed
334 335
    public function testManyToManyTreeStructure() 
    {
romanb's avatar
romanb committed
336 337 338 339 340 341 342 343 344 345 346 347 348 349

        $task = $this->connection->create("Task");

        $task->name = "Task 1";
        $task->ResourceAlias[0]->name = "Resource 1";

        $this->connection->flush();

        $this->assertTrue($task->ResourceAlias[0] instanceof Resource);
        $this->assertEqual($task->ResourceAlias[0]->name, "Resource 1");
        $this->assertEqual($this->dbh->query("SELECT COUNT(*) FROM assignment")->fetch(PDO::FETCH_NUM),array(1));

        $task = new Task();
        $this->assertTrue($task instanceof Task);
zYne's avatar
zYne committed
350
        $this->assertEqual($task->state(), Doctrine_Record::STATE_TCLEAN);
romanb's avatar
romanb committed
351 352
        $this->assertTrue($task->Subtask[0] instanceof Task);

zYne's avatar
zYne committed
353
        //$this->assertEqual($task->Subtask[0]->state(), Doctrine_Record::STATE_TDIRTY);
romanb's avatar
romanb committed
354
        $this->assertTrue($task->ResourceAlias[0] instanceof Resource);
zYne's avatar
zYne committed
355
        $this->assertEqual($task->ResourceAlias[0]->state(), Doctrine_Record::STATE_TCLEAN);
romanb's avatar
romanb committed
356 357 358 359 360 361 362 363 364 365 366 367

        $task->name = "Task 1";
        $task->ResourceAlias[0]->name = "Resource 1";
        $task->Subtask[0]->name = "Subtask 1";

        $this->assertEqual($task->name, "Task 1");
        $this->assertEqual($task->ResourceAlias[0]->name, "Resource 1");
        $this->assertEqual($task->ResourceAlias->count(), 1);
        $this->assertEqual($task->Subtask[0]->name, "Subtask 1");

        $this->connection->flush();

368
        $task = $task->getTable()->find($task->identifier());
romanb's avatar
romanb committed
369 370 371 372 373 374 375 376 377

        $this->assertEqual($task->name, "Task 1");
        $this->assertEqual($task->ResourceAlias[0]->name, "Resource 1");
        $this->assertEqual($task->ResourceAlias->count(), 1);
        $this->assertEqual($task->Subtask[0]->name, "Subtask 1");

    }


zYne's avatar
zYne committed
378 379
    public function testGet()
    {
romanb's avatar
romanb committed
380 381 382 383 384 385
        $user = new User();
        $user->name = "Jack Daniels";
        $this->assertEqual($user->name, "Jack Daniels");
        $this->assertEqual($user->created, null);
        $this->assertEqual($user->updated, null);
        $user->save();
386
        $id = $user->identifier();
romanb's avatar
romanb committed
387 388 389 390 391 392 393 394
        $user = $user->getTable()->find($id);
        $this->assertEqual($user->name, "Jack Daniels");
        $this->assertEqual($user->created, null);
        $this->assertEqual($user->updated, null);
        $this->assertEqual($user->getTable()->getData(), array());

    }

zYne's avatar
zYne committed
395 396
    public function testNewOperator() 
    {
romanb's avatar
romanb committed
397 398 399 400
        $table = $this->connection->getTable("User");

        $this->assertEqual($this->connection->getTable("User")->getData(), array());
        $user = new User();
zYne's avatar
zYne committed
401
        $this->assertEqual(Doctrine_Lib::getRecordStateAsString($user->state()), Doctrine_Lib::getRecordStateAsString(Doctrine_Record::STATE_TCLEAN));
romanb's avatar
romanb committed
402 403 404
        $user->name = "John Locke";

        $this->assertTrue($user->name,"John Locke");
zYne's avatar
zYne committed
405
        $this->assertTrue($user->state() == Doctrine_Record::STATE_TDIRTY);
romanb's avatar
romanb committed
406
        $user->save();
zYne's avatar
zYne committed
407
        $this->assertTrue($user->state() == Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
408 409 410
        $this->assertTrue($user->name,"John Locke");
    }

zYne's avatar
zYne committed
411 412
    public function testTreeStructure() 
    {
romanb's avatar
romanb committed
413 414 415 416 417 418 419
        $e = new Element();

        $fk = $e->getTable()->getRelation("Child");
        $this->assertTrue($fk instanceof Doctrine_Relation_ForeignKey);
        $this->assertEqual($fk->getType(), Doctrine_Relation::MANY_AGGREGATE);
        $this->assertEqual($fk->getForeign(), "parent_id");
        $this->assertEqual($fk->getLocal(), "id");
meus's avatar
meus committed
420

romanb's avatar
romanb committed
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439


        $e->name = "parent";
        $e->Child[0]->name = "child 1";
        $e->Child[1]->name = "child 2";

        $e->Child[1]->Child[0]->name = "child 1's child 1";
        $e->Child[1]->Child[1]->name = "child 1's child 1";

        $this->assertEqual($e->name,"parent");

        $this->assertEqual($e->Child[0]->name,"child 1");
        $this->assertEqual($e->Child[1]->name,"child 2");
        $this->assertEqual($e->Child[1]->Child[0]->name,"child 1's child 1");
        $this->assertEqual($e->Child[1]->Child[1]->name,"child 1's child 1");



        $this->connection->flush();
zYne's avatar
zYne committed
440
        $elements = $this->connection->query("FROM Element");
romanb's avatar
romanb committed
441 442 443 444 445 446 447 448 449 450 451
        $this->assertEqual($elements->count(), 5);

        $e = $e->getTable()->find(1);
        $this->assertEqual($e->name,"parent");

        $this->assertEqual($e->Child[0]->name,"child 1");

        $c = $e->getTable()->find(2);
        $this->assertEqual($c->name, "child 1");

        $this->assertEqual($e->Child[0]->parent_id, 1);
452
        $this->assertEqual($e->Child[0]->Parent->identifier(), $e->identifier());
romanb's avatar
romanb committed
453 454 455 456 457 458 459 460 461 462


        $this->assertEqual($e->Child[1]->parent_id, 1);
        $this->assertEqual($e->Child[1]->Child[0]->name,"child 1's child 1");
        $this->assertEqual($e->Child[1]->Child[1]->name,"child 1's child 1");
        $this->assertEqual($e->Child[1]->Child[0]->parent_id, 3);
        $this->assertEqual($e->Child[1]->Child[1]->parent_id, 3);

    }

zYne's avatar
zYne committed
463 464
    public function testUniqueKeyComponent() 
    {
romanb's avatar
romanb committed
465
        $e = new Error();
zYne's avatar
zYne committed
466
        $e->message  = 'user error';
romanb's avatar
romanb committed
467 468 469 470 471 472
        $e->file_md5 = md5(0);
        $e->code     = 1;

        // ADDING NEW RECORD
        $this->assertEqual($e->code,1);
        $this->assertEqual($e->file_md5, md5(0));
zYne's avatar
zYne committed
473
        $this->assertEqual($e->message, 'user error');
romanb's avatar
romanb committed
474 475

        $e2 = new Error();
zYne's avatar
zYne committed
476
        $e2->message  = 'user error2';
romanb's avatar
romanb committed
477 478 479 480 481
        $e2->file_md5 = md5(1);
        $e2->code     = 2;

        $this->assertEqual($e2->code,2);
        $this->assertEqual($e2->file_md5, md5(1));
zYne's avatar
zYne committed
482
        $this->assertEqual($e2->message, 'user error2');
meus's avatar
meus committed
483

romanb's avatar
romanb committed
484

zYne's avatar
zYne committed
485
        $fk = $e->getTable()->getRelation('Description');
romanb's avatar
romanb committed
486
        $this->assertTrue($fk instanceof Doctrine_Relation_ForeignKey);
zYne's avatar
zYne committed
487 488
        $this->assertEqual($fk->getLocal(),'file_md5');
        $this->assertEqual($fk->getForeign(),'file_md5');
romanb's avatar
romanb committed
489 490
        $this->assertTrue($fk->getTable() instanceof Doctrine_Table);

zYne's avatar
zYne committed
491 492 493 494
        $e->Description[0]->description = 'This is the 1st description';
        $e->Description[1]->description = 'This is the 2nd description';
        $this->assertEqual($e->Description[0]->description, 'This is the 1st description');
        $this->assertEqual($e->Description[1]->description, 'This is the 2nd description');
romanb's avatar
romanb committed
495 496
        $this->assertEqual($e->Description[0]->file_md5, $e->file_md5);
        $this->assertEqual($e->Description[1]->file_md5, $e->file_md5);
zYne's avatar
zYne committed
497

romanb's avatar
romanb committed
498 499 500 501 502 503
        $this->assertEqual($e2->Description[0]->description, null);
        $this->assertEqual($e2->Description[1]->description, null);
        $this->assertEqual($e2->Description[0]->file_md5, $e2->file_md5);
        $this->assertEqual($e2->Description[1]->file_md5, $e2->file_md5);

        $e->save();
meus's avatar
meus committed
504

zYne's avatar
zYne committed
505
        $coll = $this->connection->query('FROM Error');
romanb's avatar
romanb committed
506 507 508 509 510
        $e = $coll[0];


        $this->assertEqual($e->code,1);
        $this->assertEqual($e->file_md5, md5(0));
zYne's avatar
zYne committed
511
        $this->assertEqual($e->message, 'user error');
romanb's avatar
romanb committed
512 513 514 515 516

        $this->assertTrue($e->Description instanceof Doctrine_Collection);
        $this->assertTrue($e->Description[0] instanceof Description);
        $this->assertTrue($e->Description[1] instanceof Description);

zYne's avatar
zYne committed
517 518
        $this->assertEqual($e->Description[0]->description, 'This is the 1st description');
        $this->assertEqual($e->Description[1]->description, 'This is the 2nd description');
romanb's avatar
romanb committed
519 520

        // UPDATING
meus's avatar
meus committed
521

romanb's avatar
romanb committed
522
        $e->code = 2;
zYne's avatar
zYne committed
523 524 525
        $e->message = 'changed message';
        $e->Description[0]->description = '1st changed description';
        $e->Description[1]->description = '2nd changed description';
romanb's avatar
romanb committed
526 527 528


        $this->assertEqual($e->code,2);
zYne's avatar
zYne committed
529 530 531
        $this->assertEqual($e->message,'changed message');
        $this->assertEqual($e->Description[0]->description, '1st changed description');
        $this->assertEqual($e->Description[1]->description, '2nd changed description');
romanb's avatar
romanb committed
532 533 534

        $e->save();
        $this->assertEqual($e->code,2);
zYne's avatar
zYne committed
535 536 537
        $this->assertEqual($e->message,'changed message');
        $this->assertEqual($e->Description[0]->description, '1st changed description');
        $this->assertEqual($e->Description[1]->description, '2nd changed description');
romanb's avatar
romanb committed
538 539
    }

zYne's avatar
zYne committed
540 541
    public function testInsert() 
    {
romanb's avatar
romanb committed
542 543 544
        $user = new User();
        $user->name = "John Locke";
        $user->save();
meus's avatar
meus committed
545

romanb's avatar
romanb committed
546
        $this->assertTrue(is_numeric($user->id) && $user->id > 0);
meus's avatar
meus committed
547

romanb's avatar
romanb committed
548
        $this->assertTrue($user->getModified() == array());
zYne's avatar
zYne committed
549
        $this->assertTrue($user->state() == Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
550 551

        $user->delete();
zYne's avatar
zYne committed
552
        $this->assertEqual($user->state(), Doctrine_Record::STATE_TCLEAN);
romanb's avatar
romanb committed
553 554
    }

zYne's avatar
zYne committed
555 556
    public function testUpdate() 
    {
romanb's avatar
romanb committed
557 558 559 560 561 562 563 564 565 566
        $user = $this->connection->getTable("User")->find(4);
        $user->set("name","Jack Daniels",true);


        $user->save();
        //print $this->old->name;

        $this->assertEqual($user->getModified(), array());
        $this->assertEqual($user->name, "Jack Daniels");
    }
567

zYne's avatar
zYne committed
568 569
    public function testCopy() 
    {
romanb's avatar
romanb committed
570 571
        $user = $this->connection->getTable("User")->find(4);
        $new = $user->copy();
572

romanb's avatar
romanb committed
573
        $this->assertTrue($new instanceof Doctrine_Record);
zYne's avatar
zYne committed
574
        $this->assertTrue($new->state() == Doctrine_Record::STATE_TDIRTY);
575

576
        $new = $user->copy();
577
        $new->save();
578
        $this->assertEqual($user->name, $new->name);
579 580 581
        $this->assertTrue(is_numeric($new->id) && $new->id > 0);
        $new->refresh();
        $this->assertEqual($user->name, $new->name);
582 583 584
        $this->assertTrue(is_numeric($new->id) && $new->id > 0);
    }

zYne's avatar
zYne committed
585 586
    public function testCopyAndModify() 
    {
587 588 589 590
        $user = $this->connection->getTable("User")->find(4);
        $new = $user->copy();

        $this->assertTrue($new instanceof Doctrine_Record);
zYne's avatar
zYne committed
591
        $this->assertTrue($new->state() == Doctrine_Record::STATE_TDIRTY);
592 593 594 595 596 597 598 599 600 601 602 603

        $new->loginname = 'jackd';

        $this->assertEqual($user->name, $new->name);
        $this->assertEqual($new->loginname, 'jackd');

        $new->save();
        $this->assertTrue(is_numeric($new->id) && $new->id > 0);

        $new->refresh();
        $this->assertEqual($user->name, $new->name);
        $this->assertEqual($new->loginname, 'jackd');
romanb's avatar
romanb committed
604 605
    }

zYne's avatar
zYne committed
606 607
    public function testReferences() 
    {
zYne's avatar
zYne committed
608
        $user = $this->connection->getTable('User')->find(5);
romanb's avatar
romanb committed
609 610 611 612

        $this->assertTrue($user->Phonenumber instanceof Doctrine_Collection);
        $this->assertEqual($user->Phonenumber->count(), 3);

zYne's avatar
zYne committed
613
        $coll = new Doctrine_Collection('Phonenumber');
romanb's avatar
romanb committed
614 615 616 617 618 619 620 621 622 623

        $user->Phonenumber = $coll;
        $this->assertEqual($user->Phonenumber->count(), 0);
        $user->save();

        $user->getTable()->clear();

        $user = $this->objTable->find(5);

        $this->assertEqual($user->Phonenumber->count(), 0);
zYne's avatar
zYne committed
624
        $this->assertEqual(get_class($user->Phonenumber), 'Doctrine_Collection');
romanb's avatar
romanb committed
625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675

        $user->Phonenumber[0]->phonenumber;
        $this->assertEqual($user->Phonenumber->count(), 1);

        // ADDING REFERENCES

        $user->Phonenumber[0]->phonenumber = "123 123";

        $this->assertEqual($user->Phonenumber->count(), 1);
        $user->Phonenumber[1]->phonenumber = "123 123";
        $this->assertEqual($user->Phonenumber->count(), 2);

        $user->save();


        $this->assertEqual($user->Phonenumber->count(), 2);

        unset($user);
        $user = $this->objTable->find(5);
        $this->assertEqual($user->Phonenumber->count(), 2);

        $user->Phonenumber[3]->phonenumber = "123 123";
        $user->save();

        $this->assertEqual($user->Phonenumber->count(), 3);
        unset($user);
        $user = $this->objTable->find(5);
        $this->assertEqual($user->Phonenumber->count(), 3);

        // DELETING REFERENCES

        $user->Phonenumber->delete();

        $this->assertEqual($user->Phonenumber->count(), 0);
        unset($user);
        $user = $this->objTable->find(5);
        $this->assertEqual($user->Phonenumber->count(), 0);

        // ADDING REFERENCES WITH STRING KEYS

        $user->Phonenumber["home"]->phonenumber = "123 123";
        $user->Phonenumber["work"]->phonenumber = "444 444";
        $user->save();

        $this->assertEqual($user->Phonenumber->count(), 2);
        unset($user);
        $user = $this->objTable->find(5);
        $this->assertEqual($user->Phonenumber->count(), 2);

        // REPLACING ONE-TO-MANY REFERENCE
        unset($coll);
zYne's avatar
zYne committed
676
        $coll = new Doctrine_Collection('Phonenumber');
romanb's avatar
romanb committed
677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704
        $coll[0]->phonenumber = "123 123";
        $coll["home"]->phonenumber = "444 444";
        $coll["work"]->phonenumber = "444 444";

        $user->Phonenumber = $coll;
        $user->save();
        $this->assertEqual($user->Phonenumber->count(), 3);

        $user = $this->objTable->find(5);
        //$this->assertEqual($user->Phonenumber->count(), 3);


        // ONE-TO-ONE REFERENCES

        $user->Email->address = "drinker@drinkmore.info";
        $this->assertTrue($user->Email instanceof Email);        
        $this->assertEqual($user->Email->address, "drinker@drinkmore.info");

        $user->save();

        $this->assertTrue($user->Email instanceof Email);
        $this->assertEqual($user->Email->address, "drinker@drinkmore.info");
        $this->assertEqual($user->Email->id, $user->email_id);

        $user = $this->objTable->find(5);

        $this->assertTrue($user->Email instanceof Email);
        $this->assertEqual($user->Email->id, $user->email_id);
zYne's avatar
zYne committed
705
        $this->assertEqual($user->Email->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722
        $this->assertEqual($user->Email->address, "drinker@drinkmore.info");
        $id = $user->Email->id;

        // REPLACING ONE-TO-ONE REFERENCES

        $email = $this->connection->create("Email");
        $email->address = "absolutist@nottodrink.com";
        $user->Email = $email;

        $this->assertTrue($user->Email instanceof Email);
        $this->assertEqual($user->Email->address, "absolutist@nottodrink.com");
        $user->save();
        unset($user);

        $user = $this->objTable->find(5);
        $this->assertTrue($user->Email instanceof Email);
        $this->assertEqual($user->Email->address, "absolutist@nottodrink.com");
meus's avatar
meus committed
723

romanb's avatar
romanb committed
724 725 726 727 728
        $emails = $this->connection->query("FROM Email WHERE Email.id = $id");
        //$this->assertEqual(count($emails),0);

    }

zYne's avatar
zYne committed
729 730
    public function testDeleteReference() 
    {
romanb's avatar
romanb committed
731 732 733 734 735 736
        $user = $this->objTable->find(5);
        $int  = $user->Phonenumber->delete();

        $this->assertTrue($user->Phonenumber->count() == 0);
    }

zYne's avatar
zYne committed
737

zYne's avatar
zYne committed
738 739
    public function testSaveAssociations() 
    {
romanb's avatar
romanb committed
740 741 742 743 744
        $user = $this->objTable->find(5);

        $gf   = $this->connection->getTable("Group");

        $this->assertTrue($user->Group instanceof Doctrine_Collection);
745 746
        $this->assertEqual($user->Group->count(), 1);
        $this->assertEqual($user->Group[0]->id, 3);
romanb's avatar
romanb committed
747 748 749 750 751


        // ADDING ASSOCIATED REFERENCES


752 753 754 755
        $group1 = $gf->find(1);
        $group2 = $gf->find(2);
        $user->Group[1] = $group1;
        $user->Group[2] = $group2;
romanb's avatar
romanb committed
756

757
        $this->assertEqual($user->Group->count(), 3);
romanb's avatar
romanb committed
758 759

        $user->save();
zYne's avatar
zYne committed
760 761
        $coll = $user->Group;

romanb's avatar
romanb committed
762 763 764 765

        // UNSETTING ASSOCIATED REFERENCES
        unset($user);
        $user = $this->objTable->find(5);
766 767 768
        $this->assertEqual($user->Group->count(), 3);
        $this->assertEqual($user->Group[1]->id, 2);
        $this->assertEqual($user->Group[2]->id, 3);
zYne's avatar
zYne committed
769

770
        $user->unlink('Group', array($group1->id, $group2->id));
771
        $this->assertEqual($user->Group->count(), 1);
romanb's avatar
romanb committed
772 773 774 775 776 777

        $user->save();
        unset($user);


        // CHECKING THE PERSISTENCE OF UNSET ASSOCIATED REFERENCES
zYne's avatar
zYne committed
778
        $this->connection->clear();
romanb's avatar
romanb committed
779
        $user = $this->objTable->find(5);
zYne's avatar
zYne committed
780
        $this->assertEqual($user->Group->count(), 1);
781
        $this->assertEqual($user->Group[0]->id, 3);
782
        $this->assertEqual($gf->findAll()->count(), 3);
romanb's avatar
romanb committed
783 784 785


        // REPLACING OLD ASSOCIATED REFERENCE
786
        $user->unlink('Group', 3);  // you MUST first unlink old relationship
787 788
        $user->Group[1] = $group1;
        $user->Group[0] = $group2;
romanb's avatar
romanb committed
789 790
        $user->save();

791
        $user = $this->objTable->find(5);
zYne's avatar
zYne committed
792
        $this->assertEqual($user->Group->count(), 2);
793 794
        $this->assertEqual($user->Group[0]->identifier(), $group1->identifier());
        $this->assertEqual($user->Group[1]->identifier(), $group2->identifier());
romanb's avatar
romanb committed
795

jackbravo's avatar
jackbravo committed
796 797 798 799 800 801 802
        $user->unlink('Group');
        $user->save();
        unset($user);

        $user = $this->objTable->find(5);
        $this->assertEqual($user->Group->count(), 0);

zYne's avatar
zYne committed
803

romanb's avatar
romanb committed
804 805 806 807
        // ACCESSING ASSOCIATION OBJECT PROPERTIES

        $user = new User();
        $this->assertTrue($user->getTable()->getRelation("Groupuser") instanceof Doctrine_Relation_ForeignKey);
zYne's avatar
zYne committed
808

romanb's avatar
romanb committed
809 810
        $this->assertTrue($user->Groupuser instanceof Doctrine_Collection);
        $this->assertTrue($user->Groupuser[0] instanceof Groupuser);
meus's avatar
meus committed
811

romanb's avatar
romanb committed
812 813 814 815 816 817 818
        $user->name = "Jack Daniels";
        $user->Group[0]->name = "Group #1";
        $user->Group[1]->name = "Group #2";
        $t1 = time();
        $t2 = time();
        $user->Groupuser[0]->added = $t1;
        $user->Groupuser[1]->added = $t2;
meus's avatar
meus committed
819

romanb's avatar
romanb committed
820 821
        $this->assertEqual($user->Groupuser[0]->added, $t1);
        $this->assertEqual($user->Groupuser[1]->added, $t2);
meus's avatar
meus committed
822

romanb's avatar
romanb committed
823 824 825 826 827
        $user->save();

        $user->refresh();
        $this->assertEqual($user->Groupuser[0]->added, $t1);
        $this->assertEqual($user->Groupuser[1]->added, $t2);
zYne's avatar
zYne committed
828

romanb's avatar
romanb committed
829 830 831
    }


zYne's avatar
zYne committed
832 833
    public function testCount() 
    {
romanb's avatar
romanb committed
834 835 836 837 838
        $user = $this->connection->getTable("User")->find(4);

        $this->assertTrue(is_integer($user->count()));
    }

zYne's avatar
zYne committed
839 840
    public function testGetReference()
    {
romanb's avatar
romanb committed
841 842 843 844 845 846 847 848
        $user = $this->connection->getTable("User")->find(4);

        $this->assertTrue($user->Email instanceof Doctrine_Record);
        $this->assertTrue($user->Phonenumber instanceof Doctrine_Collection);
        $this->assertTrue($user->Group instanceof Doctrine_Collection);

        $this->assertTrue($user->Phonenumber->count() == 1);
    }
zYne's avatar
zYne committed
849 850
    public function testGetIterator()
    {
romanb's avatar
romanb committed
851 852 853
        $user = $this->connection->getTable("User")->find(4);
        $this->assertTrue($user->getIterator() instanceof ArrayIterator);
    }
meus's avatar
meus committed
854

855 856
    public function testRefreshRelated()
    {
meus's avatar
meus committed
857 858 859 860 861 862 863 864 865 866 867
        $user = $this->connection->getTable("User")->find(4);
        $user->Address[0]->address = "Address #1";
        $user->Address[1]->address = "Address #2";
        $user->save();
        $this->assertEqual(count($user->Address), 2);
        Doctrine_Query::create()->delete()->from('EntityAddress')->where('user_id = ? AND address_id = ?', array($user->id, $user->Address[1]->id))->execute();
        $user->refreshRelated('Address');
        $this->assertEqual(count($user->Address), 1);
        Doctrine_Query::create()->delete()->from('EntityAddress')->where('user_id = ? AND address_id = ?', array($user->id, $user->Address[0]->id))->execute();
        $user->refreshRelated();
        $this->assertEqual(count($user->Address), 0);
868
    }
meus's avatar
meus committed
869

romanb's avatar
romanb committed
870
}