Skip to content

Commit d63e1a1

Browse files
Wouterlsmith77
authored andcommitted
Added Fixture loading to ORM Manager
1 parent 85d4cb6 commit d63e1a1

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

src/Functional/DbManager/ORM.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@
1212

1313
namespace Symfony\Cmf\Component\Testing\Functional\DbManager;
1414

15+
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
16+
use Doctrine\Common\DataFixtures\Loader;
17+
use Doctrine\Common\DataFixtures\ProxyReferenceRepository;
18+
use Symfony\Bridge\Doctrine\DataFixtures\ContainerAwareLoader;
1519
use Symfony\Component\DependencyInjection\ContainerInterface;
1620

21+
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
22+
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
1723
use Doctrine\Common\Persistence\ManagerRegistry;
1824
use Doctrine\Common\Persistence\ObjectManager;
1925

@@ -70,4 +76,47 @@ public function getOm($managerName = null)
7076

7177
return $this->om;
7278
}
79+
80+
public function loadFixtures(array $classNames)
81+
{
82+
$loader = new ContainerAwareLoader($this->container);;
83+
$purger = new ORMPurger();
84+
$executor = new ORMExecutor($this->getOm(), $purger);
85+
86+
$referenceRepository = new ProxyReferenceRepository($this->getOm());
87+
88+
$executor->setReferenceRepository($referenceRepository);
89+
$executor->purge();
90+
91+
foreach ($classNames as $className) {
92+
$this->loadFixtureClass($loader, $className);
93+
}
94+
95+
$executor->execute($loader->getFixtures(), true);
96+
}
97+
98+
public function loadFixtureClass(Loader $loader, $className)
99+
{
100+
if (!class_exists($className)) {
101+
throw new \InvalidArgumentException(sprintf(
102+
'Fixture class "%s" does not exist.',
103+
$className
104+
));
105+
}
106+
107+
$fixture = new $className();
108+
109+
if ($loader->hasFixture($fixture)) {
110+
unset($fixture);
111+
return;
112+
}
113+
114+
$loader->addFixture($fixture);
115+
116+
if ($fixture instanceof DependentFixtureInterface) {
117+
foreach ($fixture->getDependencies() as $dependency) {
118+
$this->loadFixtureClass($loader, $dependency);
119+
}
120+
}
121+
}
73122
}

0 commit comments

Comments
 (0)