Skip to content

Commit d8fdf10

Browse files
committed
Merge remote-tracking branch 'origin/MQE-150-Data-Entity-Dependencies' into develop
# Conflicts: # src/Magento/AcceptanceTestFramework/DataGenerator/etc/DataProfileSchema.xsd
2 parents d8202e8 + ecd587f commit d8fdf10

File tree

13 files changed

+236
-225
lines changed

13 files changed

+236
-225
lines changed

bootstrap.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
<?php
2-
3-
defined('FW_BP') || define('FW_BP', str_replace('\\', '/', (__DIR__)));
4-
defined('TESTS_BP') || define('TESTS_BP', dirname(dirname(dirname(FW_BP))));
52
putenv("HOSTNAME=127.0.0.1");
63
putenv("PORT=8080");
74

85
require_once __DIR__ . '/vendor/autoload.php';
96

10-
$dotenv = new Dotenv\Dotenv(TESTS_BP, '.env');
11-
$dotenv->load();
7+
8+
//$dotenv = new Dotenv\Dotenv(TESTS_BP, '.env');
9+
//Load constants from .env file
10+
$env = new \Dotenv\Loader(__DIR__ . '/.env');
11+
$env->load();
12+
define('TESTS_BP', $env->getEnvironmentVariable('TESTS_BP'));
13+
define('FW_BP', $env->getEnvironmentVariable('FW_BP'));
14+
define('TESTS_MODULE_PATH', TESTS_BP . '/tests/acceptance/Magento/AcceptanceTest');
1215

1316
$objectManager = \Magento\AcceptanceTestFramework\ObjectManagerFactory::getObjectManager();

entryPoint.php

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
<?php
22

3-
defined('FW_BP') || define('FW_BP', str_replace('\\', '/', __DIR__));
4-
//defined('TESTS_BP') || define('TESTS_BP', dirname(dirname(dirname(dirname(FW_BP)))));
5-
defined('TESTS_BP') || define('TESTS_BP', FW_BP);
6-
defined('TESTS_MODULE_PATH') || define('TESTS_MODULE_PATH', FW_BP .'/src/Magento/AcceptanceTestFramework/Page');
7-
83
require_once 'bootstrap.php';
94

105
/** @var Magento\AcceptanceTestFramework\Dummy $dummy */
11-
$dummy = new Magento\AcceptanceTestFramework\DataGenerator\DataHandler('test');
12-
13-
$result = $dummy->persistData(['CustomerEntityTwo'], 'API');
14-
15-
print_r($result);
6+
$dummy = $objectManager->create(\Magento\AcceptanceTestFramework\Dummy::class);
7+
$dummy->readPageObjects();

etc/di.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,12 @@
150150
<argument name="converter" xsi:type="object">Magento\AcceptanceTestFramework\Config\Converter</argument>
151151
<argument name="schemaLocator" xsi:type="object">Magento\AcceptanceTestFramework\Config\SchemaLocator\DataProfile</argument>
152152
<argument name="idAttributes" xsi:type="array">
153-
<item name="/config/entities/entity" xsi:type="string">name</item>
154-
<item name="/config/entities/entity/dataObjects/dataObject" xsi:type="string">name</item>
155-
<item name="/config/entities/entity/dataObjects/dataObject/dataArray/data" xsi:type="string">key</item>
153+
<item name="/config/entity" xsi:type="string">name</item>
154+
<item name="/config/entity/data" xsi:type="string">key</item>
155+
<item name="/config/entity/required-entity" xsi:type="string">name</item>
156156
</argument>
157-
<argument name="fileName" xsi:type="string">data.xml</argument>
158-
<argument name="defaultScope" xsi:type="string">*/etc</argument>
157+
<argument name="fileName" xsi:type="string">*Data.xml</argument>
158+
<argument name="defaultScope" xsi:type="string">Data</argument>
159159
</arguments>
160160
</virtualType>
161161
</config>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Magento\AcceptanceTestFramework\DataGenerator;
4+
5+
class DataGeneratorConstants
6+
{
7+
const ENTITY_DATA = 'entity';
8+
const ENTITY_DATA_NAME = 'name';
9+
const ENTITY_DATA_TYPE = 'type';
10+
11+
const DATA_VALUES = 'data';
12+
const DATA_ELEMENT_KEY = 'key';
13+
const DATA_ELEMENT_VALUE = 'value';
14+
15+
const REQUIRED_ENTITY = 'required-entity';
16+
const REQUIRED_ENTITY_TYPE = 'type';
17+
const REQUIRED_ENTITY_VALUE = 'value';
18+
}

