RecordTestCase.php 28.9 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';
romanb's avatar
romanb committed
42 43
        parent::prepareTables();
    }
44

zYne's avatar
zYne committed
45 46
    public function testIssetForPrimaryKey() 
    {
romanb's avatar
romanb committed
47 48 49 50 51 52 53 54 55 56
        $this->assertTrue(isset($this->users[0]->id));
        $this->assertTrue(isset($this->users[0]['id']));
        $this->assertTrue($this->users[0]->contains('id'));

        $user = new User();

        $this->assertFalse(isset($user->id));
        $this->assertFalse(isset($user['id']));
        $this->assertFalse($user->contains('id'));
    }
zYne's avatar
zYne committed
57

zYne's avatar
zYne committed
58 59
    public function testNotNullConstraint() 
    {
romanb's avatar
romanb committed
60 61 62 63 64 65 66 67
        $null = new NotNullTest();

        $null->name = null;

        $null->type = 1;
        try {
            $null->save();
            $this->fail();
zYne's avatar
zYne committed
68
        } catch(Exception $e) {
romanb's avatar
romanb committed
69 70 71 72 73 74
            $this->pass();
            $this->connection->rollback();
        }

    }

zYne's avatar
zYne committed
75 76
    public function testGzipType() 
    {
romanb's avatar
romanb committed
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
        $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");
        
        $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
99 100
    public function testDefaultValues() 
    {
romanb's avatar
romanb committed
101 102 103 104 105 106 107 108 109 110 111

        $test = new FieldNameTest;
        
        $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
112 113
    public function testToArray() 
    {
romanb's avatar
romanb committed
114 115 116 117 118 119
        $user = new User();
        
        $a = $user->toArray();

        $this->assertTrue(is_array($a));
        $this->assertTrue(array_key_exists('name', $a));
zYne's avatar
zYne committed
120 121
        

romanb's avatar
romanb committed
122 123 124
        $this->assertEqual($a['name'], null);
        $this->assertTrue(array_key_exists('id', $a));
        $this->assertEqual($a['id'], null);
zYne's avatar
zYne committed
125

romanb's avatar
romanb committed
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
        $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']));
        
        $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
159 160
    public function testReferences2() 
    {
romanb's avatar
romanb committed
161 162
        $user = new User();
        $user->Phonenumber[0]->phonenumber = '123 123';
zYne's avatar
zYne committed
163
        $ref = $user->Phonenumber[0]->entity_id;
romanb's avatar
romanb committed
164

zYne's avatar
zYne committed
165
        $this->assertEqual($ref->getOid(), $user->getOid());
romanb's avatar
romanb committed
166
    }
zYne's avatar
zYne committed
167

zYne's avatar
zYne committed
168 169
    public function testUpdatingWithNullValue() 
    {
romanb's avatar
romanb committed
170 171 172 173 174 175 176
        $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
177

romanb's avatar
romanb committed
178 179 180 181 182 183
        $this->connection->clear();

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

    }
zYne's avatar
zYne committed
184

zYne's avatar
zYne committed
185 186
    public function testSerialize() 
    {
romanb's avatar
romanb committed
187 188 189 190 191
        $user = $this->connection->getTable("User")->find(4);
        $str = serialize($user);
        $user2 = unserialize($str);

        $this->assertTrue($user2 instanceof User);
192
        $this->assertEqual($user2->identifier(), $user->identifier());
romanb's avatar
romanb committed
193 194
    }

zYne's avatar
zYne committed
195 196
    public function testCallback() 
    {
romanb's avatar
romanb committed
197 198 199 200 201 202 203
        $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
204

romanb's avatar
romanb committed
205 206 207
    public function testCompositePK() {
        $record = new EntityReference();
        $this->assertEqual($record->getTable()->getIdentifier(), array("entity1","entity2"));
zYne's avatar
zYne committed
208
        $this->assertEqual($record->getTable()->getIdentifierType(), Doctrine::IDENTIFIER_COMPOSITE);
209
        $this->assertEqual($record->identifier(), array("entity1" => null, "entity2" => null));
zYne's avatar
zYne committed
210
        $this->assertEqual($record->state(), Doctrine_Record::STATE_TCLEAN);
romanb's avatar
romanb committed
211 212 213 214 215

        $record->entity1 = 3;
        $record->entity2 = 4;
        $this->assertEqual($record->entity2, 4);
        $this->assertEqual($record->entity1, 3);
zYne's avatar
zYne committed
216
        $this->assertEqual($record->state(), Doctrine_Record::STATE_TDIRTY);
217
        $this->assertEqual($record->identifier(), array("entity1" => null, "entity2" => null));
romanb's avatar
romanb committed
218 219

        $record->save();
zYne's avatar
zYne committed
220
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
221 222
        $this->assertEqual($record->entity2, 4);
        $this->assertEqual($record->entity1, 3);
223
        $this->assertEqual($record->identifier(), array("entity1" => 3, "entity2" => 4));
romanb's avatar
romanb committed
224

225
        $record = $record->getTable()->find($record->identifier());
zYne's avatar
zYne committed
226
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
227 228 229
        $this->assertEqual($record->entity2, 4);
        $this->assertEqual($record->entity1, 3);

230
        $this->assertEqual($record->identifier(), array("entity1" => 3, "entity2" => 4));
romanb's avatar
romanb committed
231 232 233
        
        $record->entity2 = 5;
        $record->entity1 = 2;
zYne's avatar
zYne committed
234
        $this->assertEqual($record->state(), Doctrine_Record::STATE_DIRTY);
romanb's avatar
romanb committed
235 236
        $this->assertEqual($record->entity2, 5);
        $this->assertEqual($record->entity1, 2);
237
        $this->assertEqual($record->identifier(), array("entity1" => 3, "entity2" => 4));
romanb's avatar
romanb committed
238 239

        $record->save();
zYne's avatar
zYne committed
240
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
241 242
        $this->assertEqual($record->entity2, 5);
        $this->assertEqual($record->entity1, 2);
243 244
        $this->assertEqual($record->identifier(), array("entity1" => 2, "entity2" => 5));
        $record = $record->getTable()->find($record->identifier());
romanb's avatar
romanb committed
245

zYne's avatar
zYne committed
246
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
247 248
        $this->assertEqual($record->entity2, 5);
        $this->assertEqual($record->entity1, 2);
249
        $this->assertEqual($record->identifier(), array("entity1" => 2, "entity2" => 5));
romanb's avatar
romanb committed
250 251
        
        $record->refresh();
zYne's avatar
zYne committed
252
        $this->assertEqual($record->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
253 254
        $this->assertEqual($record->entity2, 5);
        $this->assertEqual($record->entity1, 2);
255
        $this->assertEqual($record->identifier(), array("entity1" => 2, "entity2" => 5));
romanb's avatar
romanb committed
256 257 258 259 260 261

        $record = new EntityReference();
        $record->entity2 = 6;
        $record->entity1 = 2;
        $record->save();
        
zYne's avatar
zYne committed
262
        $coll = $this->connection->query("FROM EntityReference");
romanb's avatar
romanb committed
263
        $this->assertTrue($coll[0] instanceof EntityReference);
zYne's avatar
zYne committed
264
        $this->assertEqual($coll[0]->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
265
        $this->assertTrue($coll[1] instanceof EntityReference);
zYne's avatar
zYne committed
266
        $this->assertEqual($coll[1]->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
267

zYne's avatar
zYne committed
268
        $coll = $this->connection->query("FROM EntityReference WHERE EntityReference.entity2 = 5");
romanb's avatar
romanb committed
269 270 271
        $this->assertEqual($coll->count(), 1);
    }

zYne's avatar
zYne committed
272 273
    public function testManyToManyTreeStructure() 
    {
romanb's avatar
romanb committed
274 275 276 277 278 279 280 281 282 283 284 285 286 287

        $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
288
        $this->assertEqual($task->state(), Doctrine_Record::STATE_TCLEAN);
romanb's avatar
romanb committed
289 290
        $this->assertTrue($task->Subtask[0] instanceof Task);

zYne's avatar
zYne committed
291
        //$this->assertEqual($task->Subtask[0]->state(), Doctrine_Record::STATE_TDIRTY);
romanb's avatar
romanb committed
292
        $this->assertTrue($task->ResourceAlias[0] instanceof Resource);
zYne's avatar
zYne committed
293
        $this->assertEqual($task->ResourceAlias[0]->state(), Doctrine_Record::STATE_TCLEAN);
romanb's avatar
romanb committed
294 295 296 297 298 299 300 301 302 303 304 305

        $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();

306
        $task = $task->getTable()->find($task->identifier());
romanb's avatar
romanb committed
307 308 309 310 311 312 313 314

        $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
315 316
    public function testOne2OneForeign() 
    {
romanb's avatar
romanb committed
317 318 319 320 321 322

        $user = new User();
        $user->name = "Richard Linklater";
        $account = $user->Account;
        $account->amount = 1000;
        $this->assertTrue($account instanceof Account);
zYne's avatar
zYne committed
323
        $this->assertEqual($account->state(), Doctrine_Record::STATE_TDIRTY);
zYne's avatar
zYne committed
324
        $this->assertEqual($account->entity_id->getOid(), $user->getOid());
romanb's avatar
romanb committed
325 326 327 328 329 330 331 332
        $this->assertEqual($account->amount, 1000);
        $this->assertEqual($user->name, "Richard Linklater");

        $user->save();

        $user->refresh();
        $account = $user->Account;
        $this->assertTrue($account instanceof Account);
zYne's avatar
zYne committed
333
        $this->assertEqual($account->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
334 335 336 337 338 339 340 341 342 343 344 345
        $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();
zYne's avatar
zYne committed
346
        $this->assertEqual($user->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
347 348 349 350 351 352 353 354
        $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);
zYne's avatar
zYne committed
355
        $this->assertEqual($user->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
356 357 358 359 360


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

zYne's avatar
zYne committed
361
        $this->assertEqual($account->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
362 363 364 365 366 367 368 369
        $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
370 371
    public function testGet()
    {
romanb's avatar
romanb committed
372 373 374 375 376 377
        $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();
378
        $id = $user->identifier();
romanb's avatar
romanb committed
379 380 381 382 383 384 385 386
        $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
387 388
    public function testNewOperator() 
    {
romanb's avatar
romanb committed
389 390 391 392
        $table = $this->connection->getTable("User");

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

        $this->assertTrue($user->name,"John Locke");
zYne's avatar
zYne committed
397
        $this->assertTrue($user->state() == Doctrine_Record::STATE_TDIRTY);
romanb's avatar
romanb committed
398
        $user->save();
zYne's avatar
zYne committed
399
        $this->assertTrue($user->state() == Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
400 401 402
        $this->assertTrue($user->name,"John Locke");
    }

zYne's avatar
zYne committed
403 404
    public function testTreeStructure() 
    {
romanb's avatar
romanb committed
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431
        $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");
        


        $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
432
        $elements = $this->connection->query("FROM Element");
romanb's avatar
romanb committed
433 434 435 436 437 438 439 440 441 442 443
        $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);
444
        $this->assertEqual($e->Child[0]->Parent->identifier(), $e->identifier());
romanb's avatar
romanb committed
445 446 447 448 449 450 451 452 453 454


        $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
455 456
    public function testUniqueKeyComponent() 
    {
romanb's avatar
romanb committed
457
        $e = new Error();
zYne's avatar
zYne committed
458
        $e->message  = 'user error';
romanb's avatar
romanb committed
459 460 461 462 463 464
        $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
465
        $this->assertEqual($e->message, 'user error');
romanb's avatar
romanb committed
466 467

        $e2 = new Error();
zYne's avatar
zYne committed
468
        $e2->message  = 'user error2';
romanb's avatar
romanb committed
469 470 471 472 473
        $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
474
        $this->assertEqual($e2->message, 'user error2');
romanb's avatar
romanb committed
475 476
        

zYne's avatar
zYne committed
477
        $fk = $e->getTable()->getRelation('Description');
romanb's avatar
romanb committed
478
        $this->assertTrue($fk instanceof Doctrine_Relation_ForeignKey);
zYne's avatar
zYne committed
479 480
        $this->assertEqual($fk->getLocal(),'file_md5');
        $this->assertEqual($fk->getForeign(),'file_md5');
romanb's avatar
romanb committed
481 482
        $this->assertTrue($fk->getTable() instanceof Doctrine_Table);

zYne's avatar
zYne committed
483 484 485 486
        $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
487 488
        $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
489

romanb's avatar
romanb committed
490 491 492 493 494 495 496
        $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();
        
zYne's avatar
zYne committed
497
        $coll = $this->connection->query('FROM Error');
romanb's avatar
romanb committed
498 499 500 501 502
        $e = $coll[0];


        $this->assertEqual($e->code,1);
        $this->assertEqual($e->file_md5, md5(0));
zYne's avatar
zYne committed
503
        $this->assertEqual($e->message, 'user error');
romanb's avatar
romanb committed
504 505 506 507 508

        $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
509 510
        $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
511 512 513 514

        // UPDATING
         
        $e->code = 2;
zYne's avatar
zYne committed
515 516 517
        $e->message = 'changed message';
        $e->Description[0]->description = '1st changed description';
        $e->Description[1]->description = '2nd changed description';
romanb's avatar
romanb committed
518 519 520


        $this->assertEqual($e->code,2);
zYne's avatar
zYne committed
521 522 523
        $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
524 525 526

        $e->save();
        $this->assertEqual($e->code,2);
zYne's avatar
zYne committed
527 528 529
        $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
530 531
    }

zYne's avatar
zYne committed
532 533
    public function testInsert() 
    {
romanb's avatar
romanb committed
534 535 536 537 538 539 540
        $user = new User();
        $user->name = "John Locke";
        $user->save();
        
        $this->assertTrue(is_numeric($user->id) && $user->id > 0);
        
        $this->assertTrue($user->getModified() == array());
zYne's avatar
zYne committed
541
        $this->assertTrue($user->state() == Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
542 543

        $user->delete();
zYne's avatar
zYne committed
544
        $this->assertEqual($user->state(), Doctrine_Record::STATE_TCLEAN);
romanb's avatar
romanb committed
545 546
    }

zYne's avatar
zYne committed
547 548
    public function testUpdate() 
    {
romanb's avatar
romanb committed
549 550 551 552 553 554 555 556 557 558
        $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");
    }
559

zYne's avatar
zYne committed
560 561
    public function testCopy() 
    {
romanb's avatar
romanb committed
562 563
        $user = $this->connection->getTable("User")->find(4);
        $new = $user->copy();
564

romanb's avatar
romanb committed
565
        $this->assertTrue($new instanceof Doctrine_Record);
zYne's avatar
zYne committed
566
        $this->assertTrue($new->state() == Doctrine_Record::STATE_TDIRTY);
567

568
        $new = $user->copy();
569
        $new->save();
570
        $this->assertEqual($user->name, $new->name);
571 572 573
        $this->assertTrue(is_numeric($new->id) && $new->id > 0);
        $new->refresh();
        $this->assertEqual($user->name, $new->name);
574 575 576
        $this->assertTrue(is_numeric($new->id) && $new->id > 0);
    }

zYne's avatar
zYne committed
577 578
    public function testCopyAndModify() 
    {
579 580 581 582
        $user = $this->connection->getTable("User")->find(4);
        $new = $user->copy();

        $this->assertTrue($new instanceof Doctrine_Record);
zYne's avatar
zYne committed
583
        $this->assertTrue($new->state() == Doctrine_Record::STATE_TDIRTY);
584 585 586 587 588 589 590 591 592 593 594 595

        $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
596 597
    }

zYne's avatar
zYne committed
598 599
    public function testReferences() 
    {
zYne's avatar
zYne committed
600
        $user = $this->connection->getTable('User')->find(5);
romanb's avatar
romanb committed
601 602 603 604

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

zYne's avatar
zYne committed
605
        $coll = new Doctrine_Collection('Phonenumber');
romanb's avatar
romanb committed
606 607 608 609 610 611 612 613 614 615

        $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
616
        $this->assertEqual(get_class($user->Phonenumber), 'Doctrine_Collection');
romanb's avatar
romanb committed
617 618 619 620 621 622 623 624 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

        $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
668
        $coll = new Doctrine_Collection('Phonenumber');
romanb's avatar
romanb committed
669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696
        $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
697
        $this->assertEqual($user->Email->state(), Doctrine_Record::STATE_CLEAN);
romanb's avatar
romanb committed
698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720
        $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");
        
        $emails = $this->connection->query("FROM Email WHERE Email.id = $id");
        //$this->assertEqual(count($emails),0);

    }

zYne's avatar
zYne committed
721 722
    public function testDeleteReference() 
    {
romanb's avatar
romanb committed
723 724 725 726 727 728
        $user = $this->objTable->find(5);
        $int  = $user->Phonenumber->delete();

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

zYne's avatar
zYne committed
729

zYne's avatar
zYne committed
730 731
    public function testSaveAssociations() 
    {
romanb's avatar
romanb committed
732 733 734 735 736 737 738 739 740 741 742 743
        $user = $this->objTable->find(5);

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

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


        // ADDING ASSOCIATED REFERENCES


        $record = $gf->find(1);
        $record2 = $gf->find(2);
zYne's avatar
zYne committed
744 745
        $user->Group[1] = $record;
        $user->Group[2] = $record2;
romanb's avatar
romanb committed
746

zYne's avatar
zYne committed
747
        $this->assertTrue($user->Group->count() == 3);
romanb's avatar
romanb committed
748 749

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

romanb's avatar
romanb committed
752 753 754 755 756 757

        // UNSETTING ASSOCIATED REFERENCES


        unset($user);
        $user = $this->objTable->find(5);
zYne's avatar
zYne committed
758 759 760
        $this->assertTrue($user->Group->count() == 3);

        unset($user->Group[1]);
romanb's avatar
romanb committed
761 762
        $this->assertTrue($user->Group->count() == 2);

zYne's avatar
zYne committed
763
        unset($user->Group[2]);
romanb's avatar
romanb committed
764 765
        $this->assertTrue($user->Group->count() == 1);

zYne's avatar
zYne committed
766 767


romanb's avatar
romanb committed
768 769

        $user->save();
zYne's avatar
zYne committed
770
        $this->assertTrue($user->Group->count() == 1);
romanb's avatar
romanb committed
771 772 773 774 775
        unset($user);


        // CHECKING THE PERSISTENCE OF UNSET ASSOCIATED REFERENCES

zYne's avatar
zYne committed
776
        $this->connection->clear();
romanb's avatar
romanb committed
777
        $user = $this->objTable->find(5);
zYne's avatar
zYne committed
778
        $this->assertEqual($user->Group->count(), 1);
romanb's avatar
romanb committed
779 780 781 782 783


        // REPLACING OLD ASSOCIATED REFERENCE


zYne's avatar
zYne committed
784
        $user->Group[1] = $record;
romanb's avatar
romanb committed
785 786
        $user->save();

zYne's avatar
zYne committed
787
        $user->Group[1] = $record2;
romanb's avatar
romanb committed
788 789
        $user->save();

zYne's avatar
zYne committed
790
        $this->assertEqual($user->Group->count(), 2);
791 792
        $this->assertEqual($user->Group[1]->identifier(), $record2->identifier());
        $this->assertFalse($user->Group[1]->identifier() == $record->identifier());
romanb's avatar
romanb committed
793 794 795


        $user->Group[0] = $record;
zYne's avatar
zYne committed
796 797 798 799

        $record = $gf->find(3);
        $user->Group[1] = $record;

romanb's avatar
romanb committed
800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818

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



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

        // ACCESSING ASSOCIATION OBJECT PROPERTIES

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

romanb's avatar
romanb committed
820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838
        $this->assertTrue($user->Groupuser instanceof Doctrine_Collection);
        $this->assertTrue($user->Groupuser[0] instanceof Groupuser);
        
        $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;
        
        $this->assertEqual($user->Groupuser[0]->added, $t1);
        $this->assertEqual($user->Groupuser[1]->added, $t2);
        
        $user->save();

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

romanb's avatar
romanb committed
840 841 842
    }


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

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

zYne's avatar
zYne committed
850 851
    public function testGetReference()
    {
romanb's avatar
romanb committed
852 853 854 855 856 857 858 859
        $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
860 861
    public function testGetIterator()
    {
romanb's avatar
romanb committed
862 863 864 865 866
        $user = $this->connection->getTable("User")->find(4);
        $this->assertTrue($user->getIterator() instanceof ArrayIterator);
    }
}
?>