*/ trait FixtureAwareTestCaseTrait { /** * @var ORMExecutor */ private $fixtureExecutor; /** * @var ContainerAwareLoader */ private $fixtureLoader; /** * @param FixtureInterface $fixture * @return self */ protected function addFixture(FixtureInterface $fixture) { $this->getFixtureLoader()->addFixture($fixture); return $this; } /** * Executes all the fixtures that have been loaded so far. * @param bool $append */ protected function executeFixtures(bool $append = false) { $this->getFixtureExecutor()->execute($this->getFixtureLoader()->getFixtures(), $append); } /** * Purges loaded fixtures from DB */ protected function purgeFixtures() { $this->getFixtureExecutor()->getPurger()->purge(); } /** * @return ORMExecutor */ private function getFixtureExecutor() { if (!$this->fixtureExecutor) { /** * @var \Doctrine\ORM\EntityManager $entityManager */ $entityManager = self::$kernel->getContainer()->get('doctrine')->getManager(); $this->fixtureExecutor = new class ($entityManager, new ORMPurger($entityManager)) extends ORMExecutor { /** * @inheritDoc */ public function load(ObjectManager $manager, FixtureInterface $fixture) { if ($fixture instanceof SharedFixtureInterface) { $fixture->setReferenceRepository($this->referenceRepository); } $fixture->load($manager); } }; } return $this->fixtureExecutor; } /** * @return ContainerAwareLoader */ private function getFixtureLoader() { if (!$this->fixtureLoader) { $this->fixtureLoader = new ContainerAwareLoader(self::$kernel->getContainer()); } return $this->fixtureLoader; } }