/** * Test commit. * * @param Operation $operation * The operation to perform tests on. * * @dataProvider operationDataProvider */ public function testCommit(Operation $operation) { $performed = false; $callback = function () use(&$performed) { $performed = true; return 'performed'; }; $operation->onCommit($callback); $check = $operation->getCommitCallbacks(); $this->assertSame($callback, reset($check), 'Correct callback was not set.'); $operation->commit(); $this->assertTrue($performed, 'Callback was not executed.'); $check = $operation->getResult(); $this->assertSame('performed', $check, 'Callback did not return proper result.'); }
/** * Test index. * * @param Connection $connection * The connection to perform tests on. * * @dataProvider connectionDataProvider */ public function testIndex(Connection $connection) { $indexer = new Indexer($connection); $connection->startTransaction(); $indexer->index($connection->addMetadata('value', 'value1'), 'test1'); $check = $indexer->lookup('test1'); $this->assertSame('value1', reset($check)->getMetadata('value'), 'Operations not found during lookup.'); $operation = new Operation(); $operation->onCommit(function () { return 'testresult'; }); $connection->addOperation($operation); $indexer->index($operation, 'test2'); $check = $indexer->lookup('test2'); $this->assertSame([$operation->idx($connection) => $operation], $check, 'Operations not found during lookup.'); }
/** * Test rollback transaction. * * @param Connection $connection * The connection to perform tests on. * * @dataProvider connectionDataProvider */ public function testRollbackTransaction(Connection $connection) { $operation = new Operation(); $operation->onCommit(function () use(&$committed) { $committed = true; }); $operation->onRollback(function () use(&$rolledback) { $rolledback = true; }); $committed = false; $rolledback = false; $connection->startTransaction(); $connection->addOperation($operation); $connection->rollbackTransaction(); $this->assertFalse($committed, 'Commit was performed.'); $this->assertTrue($rolledback, 'Rollback was not performed.'); $committed = false; $rolledback = false; $connection->startTransaction(); $connection->startTransaction(); $connection->addOperation($operation); $connection->rollbackTransaction(); $connection->commitTransaction(); $this->assertFalse($committed, 'Commit was performed.'); $this->assertTrue($rolledback, 'Rollback was not performed.'); $committed = false; $rolledback = false; $connection->startTransaction(); $connection->startTransaction(); $connection->addOperation($operation); $connection->commitTransaction(); $connection->rollbackTransaction(); $this->assertFalse($committed, 'Commit was performed.'); $this->assertTrue($rolledback, 'Rollback was not performed.'); }
use Gielfeldt\TransactionalPHP\Operation; $connection = new Connection(); $operation = new Operation(); $operation->onCommit(function () { print "THIS WILL BE PRINTED IMMEDIATELY, BECAUSE NO TRANSACTION HAS BEGUN\n"; })->onRollback(function () { print "THIS WILL NEVER BE PRINTED, BECAUSE NO TRANSACTION HAS BEGUN\n"; }); $connection->addOperation($operation); // Start outer transaction. $connection->startTransaction(); $operation = new Operation(); $operation->onCommit(function () { print "THIS WILL BE PRINTED, BECAUSE THIS WILL BE COMMITTED\n"; })->onRollback(function () { print "THIS WILL NEVER BE PRINTED, BECAUSE THIS WILL BE COMMITTED\n"; }); $connection->addOperation($operation); // Start inner transaction. $connection->startTransaction(); $operation = new Operation(); $operation->onCommit(function () { print "THIS WILL NOT BE PRINTED, BECAUSE THIS WILL BE ROLLED BACK\n"; })->onRollback(function () { print "THIS WILL BE PRINTED, BECAUSE THIS WILL BE ROLLED BACK\n"; }); $connection->addOperation($operation); // Rollback inner transaction. $connection->rollbackTransaction(); // Commit inner transaction. $connection->commitTransaction();