ConnectionTestCase.php 15.5 KB
Newer Older
doctrine's avatar
doctrine committed
1
<?php
2
require_once("UnitTestCase.php");
zYne's avatar
zYne committed
3
class Doctrine_ConnectionTestCase extends Doctrine_UnitTestCase {
doctrine's avatar
doctrine committed
4

5
    public function testbuildFlushTree() {
doctrine's avatar
doctrine committed
6
        $correct = array("Task","ResourceType","Resource","Assignment","ResourceReference");
doctrine's avatar
doctrine committed
7

8 9 10 11 12 13 14 15 16 17
        // new model might switch some many-to-many components (NO HARM!)
        
        $correct2 = array (
              0 => 'Resource',
              1 => 'Task',
              2 => 'ResourceType',
              3 => 'Assignment',
              4 => 'ResourceReference',
            );

doctrine's avatar
doctrine committed
18 19
        $task = new Task();

20
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Task"));
doctrine's avatar
doctrine committed
21 22
        $this->assertEqual($tree,array("Resource","Task","Assignment"));

23
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Task","Resource"));
doctrine's avatar
doctrine committed
24 25
        $this->assertEqual($tree,$correct);

26
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Task","Assignment","Resource"));
doctrine's avatar
doctrine committed
27 28
        $this->assertEqual($tree,$correct);

29
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Assignment","Task","Resource"));
30 31

        $this->assertEqual($tree,$correct2);
doctrine's avatar
doctrine committed
32 33 34 35


        $correct = array("Forum_Category","Forum_Board","Forum_Thread");

36
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board"));
doctrine's avatar
doctrine committed
37
        $this->assertEqual($tree, $correct);
38
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Category","Forum_Board"));
doctrine's avatar
doctrine committed
39 40 41 42
        $this->assertEqual($tree, $correct);

        $correct = array("Forum_Category","Forum_Board","Forum_Thread","Forum_Entry");

43
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Entry","Forum_Board"));
doctrine's avatar
doctrine committed
44
        $this->assertEqual($tree, $correct);
45
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board","Forum_Entry"));
doctrine's avatar
doctrine committed
46 47
        $this->assertEqual($tree, $correct);

48
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Thread","Forum_Board"));
doctrine's avatar
doctrine committed
49
        $this->assertEqual($tree, $correct);
50
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board","Forum_Thread"));
doctrine's avatar
doctrine committed
51 52
        $this->assertEqual($tree, $correct);

53
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board","Forum_Thread","Forum_Entry"));
doctrine's avatar
doctrine committed
54
        $this->assertEqual($tree, $correct);
55
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board","Forum_Entry","Forum_Thread"));
doctrine's avatar
doctrine committed
56 57
        $this->assertEqual($tree, $correct);

58
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Entry","Forum_Board","Forum_Thread"));
doctrine's avatar
doctrine committed
59
        $this->assertEqual($tree, $correct);
60
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Entry","Forum_Thread","Forum_Board"));
doctrine's avatar
doctrine committed
61 62
        $this->assertEqual($tree, $correct);

63
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Thread","Forum_Board","Forum_Entry"));
doctrine's avatar
doctrine committed
64
        $this->assertEqual($tree, $correct);
65
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Thread","Forum_Entry","Forum_Board"));
doctrine's avatar
doctrine committed
66 67 68 69
        $this->assertEqual($tree, $correct);


        $this->assertEqual($tree, $correct);
70
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board","Forum_Thread","Forum_Category"));
doctrine's avatar
doctrine committed
71
        $this->assertEqual($tree, $correct);
72
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Category","Forum_Thread","Forum_Board"));
doctrine's avatar
doctrine committed
73
        $this->assertEqual($tree, $correct);
74
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Thread","Forum_Board","Forum_Category"));
doctrine's avatar
doctrine committed
75 76
        $this->assertEqual($tree, $correct);

77
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board","Forum_Thread","Forum_Category","Forum_Entry"));
doctrine's avatar
doctrine committed
78
        $this->assertEqual($tree, $correct);
79
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board","Forum_Thread","Forum_Entry","Forum_Category"));
doctrine's avatar
doctrine committed
80
        $this->assertEqual($tree, $correct);
81
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Board","Forum_Category","Forum_Thread","Forum_Entry"));
doctrine's avatar
doctrine committed
82 83
        $this->assertEqual($tree, $correct);

84
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Entry","Forum_Thread","Forum_Board","Forum_Category"));
doctrine's avatar
doctrine committed
85
        $this->assertEqual($tree, $correct);
86
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Entry","Forum_Thread","Forum_Category","Forum_Board"));
doctrine's avatar
doctrine committed
87
        $this->assertEqual($tree, $correct);
88
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Entry","Forum_Category","Forum_Board","Forum_Thread"));
doctrine's avatar
doctrine committed
89 90
        $this->assertEqual($tree, $correct);

91
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Thread","Forum_Category","Forum_Board","Forum_Entry"));
doctrine's avatar
doctrine committed
92
        $this->assertEqual($tree, $correct);
93
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Thread","Forum_Entry","Forum_Category","Forum_Board"));
doctrine's avatar
doctrine committed
94
        $this->assertEqual($tree, $correct);
95
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Thread","Forum_Board","Forum_Entry","Forum_Category"));
doctrine's avatar
doctrine committed
96 97
        $this->assertEqual($tree, $correct);

98
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Category","Forum_Entry","Forum_Board","Forum_Thread"));
doctrine's avatar
doctrine committed
99
        $this->assertEqual($tree, $correct);
100
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Category","Forum_Thread","Forum_Entry","Forum_Board"));
doctrine's avatar
doctrine committed
101
        $this->assertEqual($tree, $correct);
102
        $tree = $this->connection->getUnitOfWork()->buildFlushTree(array("Forum_Category","Forum_Board","Forum_Thread","Forum_Entry"));
doctrine's avatar
doctrine committed
103
        $this->assertEqual($tree, $correct);
104

doctrine's avatar
doctrine committed
105
    }
doctrine's avatar
doctrine committed
106

107 108 109 110 111
    public function testBulkInsert() {
        $u1 = new User();
        $u1->name = "Jean Reno";
        $u1->save();

112
        $id = $u1->obtainIdentifier();
113 114 115
        $u1->delete();

    }
116

doctrine's avatar
doctrine committed
117
    public function testFlush() {
zYne's avatar
zYne committed
118
        $user = $this->connection->getTable("User")->find(4);
119
        $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id));
