ConnectionTestCase.php 11.4 KB
Newer Older
doctrine's avatar
doctrine 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 33 34
/*
 *  $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_Connection_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$
 */
class Doctrine_Connection_TestCase extends Doctrine_UnitTestCase {
   
35 36 37 38 39 40 41 42 43 44 45 46 47 48
    public function testUnknownModule() {
        try {
            $this->connection->unknown;
            $this->fail();
        } catch(Doctrine_Connection_Exception $e) {
            $this->pass();
        }
    }
    public function testGetModule() {
        $this->assertTrue($this->connection->unitOfWork instanceof Doctrine_Connection_UnitOfWork);
        //$this->assertTrue($this->connection->dataDict instanceof Doctrine_DataDict);
        $this->assertTrue($this->connection->expression instanceof Doctrine_Expression);
        $this->assertTrue($this->connection->transaction instanceof Doctrine_Transaction);
        $this->assertTrue($this->connection->export instanceof Doctrine_Export);
49
    }
50

doctrine's avatar
doctrine committed
51
    public function testFlush() {
zYne's avatar
zYne committed
52
        $user = $this->connection->getTable('User')->find(4);
53
        $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id));
doctrine's avatar
doctrine committed
54

zYne's avatar
zYne committed
55 56 57
        $user    = $this->connection->create('Email');
        $user    = $this->connection->create('User');
        $record  = $this->connection->create('Phonenumber');
doctrine's avatar
doctrine committed
58

zYne's avatar
zYne committed
59
        $user->Email->address = 'example@drinkmore.info';
doctrine's avatar
doctrine committed
60 61
        $this->assertTrue($user->email_id instanceof Email);

zYne's avatar
zYne committed
62 63 64
        $user->name = 'Example user';
        $user->Group[0]->name = 'Example group 1';
        $user->Group[1]->name = 'Example group 2';
doctrine's avatar
doctrine committed
65

zYne's avatar
zYne committed
66
        $user->Phonenumber[0]->phonenumber = '123 123';
doctrine's avatar
doctrine committed
67

zYne's avatar
zYne committed
68 69 70
        $user->Phonenumber[1]->phonenumber = '321 2132';
        $user->Phonenumber[2]->phonenumber = '123 123';
        $user->Phonenumber[3]->phonenumber = '321 2132';
doctrine's avatar
doctrine committed
71 72 73 74 75 76



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

zYne's avatar
zYne committed
77
        $this->connection->flush();
doctrine's avatar
doctrine committed
78

doctrine's avatar
doctrine committed
79
        $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id));
doctrine's avatar
doctrine committed
80 81

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

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

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

88
        $this->assertTrue(is_numeric($user->id));
doctrine's avatar
doctrine committed
89
        $this->assertTrue(is_numeric($user->email_id));
doctrine's avatar
doctrine committed
90

doctrine's avatar
doctrine committed
91
        $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id));
doctrine's avatar
doctrine committed
92 93
        $this->assertTrue($user->Phonenumber->count(), 4);
        $this->assertEqual($user->Group->count(), 2);
zYne's avatar
zYne committed
94

doctrine's avatar
doctrine committed
95 96 97

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

zYne's avatar
zYne committed
98
        $pf   = $this->connection->getTable('Phonenumber');
doctrine's avatar
doctrine committed
99 100 101 102 103 104 105 106 107

        $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
108
        $this->connection->flush();
doctrine's avatar
doctrine committed
109 110 111 112 113 114 115
        unset($user);
        $user = $this->objTable->find(5);

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

        // ADDING REFERENCES

zYne's avatar
zYne committed
116
        $user->Phonenumber[0]->phonenumber = '123 123';
doctrine's avatar
doctrine committed
117
        $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id));
doctrine's avatar
doctrine committed
118

zYne's avatar
zYne committed
119
        $user->Phonenumber[1]->phonenumber = '123 123';
zYne's avatar
zYne committed
120
        $this->connection->flush();
doctrine's avatar
doctrine committed
121 122


123
        $this->assertEqual($user->Phonenumber->count(), 2);
doctrine's avatar
doctrine committed
124 125 126 127 128

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

zYne's avatar
zYne committed
129
        $user->Phonenumber[3]->phonenumber = '123 123';
zYne's avatar
zYne committed
130
        $this->connection->flush();
doctrine's avatar
doctrine committed
131

132
        $this->assertEqual($user->Phonenumber->count(), 3);
doctrine's avatar
doctrine committed
133 134
        unset($user);
        $user = $this->objTable->find(5);
