em = $this->makeEntityManager(); $schemaTool = new SchemaTool($this->em); $schemaTool->createSchema($this->em->getMetadataFactory()->getAllMetadata()); $this->faker = Factory::create(); $this->loadFixtures([ new PostFixture(count: 20), new CommentFixture(200), ]); $this->em->getConnection()->beginTransaction(); } protected function tearDown(): void { if ($this->em->isOpen()) { $this->em->getConnection()->rollBack(); $this->em->close(); } unset($this->em); } protected function makeEntityManager(): EntityManagerInterface { $config = ORMSetup::createAttributeMetadataConfiguration( [__DIR__ . '/Entity'], true, ); $connection = DriverManager::getConnection([ 'driver' => 'pdo_sqlite', 'memory' => true, ], $config); return new EntityManager( $connection, $config, ); } protected function makeRepositoryWithRequest(string $repositoryClass, Request $request): HttpFilterEntityRepository { /** @var HttpFilterEntityRepository $repoMock */ $repoMock = $this->getMockBuilder($repositoryClass) ->setConstructorArgs([$this->em]) ->onlyMethods(['getRequest']) ->getMock(); $repoMock ->method('getRequest') ->willReturn($request); return $repoMock; } /** @param iterable $fixtures */ protected function loadFixtures(iterable $fixtures): void { $fixtureLoader = new Loader(); /** @var BaseFixture $fixture */ foreach ($fixtures as $fixture) { $fixtureLoader->addFixture($fixture); } $purger = new ORMPurger(); $executor = new ORMExecutor($this->em, $purger); $executor->execute($fixtureLoader->getFixtures()); } }