src/Magento/AcceptanceTestFramework/DataGenerator/DataGeneratorXMLConstants.php

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/Magento/AcceptanceTestFramework/DataGenerator/DataHandler.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Magento\AcceptanceTestFramework\DataGenerator;
44

5-
use Magento\AcceptanceTestFramework\DataGenerator\Objects\EntityXmlObject;
5+
use Magento\AcceptanceTestFramework\DataGenerator\Objects\EntityDataObject;
66
use Magento\AcceptanceTestFramework\DataProfileSchemaParser;
77
use Magento\AcceptanceTestFramework\ObjectManagerFactory;
88

@@ -24,15 +24,16 @@ public function generateData($mapEntities = false)
2424
$entityParser = $this->objectManager->create(DataProfileSchemaParser::class);
2525
$entities = $entityParser->readDataProfiles();
2626

27-
foreach ($entities[DataGeneratorXMLConstants::ENTITY_DATA] as $entityName => $entity) {
28-
$entityXmlObject = new EntityXmlObject(
29-
$entityName,
30-
$entity[DataGeneratorXMLConstants::ENTITY_DATA_TYPE],
31-
$entity[DataGeneratorXMLConstants::ENTITY_DATA_CONFIG],
32-
$entity[DataGeneratorXMLConstants::DATA_OBJECT]
33-
);
27+
foreach ($entities[DataGeneratorConstants::ENTITY_DATA] as $entityName => $entity) {
28+
$entityType = $entity[DataGeneratorConstants::ENTITY_DATA_TYPE];
3429

35-
if ($mapEntities) {
30+
if (strcasecmp($entityType, $type) == 0) {
31+
$entityXmlObject = new EntityDataObject(
32+
$entityName,
33+
$entityType,
34+
$entity[DataGeneratorConstants::DATA_VALUES] ?? null,
35+
$entity[DataGeneratorConstants::REQUIRED_ENTITY] ?? null
36+
);
3637
$entityObjects[$entityXmlObject->getName()] = $entityXmlObject;
3738
} else {
3839
$entityObjects[] = $entityXmlObject;
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: imeron
5+
* Date: 6/22/17
6+
* Time: 2:13 PM
7+
*/
8+
9+
namespace Magento\AcceptanceTestFramework\DataGenerator\Managers;
10+
11+
use Magento\AcceptanceTestFramework\DataGenerator\DataGeneratorConstants;
12+
use Magento\AcceptanceTestFramework\DataGenerator\Objects\EntityDataObject;
13+
use Magento\AcceptanceTestFramework\DataProfileSchemaParser;
14+
use Magento\AcceptanceTestFramework\ObjectManagerFactory;
15+
16+
class DataManager
17+
{
18+
private $data = []; // an array of entity names to the entity data objects themselves
19+
20+
public function __construct($type)
21+
{
22+
$this->data = $this->parseDataEntities($type);
23+
}
24+
25+
private function parseDataEntities($type)
26+
{
27+
$entityObjects = array();
28+
$objectManager = ObjectManagerFactory::getObjectManager();
29+
$entityParser = $objectManager->create(DataProfileSchemaParser::class);
30+
$entities = $entityParser->readDataProfiles();
31+
32+
foreach ($entities[DataGeneratorConstants::ENTITY_DATA] as $entityName => $entity) {
33+
$entityType = $entity[DataGeneratorConstants::ENTITY_DATA_TYPE];
34+
35+
if (strcasecmp($entityType, $type) == 0) {
36+
$entityXmlObject = new EntityDataObject(
37+
$entityName,
38+
$entityType,
39+
$entity[DataGeneratorConstants::DATA_VALUES] ?? null,
40+
$entity[DataGeneratorConstants::REQUIRED_ENTITY] ?? null
41+
);
42+
43+
$entityObjects[$entityXmlObject->getName()] = $entityXmlObject;
44+
}
45+
}
46+
unset($entityName);
47+
unset($entity);
48+
49+
return $entityObjects;
50+
}
51+
52+
public function getEntity($entityName)
53+
{
54+
return $this->data[$entityName];
55+
}
56+
57+
public function getAllEntities()
58+
{
59+
return $this->data;
60+
}
61+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Magento\AcceptanceTestFramework\DataGenerator\Managers;
4+
5+
class EntityDataManager
6+
{
7+
private static $entityManagers = [];
8+
9+
public static function getDataManager($type)
10+
{
11+
$typeManagerName = $type . 'EntityManager';
12+
if (!array_key_exists($typeManagerName, self::$entityManagers)) {
13+
self::$entityManagers[$typeManagerName] = new DataManager($type);
14+
}
15+
16+
return self::$entityManagers[$typeManagerName];
17+
}
18+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?php
2+
3+
namespace Magento\AcceptanceTestFramework\DataGenerator\Objects;
4+
5+
use Magento\AcceptanceTestFramework\DataGenerator\DataGeneratorConstants;
6+
use Magento\AcceptanceTestFramework\DataGenerator\Managers\EntityDataManager;
7+
8+
class EntityDataObject
9+
{
10+
private $name;
11+
private $type;
12+
private $linkedEntities = []; //array of required entity name to corresponding type
13+
private $data = []; //array of Data Name to Data Value
14+
15+
16+
public function __construct($entityName, $entityType, $data, $linkedEntities)
17+
{
18+
$this->name = $entityName;
19+
$this->type = $entityType;
20+
21+
if ($data) {
22+
foreach ($data as $dataElement) {
23+
$dataElementKey = $dataElement[DataGeneratorConstants::DATA_ELEMENT_KEY];
24+
$dataElementValue = $dataElement[DataGeneratorConstants::DATA_ELEMENT_VALUE];
25+
26+
$this->data[$dataElementKey] = $dataElementValue;
27+
}
28+
unset($dataElement);
29+
}
30+
31+
if ($linkedEntities) {
32+
foreach ($linkedEntities as $linkedEntity) {
33+
$linkedEntityName = $linkedEntity[DataGeneratorConstants::REQUIRED_ENTITY_VALUE];
34+
$linkedEntityType = $linkedEntity[DataGeneratorConstants::REQUIRED_ENTITY_TYPE];
35+
36+
$this->linkedEntities[$linkedEntityName] = $linkedEntityType;
37+
}
38+
unset($linkedEntity);
39+
}
40+
}
41+
42+
public function hasLinkedEntity($entityName)
43+
{
44+
return array_key_exists($entityName, $this->linkedEntities);
45+
}
46+
47+
public function getName()
48+
{
49+
return $this->name;
50+
}
51+
52+
public function getType()
53+
{
54+
return $this->type;
55+
}
56+
57+
/**
58+
* This function retrieves data from an entity defined in xml. The data can be defined explicitly by the entity or
59+
* within any entity linked to or required by the entity. The function will evaluate in the following order:
60+
* 1) Data declared explicitly by the entity
61+
* 2) Data declared explicitly as a known linked entity
62+
* 3) Data declared by entities linked to linked entities
63+
* @param string $name
64+
* @param string $entityName
65+
* @return string
66+
*/
67+
public function getDataByName($name, $entityName = null)
68+
{
69+
if ($entityName == null) {
70+
return $this->data[$name];
71+
} elseif ($this->hasLinkedEntity($entityName)) {
72+
$entityTypeManager = EntityDataManager::getDataManager($this->linkedEntities[$entityName]);
73+
return $entityTypeManager->getEntity($entityName)->getDataByName($name);
74+
} else {
75+
foreach ($this->linkedEntities as $linkedEntityName => $linkedEntityType) {
76+
$result = EntityDataManager::getDataManager($linkedEntityType)->getEntity($linkedEntityName)
77+
->getDataByName($name, $entityName);
78+
79+
if ($result) {
80+
return $result;
81+
}
82+
}
83+
}
84+
}
85+
86+
public function persistEntity()
87+
{
88+
$this->persistDependencies();
89+
// TODO fetch json representation and api persistence mechanism
90+
}
91+
92+
private function persistDependencies()
93+
{
94+
// TODO call method to fetch json representation and api persistence mechanism
95+
}
96+
}

src/Magento/AcceptanceTestFramework/DataGenerator/Objects/EntityXmlObject.php

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)