This repository was archived by the owner on Dec 14, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDoctrineContext.php
More file actions
97 lines (78 loc) · 2.18 KB
/
DoctrineContext.php
File metadata and controls
97 lines (78 loc) · 2.18 KB
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
<?php
namespace Acme\Features\Context;
use Behat\Behat\Context\Context;
use Behat\Gherkin\Node\TableNode;
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\ORM\Tools\SchemaTool;
use Nelmio\Alice\Loader\NativeLoader;
use Symfony\Bridge\Doctrine\ManagerRegistry;
class DoctrineContext implements Context
{
/**
* @var ObjectManager
*/
private $manager;
/**
* @var SchemaTool
*/
private $schemaTool;
/**
* @var array
*/
private $classes;
/**
* @var \Nelmio\Alice\Loader\NativeLoader
*/
private $nativeLoader;
/**
* @var \Nelmio\Alice\ObjectSet
*/
private $objectSet;
public function __construct(
ManagerRegistry $doctrine
) {
$this->manager = $doctrine->getManager();
$this->schemaTool = new SchemaTool($this->manager);
$this->classes = $this->manager->getMetadataFactory()->getAllMetadata();
}
/**
* @BeforeScenario
*/
public function dropData()
{
$purger = new ORMPurger();
$purger->setPurgeMode(ORMPurger::PURGE_MODE_DELETE);
$executor = new ORMExecutor($this->manager, $purger);
$executor->execute([]);
}
/**
* @AfterScenario @dropSchema
*/
public function dropDatabase()
{
$this->schemaTool->dropSchema($this->classes);
}
/**
* @When I load the following fixtures:
*/
public function loadFixtures(TableNode $data)
{
$this->nativeLoader = new NativeLoader();
$files = [];
foreach ($data->getRows() as $row) {
$name = $row[0];
$filePath = sprintf('%s/../../Fixtures/%s.yml', __DIR__, $name);
if (!file_exists($filePath)) {
throw new \RuntimeException(sprintf('File %s not found', $name));
}
$files[] = $filePath;
}
$this->objectSet = $this->nativeLoader->loadFiles($files)->getObjects();
foreach ($this->objectSet as $object) {
$this->manager->persist($object);
}
$this->manager->flush();
}
}