2006-10-01 14:10:11 +04:00
|
|
|
<?php
|
|
|
|
class Transaction_TestLogger implements Doctrine_Overloadable {
|
|
|
|
private $messages = array();
|
|
|
|
|
|
|
|
public function __call($m, $a) {
|
|
|
|
$this->messages[] = $m;
|
|
|
|
}
|
|
|
|
public function pop() {
|
|
|
|
return array_pop($this->messages);
|
|
|
|
}
|
|
|
|
public function clear() {
|
|
|
|
$this->messages = array();
|
|
|
|
}
|
|
|
|
public function getAll() {
|
|
|
|
return $this->messages;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class Doctrine_Connection_Transaction_TestCase extends Doctrine_UnitTestCase {
|
|
|
|
public function prepareData() { }
|
|
|
|
public function testInsert() {
|
|
|
|
$count = count($this->dbh);
|
|
|
|
|
|
|
|
|
|
|
|
$listener = new Transaction_TestLogger();
|
|
|
|
|
|
|
|
$user = new User();
|
|
|
|
$user->getTable()->getConnection()->setListener($listener);
|
|
|
|
|
|
|
|
$this->connection->beginTransaction();
|
|
|
|
|
|
|
|
$user->name = 'John';
|
|
|
|
|
|
|
|
$user->save();
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onInsert');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreInsert');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onSetProperty');
|
|
|
|
$this->assertEqual($listener->pop(), 'onTransactionBegin');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreTransactionBegin');
|
|
|
|
|
|
|
|
$this->assertEqual($user->id, 1);
|
|
|
|
|
|
|
|
$this->assertTrue($count < count($this->dbh));
|
|
|
|
|
|
|
|
$this->connection->commit();
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onTransactionCommit');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreTransactionCommit');
|
|
|
|
}
|
|
|
|
public function testInsertMultiple() {
|
|
|
|
$count = count($this->dbh);
|
|
|
|
|
|
|
|
|
|
|
|
$listener = new Transaction_TestLogger();
|
|
|
|
|
|
|
|
$users = new Doctrine_Collection('User');
|
|
|
|
$users->getTable()->getConnection()->setListener($listener);
|
|
|
|
|
|
|
|
$this->connection->beginTransaction();
|
|
|
|
|
|
|
|
$users[0]->name = 'Arnold';
|
|
|
|
$users[1]->name = 'Vincent';
|
|
|
|
|
|
|
|
$users[0]->save();
|
|
|
|
$users[1]->save();
|
|
|
|
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onInsert');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreInsert');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onInsert');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreInsert');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreSave');
|
|
|
|
|
|
|
|
$this->assertEqual($users[0]->id, 2);
|
|
|
|
|
|
|
|
$this->assertEqual($users[1]->id, 3);
|
|
|
|
|
|
|
|
$this->assertTrue($count < count($this->dbh));
|
|
|
|
|
|
|
|
$this->connection->commit();
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onTransactionCommit');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreTransactionCommit');
|
|
|
|
}
|
|
|
|
public function testUpdate() {
|
|
|
|
$count = count($this->dbh);
|
|
|
|
|
|
|
|
|
|
|
|
$user = $this->connection->getTable('User')->find(1);
|
|
|
|
|
|
|
|
$listener = new Transaction_TestLogger();
|
|
|
|
$user->getTable()->getConnection()->setListener($listener);
|
|
|
|
$this->connection->beginTransaction();
|
|
|
|
|
|
|
|
$user->name = 'Jack';
|
|
|
|
|
|
|
|
$user->save();
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onUpdate');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreUpdate');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onSetProperty');
|
|
|
|
$this->assertEqual($listener->pop(), 'onTransactionBegin');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreTransactionBegin');
|
|
|
|
|
|
|
|
$this->assertEqual($user->id, 1);
|
|
|
|
|
|
|
|
$this->assertTrue($count < count($this->dbh));
|
|
|
|
|
|
|
|
$this->connection->commit();
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onTransactionCommit');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreTransactionCommit');
|
|
|
|
}
|
|
|
|
public function testUpdateMultiple() {
|
|
|
|
$count = count($this->dbh);
|
|
|
|
|
|
|
|
$listener = new Transaction_TestLogger();
|
|
|
|
|
|
|
|
$users = $this->connection->query('FROM User');
|
|
|
|
$users->getTable()->getConnection()->setListener($listener);
|
|
|
|
|
|
|
|
$this->connection->beginTransaction();
|
|
|
|
|
|
|
|
$users[1]->name = 'Arnold';
|
|
|
|
$users[2]->name = 'Vincent';
|
|
|
|
|
|
|
|
$users[1]->save();
|
|
|
|
$users[2]->save();
|
|
|
|
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onUpdate');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreUpdate');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onSave');
|
|
|
|
$this->assertEqual($listener->pop(), 'onUpdate');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreUpdate');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreSave');
|
|
|
|
|
|
|
|
$this->assertEqual($users[1]->id, 2);
|
|
|
|
|
|
|
|
$this->assertEqual($users[2]->id, 3);
|
|
|
|
|
|
|
|
$this->assertTrue($count < count($this->dbh));
|
|
|
|
|
|
|
|
$this->connection->commit();
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onTransactionCommit');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreTransactionCommit');
|
|
|
|
}
|
|
|
|
public function testDelete() {
|
|
|
|
$count = count($this->dbh);
|
|
|
|
|
|
|
|
$listener = new Transaction_TestLogger();
|
|
|
|
$listener->clear();
|
|
|
|
$users = $this->connection->query('FROM User');
|
|
|
|
$users->getTable()->getConnection()->setListener($listener);
|
|
|
|
|
|
|
|
$this->connection->beginTransaction();
|
|
|
|
|
|
|
|
$users->delete();
|
|
|
|
|
2006-11-30 00:09:02 +03:00
|
|
|
$this->assertEqual($listener->pop(), 'onDelete');
|
2006-10-01 14:10:11 +04:00
|
|
|
|
|
|
|
$this->assertTrue($count, count($this->dbh));
|
|
|
|
|
|
|
|
$this->connection->commit();
|
|
|
|
|
|
|
|
$this->assertTrue(($count + 1), count($this->dbh));
|
|
|
|
|
|
|
|
$this->assertEqual($listener->pop(), 'onTransactionCommit');
|
|
|
|
$this->assertEqual($listener->pop(), 'onPreTransactionCommit');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|