From cd08faba45d1420eb4d5323fa36e1075adefbe84 Mon Sep 17 00:00:00 2001 From: zYne Date: Tue, 19 Jun 2007 21:21:39 +0000 Subject: [PATCH] --- tests/Connection/ProfilerTestCase.php | 176 +++++++++++++++++++++ tests/Connection/UnitOfWork.php | 213 ++++++++++++++++++++++++++ 2 files changed, 389 insertions(+) create mode 100644 tests/Connection/ProfilerTestCase.php create mode 100644 tests/Connection/UnitOfWork.php diff --git a/tests/Connection/ProfilerTestCase.php b/tests/Connection/ProfilerTestCase.php new file mode 100644 index 000000000..6e9af2d0a --- /dev/null +++ b/tests/Connection/ProfilerTestCase.php @@ -0,0 +1,176 @@ +. + */ + +/** + * Doctrine_Connection_Profiler_TestCase + * + * @package Doctrine + * @subpackage Doctrine_Db + * @author Konsta Vesterinen + * @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_Profiler_TestCase extends Doctrine_UnitTestCase +{ + public function prepareTables() + {} + public function prepareData() + {} + + public function testQuery() + { + $this->conn = Doctrine_Manager::getInstance()->openConnection(array('sqlite::memory:')); + + $this->profiler = new Doctrine_Connection_Profiler(); + + $this->conn->setListener($this->profiler); + + $this->conn->exec('CREATE TABLE test (id INT)'); + + $this->assertEqual($this->profiler->lastEvent()->getQuery(), 'CREATE TABLE test (id INT)'); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::EXEC); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + $this->assertEqual($this->conn->count(), 1); + } + public function testPrepareAndExecute() + { + + $stmt = $this->conn->prepare('INSERT INTO test (id) VALUES (?)'); + $event = $this->profiler->lastEvent(); + + $this->assertEqual($event->getQuery(), 'INSERT INTO test (id) VALUES (?)'); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::PREPARE); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + $stmt->execute(array(1)); + + $this->assertEqual($this->profiler->lastEvent()->getQuery(), 'INSERT INTO test (id) VALUES (?)'); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::EXECUTE); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + $this->assertEqual($this->conn->count(), 2); + } + public function testMultiplePrepareAndExecute() + { + + $stmt = $this->conn->prepare('INSERT INTO test (id) VALUES (?)'); + $this->assertEqual($this->profiler->lastEvent()->getQuery(), 'INSERT INTO test (id) VALUES (?)'); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::PREPARE); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + $stmt2 = $this->conn->prepare('INSERT INTO test (id) VALUES (?)'); + $this->assertEqual($this->profiler->lastEvent()->getQuery(), 'INSERT INTO test (id) VALUES (?)'); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::PREPARE); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + $stmt->execute(array(1)); + $stmt2->execute(array(1)); + + $this->assertEqual($this->profiler->lastEvent()->getQuery(), 'INSERT INTO test (id) VALUES (?)'); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::EXECUTE); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + $this->assertEqual($this->conn->count(), 4); + } + public function testExecuteStatementMultipleTimes() + { + try { + $stmt = $this->conn->prepare('INSERT INTO test (id) VALUES (?)'); + $stmt->execute(array(1)); + $stmt->execute(array(1)); + $this->pass(); + } catch(Doctrine_Db_Exception $e) { + + $this->fail($e->__toString()); + } + $this->assertEqual($this->profiler->lastEvent()->getQuery(), 'INSERT INTO test (id) VALUES (?)'); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::EXECUTE); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + $this->assertEqual($this->profiler->lastEvent()->getQuery(), 'INSERT INTO test (id) VALUES (?)'); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::EXECUTE); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + } + public function testTransactionRollback() + { + try { + $this->conn->beginTransaction(); + $this->pass(); + } catch(Doctrine_Db_Exception $e) { + $this->fail($e->__toString()); + } + $this->assertEqual($this->profiler->lastEvent()->getQuery(), null); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::BEGIN); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + try { + $this->conn->rollback(); + $this->pass(); + } catch(Doctrine_Db_Exception $e) { + $this->fail($e->__toString()); + } + + $this->assertEqual($this->profiler->lastEvent()->getQuery(), null); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::ROLLBACK); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + } + public function testTransactionCommit() + { + try { + $this->conn->beginTransaction(); + $this->pass(); + } catch(Doctrine_Db_Exception $e) { + $this->fail($e->__toString()); + } + $this->assertEqual($this->profiler->lastEvent()->getQuery(), null); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::BEGIN); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + + try { + $this->conn->commit(); + $this->pass(); + } catch(Doctrine_Db_Exception $e) { + $this->fail($e->__toString()); + $this->conn->rollback(); + } + + $this->assertEqual($this->profiler->lastEvent()->getQuery(), null); + $this->assertTrue($this->profiler->lastEvent()->hasEnded()); + $this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::COMMIT); + $this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs())); + } +} +?> diff --git a/tests/Connection/UnitOfWork.php b/tests/Connection/UnitOfWork.php new file mode 100644 index 000000000..3520a68c6 --- /dev/null +++ b/tests/Connection/UnitOfWork.php @@ -0,0 +1,213 @@ +. + */ + +/** + * Doctrine_Connection_UnitOfWork_TestCase + * + * @package Doctrine + * @author Konsta Vesterinen + * @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_UnitOfWork_TestCase extends Doctrine_UnitTestCase +{ + public function testFlush() + { + $user = $this->connection->getTable('User')->find(4); + $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id)); + + $user = $this->connection->create('Email'); + $user = $this->connection->create('User'); + $record = $this->connection->create('Phonenumber'); + + $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); + + $this->connection->flush(); + + $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id)); + + $this->assertEqual(count($user->Group), 2); + $user2 = $user; + + $user = $this->objTable->find($user->id); + + $this->assertEqual($user->id, $user2->id); + + $this->assertTrue(is_numeric($user->id)); + $this->assertTrue(is_numeric($user->email_id)); + + $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id)); + $this->assertTrue($user->Phonenumber->count(), 4); + $this->assertEqual($user->Group->count(), 2); + + + $user = $this->objTable->find(5); + + $pf = $this->connection->getTable('Phonenumber'); + + $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); + + $this->connection->flush(); + unset($user); + $user = $this->objTable->find(5); + + $this->assertEqual($user->Phonenumber->count(), 0); + + // ADDING REFERENCES + + $user->Phonenumber[0]->phonenumber = '123 123'; + $this->assertTrue(is_numeric($user->Phonenumber[0]->entity_id)); + + $user->Phonenumber[1]->phonenumber = '123 123'; + $this->connection->flush(); + + + $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'; + $this->connection->flush(); + + $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'; + + $this->assertEqual($user->Phonenumber->count(), 2); + $this->connection->flush(); + + $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); + $coll = new Doctrine_Collection($pf); + $coll[0]->phonenumber = '123 123'; + $coll['home']->phonenumber = '444 444'; + $coll['work']->phonenumber = '444 444'; + + + + + $user->Phonenumber = $coll; + $this->connection->flush(); + $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->connection->flush(); + $this->assertTrue($user->Email instanceof Email); + $user = $this->objTable->find(5); + $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'); + $this->connection->flush(); + 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); + } + + public function testTransactions() + { + + $this->connection->beginTransaction(); + $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_ACTIVE); + $this->connection->commit(); + $this->assertEqual($this->connection->transaction->getState(),Doctrine_Transaction::STATE_SLEEP); + + $this->connection->beginTransaction(); + + $user = $this->objTable->find(6); + + $user->name = 'Jack Daniels'; + $this->connection->flush(); + $this->connection->commit(); + + $user = $this->objTable->find(6); + $this->assertEqual($user->name, 'Jack Daniels'); + + } + + +}