pdo = $this->getMockBuilder(PDO::class)->disableOriginalConstructor()->getMock(); $entityFactory = $this->getMockBuilder(EntityFactory::class)->disableOriginalConstructor()->getMock(); $metadata = $this->getMockBuilder(Metadata::class)->disableOriginalConstructor()->getMock(); $this->transactionManager = $this->getMockBuilder(TransactionManager::class) ->disableOriginalConstructor()->getMock(); $composer = new MysqlQueryComposer($this->pdo, $entityFactory, $metadata); $this->locker = new BaseLocker($this->pdo, $composer, $this->transactionManager); } public function testLockCommit() { $this->transactionManager ->expects($this->exactly(2)) ->method('start'); $this->pdo ->expects($this->exactly(2)) ->method('exec') ->withConsecutive( ['LOCK TABLES `account` WRITE'], ['LOCK TABLES `contact` READ'], ); $this->transactionManager ->expects($this->once()) ->method('commit'); $this->locker->lockExclusive('Account'); $this->locker->lockShare('Contact'); $this->assertTrue($this->locker->isLocked()); $this->locker->commit(); $this->assertFalse($this->locker->isLocked()); } public function testLockRollback() { $this->transactionManager ->expects($this->exactly(2)) ->method('start'); $this->pdo ->expects($this->exactly(2)) ->method('exec') ->withConsecutive( ['LOCK TABLES `account` WRITE'], ['LOCK TABLES `contact` READ'], ); $this->transactionManager ->expects($this->once()) ->method('rollback'); $this->locker->lockExclusive('Account'); $this->locker->lockShare('Contact'); $this->assertTrue($this->locker->isLocked()); $this->locker->rollback(); $this->assertFalse($this->locker->isLocked()); } }