getMockSqliteEntityManager(); $purger = $this->getMockPurger(); $purger->expects($this->once()) ->method('setEntityManager') ->with($em); $executor = new ORMExecutor($em, $purger); $fixture = $this->getMockFixture(); $fixture->expects($this->once()) ->method('load') ->with($em); $executor->execute([$fixture], true); } public function testExecuteSingleTransactionsCountTransactionalCalls(): void { $em = $this->getMockEntityManager(); $em->method('getEventManager')->willReturn($this->createMock(EventManager::class)); // We call wrapInTransaction once for purge and for the fixtures (load) $em->expects($this->once())->method('wrapInTransaction')->with(self::isInstanceOf(Closure::class)); $executor = new ORMExecutor($em); $fixture = $this->getMockFixture(); @$executor->execute([$fixture, $fixture]); } public function testExecuteWithPurge(): void { $em = $this->getMockSqliteEntityManager(); $purger = $this->getMockPurger(); $purger->expects($this->once()) ->method('purge'); $executor = new ORMExecutor($em, $purger); $fixture = $this->getMockFixture(); $fixture->expects($this->once()) ->method('load') ->with($em); $executor->execute([$fixture], false); } public function testExecuteTransaction(): void { $em = $this->getMockSqliteEntityManager(); $executor = new ORMExecutor($em); $fixture = $this->getMockFixture(); $fixture->expects($this->once()) ->method('load') ->with($em); $executor->execute([$fixture], true); } public function testCustomLegacyEntityManager(): void { $em = $this->getMockEntityManager(); $em->method('getEventManager')->willReturn($this->createMock(EventManager::class)); $em->expects($this->once())->method('wrapInTransaction')->with(self::isInstanceOf(Closure::class)); $executor = new ORMExecutor($em); @$executor->execute([]); } public function testExecuteMultipleTransactionsWithNoPurge(): void { $em = $this->getMockSqliteEntityManager(); $purger = $this->getMockPurger(); $purger->expects($this->once()) ->method('setEntityManager') ->with($em); $executor = new MultipleTransactionORMExecutor($em, $purger); $fixture = $this->getMockFixture(); $fixture->expects($this->once()) ->method('load') ->with($em); $executor->execute([$fixture], true); } public function testExecuteMultipleTransactionsWithPurge(): void { $em = $this->getMockSqliteEntityManager(); $purger = $this->getMockPurger(); $purger->expects($this->once()) ->method('purge'); $executor = new MultipleTransactionORMExecutor($em, $purger); $fixture = $this->getMockFixture(); $fixture->expects($this->once()) ->method('load') ->with($em); $executor->execute([$fixture], false); } public function testExecuteMultipleTransactionsCountTransactionalCalls(): void { $em = $this->getMockEntityManager(); $em->method('getEventManager')->willReturn($this->createMock(EventManager::class)); // We call wrapInTransaction once for purge and twice for the fixtures (load) $em->expects($this->exactly(3))->method('wrapInTransaction')->with(self::isInstanceOf(Closure::class)); $executor = new MultipleTransactionORMExecutor($em); $fixture = $this->getMockFixture(); @$executor->execute([$fixture, $fixture]); } private function getMockEntityManager(): EntityManagerInterface&MockObject { return $this->createMock(ForwardCompatibleEntityManager::class); } private function getMockFixture(): FixtureInterface&MockObject { return $this->createMock(FixtureInterface::class); } private function getMockPurger(): ORMPurgerInterface&MockObject { return $this->createMock(ORMPurgerInterface::class); } }