doctrine's avatar
doctrine committed
120

zYne's avatar
zYne committed
121 122 123
        $user    = $this->connection->create("Email");
        $user    = $this->connection->create("User");
        $record  = $this->connection->create("Phonenumber");
doctrine's avatar
doctrine committed
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142

        $user->Email->address = "example@drinkmore.info";
        $this->assertTrue($user->email_id instanceof Email);

        $user->name = "Example user";
        $user->Group[0]->name = "Example group 1";
        $user->Group[1]->name = "Example group 2";

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

        $user->Phonenumber[1]->phonenumber = "321 2132";
        $user->Phonenumber[2]->phonenumber = "123 123";
        $user->Phonenumber[3]->phonenumber = "321 2132";



        $this->assertTrue($user->Phonenumber[0]->entity_id instanceof User);
        $this->assertTrue($user->Phonenumber[2]->entity_id instanceof User);

zYne's avatar
zYne committed
143
        $this->connection->flush();
doctrine's avatar
doctrine committed
144

doctrine's avatar
doctrine committed
145
        $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id));
doctrine's avatar
doctrine committed
146 147

        $this->assertEqual(count($user->Group), 2);
doctrine's avatar
doctrine committed
148
        $user2 = $user;
doctrine's avatar
doctrine committed
149

150
        $user = $this->objTable->find($user->id);
doctrine's avatar
doctrine committed
151

152
        $this->assertEqual($user->id, $user2->id);
doctrine's avatar
doctrine committed
153

154
        $this->assertTrue(is_numeric($user->id));
doctrine's avatar
doctrine committed
155
        $this->assertTrue(is_numeric($user->email_id));
doctrine's avatar
doctrine committed
156

doctrine's avatar
doctrine committed
157
        $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id));
doctrine's avatar
doctrine committed
158 159
        $this->assertTrue($user->Phonenumber->count(), 4);
        $this->assertEqual($user->Group->count(), 2);
doctrine's avatar
doctrine committed
160 161
        
        $this->assertTrue($this->dbh instanceof Doctrine_DB);
doctrine's avatar
doctrine committed
162 163 164

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

zYne's avatar
zYne committed
165
        $pf   = $this->connection->getTable("Phonenumber");
doctrine's avatar
doctrine committed
166 167 168 169 170 171 172 173 174

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

        $coll = new Doctrine_Collection($pf);

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

zYne's avatar
zYne committed
175
        $this->connection->flush();