135
        $this->assertEqual($user->Phonenumber->count(), 3);
doctrine's avatar
doctrine committed
136 137 138 139 140

        // DELETING REFERENCES

        $user->Phonenumber->delete();

141
        $this->assertEqual($user->Phonenumber->count(), 0);
doctrine's avatar
doctrine committed
142 143
        unset($user);
        $user = $this->objTable->find(5);
144
        $this->assertEqual($user->Phonenumber->count(), 0);
doctrine's avatar
doctrine committed
145 146 147
        
        // ADDING REFERENCES WITH STRING KEYS

zYne's avatar
zYne committed
148 149
        $user->Phonenumber['home']->phonenumber = '123 123';
        $user->Phonenumber['work']->phonenumber = '444 444';
doctrine's avatar
doctrine committed
150 151

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

154
        $this->assertEqual($user->Phonenumber->count(), 2);
doctrine's avatar
doctrine committed
155 156
        unset($user);
        $user = $this->objTable->find(5);
157
        $this->assertEqual($user->Phonenumber->count(), 2);
doctrine's avatar
doctrine committed
158 159 160 161 162

        // REPLACING ONE-TO-MANY REFERENCE

        unset($coll);
        $coll = new Doctrine_Collection($pf);
zYne's avatar
zYne committed
163 164 165
        $coll[0]->phonenumber = '123 123';
        $coll['home']->phonenumber = '444 444';
        $coll['work']->phonenumber = '444 444';
doctrine's avatar
doctrine committed
166 167 168 169 170




        $user->Phonenumber = $coll;
zYne's avatar
zYne committed
171
        $this->connection->flush();
doctrine's avatar
doctrine committed
172 173 174 175 176 177 178
        $this->assertEqual($user->Phonenumber->count(), 3);
        $user = $this->objTable->find(5);
        $this->assertEqual($user->Phonenumber->count(), 3);

        
        // ONE-TO-ONE REFERENCES

zYne's avatar
zYne committed
179
        $user->Email->address = 'drinker@drinkmore.info';
doctrine's avatar
doctrine committed
180
        $this->assertTrue($user->Email instanceof Email);
zYne's avatar
zYne committed
181
        $this->connection->flush();
doctrine's avatar
doctrine committed
182 183
        $this->assertTrue($user->Email instanceof Email);
        $user = $this->objTable->find(5);
zYne's avatar
zYne committed
184
        $this->assertEqual($user->Email->address, 'drinker@drinkmore.info');
185
        $id = $user->Email->id;
doctrine's avatar
doctrine committed
186 187 188

        // REPLACING ONE-TO-ONE REFERENCES

zYne's avatar
zYne committed
189 190
        $email = $this->connection->create('Email');
        $email->address = 'absolutist@nottodrink.com';
doctrine's avatar
doctrine committed
191 192 193
        $user->Email = $email;

        $this->assertTrue($user->Email instanceof Email);
zYne's avatar
zYne committed
194
        $this->assertEqual($user->Email->address, 'absolutist@nottodrink.com');
zYne's avatar
zYne committed
195
        $this->connection->flush();
doctrine's avatar
doctrine committed
196 197 198 199
        unset($user);

        $user = $this->objTable->find(5);
        $this->assertTrue($user->Email instanceof Email);
zYne's avatar
zYne committed
200
        $this->assertEqual($user->Email->address, 'absolutist@nottodrink.com');
doctrine's avatar
doctrine committed
201
        
zYne's avatar
zYne committed
202
        $emails = $this->connection->query("FROM Email WHERE Email.id = $id");
doctrine's avatar
doctrine committed
203
        //$this->assertEqual(count($emails),0);
