1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
<?php
declare(strict_types=1);
namespace Doctrine\Tests\Common\DataFixtures\Executor;
use Closure;
use Doctrine\Common\DataFixtures\Executor\MultipleTransactionORMExecutor;
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\DataFixtures\Purger\ORMPurgerInterface;
use Doctrine\Common\EventManager;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Tests\Common\DataFixtures\BaseTestCase;
use Doctrine\Tests\Mock\ForwardCompatibleEntityManager;
use PHPUnit\Framework\MockObject\MockObject;
/**
* Test Fixture executor.
*/
class ORMExecutorTest extends BaseTestCase
{
public function testExecuteWithNoPurge(): void
{
$em = $this->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);
}
}
|