doctrine's avatar
doctrine committed
176 177 178 179 180 181 182 183
        unset($user);
        $user = $this->objTable->find(5);

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

        // ADDING REFERENCES

        $user->Phonenumber[0]->phonenumber = "123 123";
doctrine's avatar
doctrine committed
184
        $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id));
doctrine's avatar
doctrine committed
185 186

        $user->Phonenumber[1]->phonenumber = "123 123";
zYne's avatar
zYne committed
187
        $this->connection->flush();
doctrine's avatar
doctrine committed
188 189


190
        $this->assertEqual($user->Phonenumber->count(), 2);
doctrine's avatar
doctrine committed
191 192 193 194 195 196

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

        $user->Phonenumber[3]->phonenumber = "123 123";
zYne's avatar
zYne committed
197
        $this->connection->flush();
doctrine's avatar
doctrine committed
198

199
        $this->assertEqual($user->Phonenumber->count(), 3);
doctrine's avatar
doctrine committed
200 201
        unset($user);
        $user = $this->objTable->find(5);
202
        $this->assertEqual($user->Phonenumber->count(), 3);
doctrine's avatar
doctrine committed
203 204 205 206 207

        // DELETING REFERENCES

        $user->Phonenumber->delete();

208
        $this->assertEqual($user->Phonenumber->count(), 0);
doctrine's avatar
doctrine committed
209 210
        unset($user);
        $user = $this->objTable->find(5);
211
        $this->assertEqual($user->Phonenumber->count(), 0);
doctrine's avatar
doctrine committed
212 213 214 215 216 217 218
        
        // ADDING REFERENCES WITH STRING KEYS

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

        $this->assertEqual($user->Phonenumber->count(), 2);
zYne's avatar
zYne committed
219
        $this->connection->flush();
doctrine's avatar
doctrine committed
220

221
        $this->assertEqual($user->Phonenumber->count(), 2);
doctrine's avatar
doctrine committed
222 223
        unset($user);
        $user = $this->objTable->find(5);
224
        $this->assertEqual($user->Phonenumber->count(), 2);
doctrine's avatar
doctrine committed
225 226 227 228 229 230 231 232 233 234 235 236 237

        // REPLACING ONE-TO-MANY REFERENCE

        unset($coll);
        $coll = new Doctrine_Collection($pf);
        $coll[0]->phonenumber = "123 123";
        $coll["home"]->phonenumber = "444 444";
        $coll["work"]->phonenumber = "444 444";




        $user->Phonenumber = $coll;
zYne's avatar
zYne committed
238
        $this->connection->flush();
doctrine's avatar
doctrine committed
239 240 241 242 243 244 245 246 247
        $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);
zYne's avatar
zYne committed
248
        $this->connection->flush();
doctrine's avatar
doctrine committed
249 250 251
        $this->assertTrue($user->Email instanceof Email);
        $user = $this->objTable->find(5);
        $this->assertEqual($user->Email->address, "drinker@drinkmore.info");
252
        $id = $user->Email->id;
doctrine's avatar
doctrine committed
253 254 255

        // REPLACING ONE-TO-ONE REFERENCES

zYne's avatar
zYne committed
256
        $email = $this->connection->create("Email");
doctrine's avatar
doctrine committed
257 258 259 260 261
        $email->address = "absolutist@nottodrink.com";
        $user->Email = $email;

        $this->assertTrue($user->Email instanceof Email);
        $this->assertEqual($user->Email->address, "absolutist@nottodrink.com");
zYne's avatar
zYne committed
262
        $this->connection->flush();
doctrine's avatar
doctrine committed
263 264 265 266 267 268
        unset($user);

        $user = $this->objTable->find(5);
        $this->assertTrue($user->Email instanceof Email);
        $this->assertEqual($user->Email->address, "absolutist@nottodrink.com");
        
zYne's avatar
zYne committed
269
        $emails = $this->connection->query("FROM Email WHERE Email.id = $id");
doctrine's avatar
doctrine committed
270
        //$this->assertEqual(count($emails),0);