doctrine's avatar
doctrine committed
204 205 206 207 208


    }

    public function testGetManager() {
zYne's avatar
zYne committed
209
        $this->assertEqual($this->connection->getManager(),$this->manager);
doctrine's avatar
doctrine committed
210 211
    }
    public function testQuery() {
zYne's avatar
zYne committed
212
        $this->assertTrue($this->connection->query('FROM User') instanceof Doctrine_Collection);
doctrine's avatar
doctrine committed
213 214 215
    }

    public function testDelete() {
zYne's avatar
zYne committed
216
        $user = $this->connection->create('User');
zYne's avatar
zYne committed
217
        $this->connection->delete($user);
doctrine's avatar
doctrine committed
218 219 220
        $this->assertEqual($user->getState(),Doctrine_Record::STATE_TCLEAN);
    }
    public function testGetTable() {
zYne's avatar
zYne committed
221
        $table = $this->connection->getTable('Group');
doctrine's avatar
doctrine committed
222 223
        $this->assertTrue($table instanceof Doctrine_Table);
        try {
zYne's avatar
zYne committed
224
            $table = $this->connection->getTable('Unknown');
doctrine's avatar
doctrine committed
225 226 227 228 229 230
            $f = false;
        } catch(Doctrine_Exception $e) {
            $f = true;
        }
        $this->assertTrue($f);

zYne's avatar
zYne committed
231
        $table = $this->connection->getTable('User');
doctrine's avatar
doctrine committed
232 233 234 235
        $this->assertTrue($table instanceof UserTable);

    }
    public function testCreate() {
zYne's avatar
zYne committed
236
        $email = $this->connection->create('Email');
doctrine's avatar
doctrine committed
237 238
        $this->assertTrue($email instanceof Email);
    }
zYne's avatar
zYne committed
239 240
    public function testGetDbh() {
        $this->assertTrue($this->connection->getDBH() instanceof Doctrine_Db);
doctrine's avatar
doctrine committed
241 242
    }
    public function testCount() {
zYne's avatar
zYne committed
243
        $this->assertTrue(is_integer(count($this->connection)));
doctrine's avatar
doctrine committed
244 245
    }
    public function testGetIterator() {
zYne's avatar
zYne committed
246
        $this->assertTrue($this->connection->getIterator() instanceof ArrayIterator);
doctrine's avatar
doctrine committed
247 248
    }
    public function testGetState() {
249
        $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_SLEEP);
zYne's avatar
zYne committed
250
        $this->assertEqual(Doctrine_Lib::getConnectionStateAsString($this->connection->transaction->getState()), 'open');
doctrine's avatar
doctrine committed
251 252
    }
    public function testGetTables() {
zYne's avatar
zYne committed
253
        $this->assertTrue(is_array($this->connection->getTables()));
doctrine's avatar
doctrine committed
254 255 256 257
    }

    public function testTransactions() {

zYne's avatar
zYne committed
258
        $this->connection->beginTransaction();
259
        $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_ACTIVE);
zYne's avatar
zYne committed
260
        $this->connection->commit();
261
        $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_SLEEP);
doctrine's avatar
doctrine committed
262

zYne's avatar
zYne committed
263
        $this->connection->beginTransaction();
doctrine's avatar
doctrine committed
264 265 266
        
        $user = $this->objTable->find(6);
        
zYne's avatar
zYne committed
267
        $user->name = 'Jack Daniels';
zYne's avatar
zYne committed
268 269
        $this->connection->flush();
        $this->connection->commit();
doctrine's avatar
doctrine committed
270 271

        $user = $this->objTable->find(6);
zYne's avatar
zYne committed
272
        $this->assertEqual($user->name, 'Jack Daniels');
doctrine's avatar
doctrine committed
273 274 275 276

    }

    public function testRollback() {
zYne's avatar
zYne committed
277
        $this->connection->beginTransaction();
278
        $this->assertEqual($this->connection->transaction->getTransactionLevel(),1);
279
        $this->assertEqual($this->connection->transaction->getState(), Doctrine_Transaction::STATE_ACTIVE);
zYne's avatar
zYne committed
280
        $this->connection->rollback();
281
        $this->assertEqual($this->connection->transaction->getState(), Doctrine_Transaction::STATE_SLEEP);
282
        $this->assertEqual($this->connection->transaction->getTransactionLevel(),0);
doctrine's avatar
doctrine committed
283 284
    }
    public function testNestedTransactions() {
285
        $this->assertEqual($this->connection->transaction->getTransactionLevel(),0);
zYne's avatar
zYne committed
286
        $this->connection->beginTransaction();
287
        $this->assertEqual($this->connection->transaction->getTransactionLevel(),1);
288
        $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_ACTIVE);
zYne's avatar
zYne committed
289
        $this->connection->beginTransaction();
290
        $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_BUSY);
291
        $this->assertEqual($this->connection->transaction->getTransactionLevel(),2);
zYne's avatar
zYne committed
292
        $this->connection->commit();
293
        $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_ACTIVE);
294
        $this->assertEqual($this->connection->transaction->getTransactionLevel(),1);
zYne's avatar
zYne committed
295
        $this->connection->commit();
296
        $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_SLEEP);
297
        $this->assertEqual($this->connection->transaction->getTransactionLevel(),0);
doctrine's avatar
doctrine committed
298 299 300
    }
}
?>