doctrine's avatar
doctrine committed
271 272 273 274 275


    }

    public function testGetManager() {
zYne's avatar
zYne committed
276
        $this->assertEqual($this->connection->getManager(),$this->manager);
doctrine's avatar
doctrine committed
277 278
    }
    public function testQuery() {
zYne's avatar
zYne committed
279
        $this->assertTrue($this->connection->query("FROM User") instanceof Doctrine_Collection);
doctrine's avatar
doctrine committed
280 281 282
    }

    public function testDelete() {
zYne's avatar
zYne committed
283 284
        $user = $this->connection->create("User");
        $this->connection->delete($user);
doctrine's avatar
doctrine committed
285 286 287
        $this->assertEqual($user->getState(),Doctrine_Record::STATE_TCLEAN);
    }
    public function testGetTable() {
zYne's avatar
zYne committed
288
        $table = $this->connection->getTable("Group");
doctrine's avatar
doctrine committed
289 290
        $this->assertTrue($table instanceof Doctrine_Table);
        try {
zYne's avatar
zYne committed
291
            $table = $this->connection->getTable("Unknown");
doctrine's avatar
doctrine committed
292 293 294 295 296 297
            $f = false;
        } catch(Doctrine_Exception $e) {
            $f = true;
        }
        $this->assertTrue($f);

zYne's avatar
zYne committed
298
        $table = $this->connection->getTable("User");
doctrine's avatar
doctrine committed
299 300 301 302
        $this->assertTrue($table instanceof UserTable);

    }
    public function testCreate() {
zYne's avatar
zYne committed
303
        $email = $this->connection->create("Email");
doctrine's avatar
doctrine committed
304 305 306
        $this->assertTrue($email instanceof Email);
    }
    public function testGetDBH() {
zYne's avatar
zYne committed
307
        $this->assertTrue($this->connection->getDBH() instanceof PDO);
doctrine's avatar
doctrine committed
308 309
    }
    public function testCount() {
zYne's avatar
zYne committed
310
        $this->assertTrue(is_integer(count($this->connection)));
doctrine's avatar
doctrine committed
311 312
    }
    public function testGetIterator() {
zYne's avatar
zYne committed
313
        $this->assertTrue($this->connection->getIterator() instanceof ArrayIterator);
doctrine's avatar
doctrine committed
314 315
    }
    public function testGetState() {
316
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_OPEN);
317
        $this->assertEqual(Doctrine_Lib::getConnectionStateAsString($this->connection->getTransaction()->getState()), "open");
doctrine's avatar
doctrine committed
318 319
    }
    public function testGetTables() {
zYne's avatar
zYne committed
320
        $this->assertTrue(is_array($this->connection->getTables()));
doctrine's avatar
doctrine committed
321 322 323 324
    }

    public function testTransactions() {

zYne's avatar
zYne committed
325
        $this->connection->beginTransaction();
326
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_ACTIVE);
zYne's avatar
zYne committed
327
        $this->connection->commit();
328
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_OPEN);
doctrine's avatar
doctrine committed
329

zYne's avatar
zYne committed
330
        $this->connection->beginTransaction();
doctrine's avatar
doctrine committed
331 332 333 334
        
        $user = $this->objTable->find(6);
        
        $user->name = "Jack Daniels";
zYne's avatar
zYne committed
335 336
        $this->connection->flush();
        $this->connection->commit();
doctrine's avatar
doctrine committed
337 338 339 340 341 342 343

        $user = $this->objTable->find(6);
        $this->assertEqual($user->name, "Jack Daniels");

    }

    public function testRollback() {
zYne's avatar
zYne committed
344 345
        $this->connection->beginTransaction();
        $this->assertEqual($this->connection->getTransactionLevel(),1);
346
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_ACTIVE);
zYne's avatar
zYne committed
347
        $this->connection->rollback();
348
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_OPEN);
zYne's avatar
zYne committed
349
        $this->assertEqual($this->connection->getTransactionLevel(),0);
doctrine's avatar
doctrine committed
350 351
    }
    public function testNestedTransactions() {
zYne's avatar
zYne committed
352 353 354
        $this->assertEqual($this->connection->getTransactionLevel(),0);
        $this->connection->beginTransaction();
        $this->assertEqual($this->connection->getTransactionLevel(),1);
355
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_ACTIVE);
zYne's avatar
zYne committed
356
        $this->connection->beginTransaction();
357
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_BUSY);
zYne's avatar
zYne committed
358 359
        $this->assertEqual($this->connection->getTransactionLevel(),2);
        $this->connection->commit();
360
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_ACTIVE);
zYne's avatar
zYne committed
361 362
        $this->assertEqual($this->connection->getTransactionLevel(),1);
        $this->connection->commit();
363
        $this->assertEqual($this->connection->getTransaction()->getState(),Doctrine_Connection_Transaction::STATE_OPEN);
zYne's avatar
zYne committed
364
        $this->assertEqual($this->connection->getTransactionLevel(),0);
doctrine's avatar
doctrine committed
365 366 367
    }
}
?>