Skip to content

Commit bd0996a

Browse files
committed
Merge branch 'sprint-develop' of github.com:magento-pangolin/magento2-acceptance-test-framework into 'sprint-develop' of github.com:magento-pangolin/magento2-functional-testing-framework
2 parents 9204724 + 803c744 commit bd0996a

23 files changed

+593
-178
lines changed

composer.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
},
1616
"autoload": {
1717
"psr-4": {
18-
"Magento\\FunctionalTestingFramework\\": [
19-
"src/Magento/FunctionalTestingFramework"
20-
]
18+
"Magento\\FunctionalTestingFramework\\": ["src/Magento/FunctionalTestingFramework"]
2119
}
2220
}
2321
}

etc/di.xml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@
224224
<item name="/config/cest/test" xsi:type="string">name</item>
225225
<item name="/config/cest/test/entity/data" xsi:type="string">key</item>
226226
<item name="/config/cest/test/entity/required-entity" xsi:type="string">key</item>
227+
<item name="/config/cest/test/actionGroup/argument" xsi:type="string">name</item>
227228
<item name="/config/cest/test/createData/required-entity" xsi:type="string">name</item>
228229
<item name="/config/cest/test/(acceptPopup|amOnPage|amOnUrl|appendField|assertArraySubset|attachFile|cancelPopup|checkOption|click|clickWithLeftButton|clickWithRightButton|closeTab|createData|deleteData|dontSee|dontSeeCheckboxIsChecked|dontSeeCookie|dontSeeCurrentUrlEquals|dontSeeCurrentUrlMatches|dontSeeElement|dontSeeElementInDOM|dontSeeInCurrentUrl|dontSeeInField|dontSeeInPageSource|dontSeeInSource|dontSeeInTitle|dontSeeLink|dontSeeOptionIsSelected|doubleClick|dragAndDrop|entity|executeJS|fillField|formatMoney|grabAttributeFrom|grabCookie|grabFromCurrentUrl|grabMultiple|grabPageSource|grabTextFrom|grabValueFrom|loadSessionSnapshot|loginAsAdmin|makeScreenshot|maximizeWindow|moveBack|moveForward|moveMouseOver|openNewTab|pauseExecution|performOn|pressKey|reloadPage|resetCookie|resizeWindow|scrollTo|searchAndMultiSelectOption|see|seeCheckboxIsChecked|seeCookie|seeCurrentUrlEquals|seeCurrentUrlMatches|seeElement|seeElementInDOM|seeInCurrentUrl|seeInField|seeInFormFields|seeInPageSource|seeInPopup|seeInSource|seeInTitle|seeLink|seeNumberOfElements|seeOptionIsSelected|selectOption|setCookie|switchToIFrame|switchToNextTab|switchToPreviousTab|switchToWindow|typeInPopup|uncheckOption|unselectOption|wait|waitForAjaxLoad|waitForElement|waitForElementChange|waitForElementNotVisible|waitForElementVisible|waitForJS|waitForPageLoad|waitForText)" xsi:type="string">mergeKey</item>
229230
</argument>
@@ -249,6 +250,7 @@
249250
<item name="/config/cest/after/entity/data" xsi:type="string">key</item>
250251
<item name="/config/cest/after/entity/required-entity" xsi:type="string">key</item>
251252
<item name="/config/cest/after/createData/required-entity" xsi:type="string">name</item>
253+
<item name="/config/cest/test/actionGroup/argument" xsi:type="string">name</item>
252254
</argument>
253255
<argument name="numericArrays" xsi:type="array">
254256
<item name="/config/cest/annotations/env" xsi:type="string">/config/cest/annotations/env</item>
@@ -298,19 +300,21 @@
298300
<argument name="converter" xsi:type="object">Magento\FunctionalTestingFramework\Config\ActionGroupDataConverter</argument>
299301
<argument name="schemaLocator" xsi:type="object">Magento\FunctionalTestingFramework\Config\SchemaLocator\TestData</argument>
300302
<argument name="idAttributes" xsi:type="array">
301-
<item name="/config/actions" xsi:type="string">name</item>
302-
<item name="/config/actions/(acceptPopup|amOnPage|appendField|assertArraySubset|attachFile|cancelPopup|checkOption|click|clickWithLeftButton|clickWithRightButton|closeTab|createData|deleteData|dontSee|dontSeeCheckboxIsChecked|dontSeeCookie|dontSeeCurrentUrlEquals|dontSeeCurrentUrlMatches|dontSeeElement|dontSeeElementInDOM|dontSeeInCurrentUrl|dontSeeInField|dontSeeInPageSource|dontSeeInSource|dontSeeInTitle|dontSeeLink|dontSeeOptionIsSelected|doubleClick|dragAndDrop|executeJS|fillField|formatMoney|grabAttributeFrom|grabCookie|grabFromCurrentUrl|grabMultiple|grabPageSource|grabTextFrom|grabValueFrom|loadSessionSnapshot|loginAsAdmin|makeScreenshot|maximizeWindow|moveBack|moveForward|moveMouseOver|openNewTab|pauseExecution|performOn|pressKey|reloadPage|resetCookie|resizeWindow|scrollTo|searchAndMultiSelectOption|see|seeCheckboxIsChecked|seeCookie|seeCurrentUrlEquals|seeCurrentUrlMatches|seeElement|seeElementInDOM|seeInCurrentUrl|seeInField|seeInFormFields|seeInPageSource|seeInPopup|seeInSource|seeInTitle|seeLink|seeNumberOfElements|seeOptionIsSelected|selectOption|setCookie|switchToIFrame|switchToNextTab|switchToPreviousTab|switchToWindow|typeInPopup|uncheckOption|unselectOption|wait|waitForAjaxLoad|waitForElement|waitForElementChange|waitForElementNotVisible|waitForElementVisible|waitForJS|waitForPageLoad|waitForText)" xsi:type="string">mergeKey</item>
303+
<item name="/config/actionGroup" xsi:type="string">name</item>
304+
<item name="/config/actionGroup/arguments/argument" xsi:type="string">name</item>
305+
<item name="/config/actionGroup/(acceptPopup|amOnPage|appendField|assertArraySubset|attachFile|cancelPopup|checkOption|click|clickWithLeftButton|clickWithRightButton|closeTab|createData|deleteData|dontSee|dontSeeCheckboxIsChecked|dontSeeCookie|dontSeeCurrentUrlEquals|dontSeeCurrentUrlMatches|dontSeeElement|dontSeeElementInDOM|dontSeeInCurrentUrl|dontSeeInField|dontSeeInPageSource|dontSeeInSource|dontSeeInTitle|dontSeeLink|dontSeeOptionIsSelected|doubleClick|dragAndDrop|executeJS|fillField|formatMoney|grabAttributeFrom|grabCookie|grabFromCurrentUrl|grabMultiple|grabPageSource|grabTextFrom|grabValueFrom|loadSessionSnapshot|loginAsAdmin|makeScreenshot|maximizeWindow|moveBack|moveForward|moveMouseOver|openNewTab|pauseExecution|performOn|pressKey|reloadPage|resetCookie|resizeWindow|scrollTo|searchAndMultiSelectOption|see|seeCheckboxIsChecked|seeCookie|seeCurrentUrlEquals|seeCurrentUrlMatches|seeElement|seeElementInDOM|seeInCurrentUrl|seeInField|seeInFormFields|seeInPageSource|seeInPopup|seeInSource|seeInTitle|seeLink|seeNumberOfElements|seeOptionIsSelected|selectOption|setCookie|switchToIFrame|switchToNextTab|switchToPreviousTab|switchToWindow|typeInPopup|uncheckOption|unselectOption|wait|waitForAjaxLoad|waitForElement|waitForElementChange|waitForElementNotVisible|waitForElementVisible|waitForJS|waitForPageLoad|waitForText)" xsi:type="string">mergeKey</item>
303306
</argument>
304-
<argument name="fileName" xsi:type="string">*-action_group.xml</argument>
305-
<argument name="defaultScope" xsi:type="string">Cest</argument>
307+
<argument name="fileName" xsi:type="string">*ActionGroup.xml</argument>
308+
<argument name="defaultScope" xsi:type="string">ActionGroup</argument>
306309
</arguments>
307310
</virtualType>
308311

309312
<virtualType name="Magento\FunctionalTestingFramework\Test\Config\Dom\ActionGroupArrayNodeConfig" type="Magento\FunctionalTestingFramework\Config\Dom\ArrayNodeConfig">
310313
<arguments>
311314
<argument name="assocArrayAttributes" xsi:type="array">
312-
<item name="/config/actions/(acceptPopup|amOnPage|appendField|assertArraySubset|attachFile|cancelPopup|checkOption|click|clickWithLeftButton|clickWithRightButton|closeTab|createData|deleteData|dontSee|dontSeeCheckboxIsChecked|dontSeeCookie|dontSeeCurrentUrlEquals|dontSeeCurrentUrlMatches|dontSeeElement|dontSeeElementInDOM|dontSeeInCurrentUrl|dontSeeInField|dontSeeInPageSource|dontSeeInSource|dontSeeInTitle|dontSeeLink|dontSeeOptionIsSelected|doubleClick|dragAndDrop|executeJS|fillField|formatMoney|grabAttributeFrom|grabCookie|grabFromCurrentUrl|grabMultiple|grabPageSource|grabTextFrom|grabValueFrom|loadSessionSnapshot|loginAsAdmin|makeScreenshot|maximizeWindow|moveBack|moveForward|moveMouseOver|openNewTab|pauseExecution|performOn|pressKey|reloadPage|resetCookie|resizeWindow|scrollTo|searchAndMultiSelectOption|see|seeCheckboxIsChecked|seeCookie|seeCurrentUrlEquals|seeCurrentUrlMatches|seeElement|seeElementInDOM|seeInCurrentUrl|seeInField|seeInFormFields|seeInPageSource|seeInPopup|seeInSource|seeInTitle|seeLink|seeNumberOfElements|seeOptionIsSelected|selectOption|setCookie|switchToIFrame|switchToNextTab|switchToPreviousTab|switchToWindow|typeInPopup|uncheckOption|unselectOption|wait|waitForAjaxLoad|waitForElement|waitForElementChange|waitForElementNotVisible|waitForElementVisible|waitForJS|waitForPageLoad|waitForText)" xsi:type="string">mergeKey</item>
313-
<item name="/config/actions" xsi:type="string">name</item>
315+
<item name="/config/actionGroup/(acceptPopup|amOnPage|appendField|assertArraySubset|attachFile|cancelPopup|checkOption|click|clickWithLeftButton|clickWithRightButton|closeTab|createData|deleteData|dontSee|dontSeeCheckboxIsChecked|dontSeeCookie|dontSeeCurrentUrlEquals|dontSeeCurrentUrlMatches|dontSeeElement|dontSeeElementInDOM|dontSeeInCurrentUrl|dontSeeInField|dontSeeInPageSource|dontSeeInSource|dontSeeInTitle|dontSeeLink|dontSeeOptionIsSelected|doubleClick|dragAndDrop|executeJS|fillField|formatMoney|grabAttributeFrom|grabCookie|grabFromCurrentUrl|grabMultiple|grabPageSource|grabTextFrom|grabValueFrom|loadSessionSnapshot|loginAsAdmin|makeScreenshot|maximizeWindow|moveBack|moveForward|moveMouseOver|openNewTab|pauseExecution|performOn|pressKey|reloadPage|resetCookie|resizeWindow|scrollTo|searchAndMultiSelectOption|see|seeCheckboxIsChecked|seeCookie|seeCurrentUrlEquals|seeCurrentUrlMatches|seeElement|seeElementInDOM|seeInCurrentUrl|seeInField|seeInFormFields|seeInPageSource|seeInPopup|seeInSource|seeInTitle|seeLink|seeNumberOfElements|seeOptionIsSelected|selectOption|setCookie|switchToIFrame|switchToNextTab|switchToPreviousTab|switchToWindow|typeInPopup|uncheckOption|unselectOption|wait|waitForAjaxLoad|waitForElement|waitForElementChange|waitForElementNotVisible|waitForElementVisible|waitForJS|waitForPageLoad|waitForText)" xsi:type="string">mergeKey</item>
316+
<item name="/config/actionGroup" xsi:type="string">name</item>
317+
<item name="/config/actionGroup/arguments/argument" xsi:type="string">name</item>
314318
</argument>
315319
</arguments>
316320
</virtualType>

src/Magento/FunctionalTestingFramework/DataGenerator/Api/ApiExecutor.php

Lines changed: 58 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,34 @@ class ApiExecutor
2929

3030
/**
3131
* The entity object data being created, updated, or deleted.
32+
*
3233
* @var EntityDataObject $entityObject
3334
*/
3435
private $entityObject;
3536

3637
/**
3738
* The json definitions used to map the operation.
39+
*
3840
* @var JsonDefinition $jsonDefinition
3941
*/
4042
private $jsonDefinition;
4143

4244
/**
4345
* The array of dependentEntities this class can be given. When finding linked entities, APIExecutor
4446
* uses this repository before looking for static data.
47+
*
4548
* @var array
4649
*/
4750
private $dependentEntities = [];
4851

52+
/**
53+
* The array of entity name and number of objects being created,
54+
* we don't need to track objects in update and delete operations.
55+
*
56+
* @var array
57+
*/
58+
private static $entitySequences = [];
59+
4960
/**
5061
* ApiSubObject constructor.
5162
* @param string $operation
@@ -82,7 +93,10 @@ public function executeRequest()
8293

8394
if (!empty($matchedParams)) {
8495
foreach ($matchedParams[0] as $paramKey => $paramValue) {
85-
$param = $this->entityObject->getDataByName($matchedParams[1][$paramKey]);
96+
$param = $this->entityObject->getDataByName(
97+
$matchedParams[1][$paramKey],
98+
EntityDataObject::CEST_UNIQUE_VALUE
99+
);
86100
$apiClientUrl = str_replace($paramValue, $param, $apiClientUrl);
87101
}
88102
}
@@ -139,6 +153,7 @@ private function getAuthorizationHeader($authUrl)
139153
private function convertJsonArray($entityObject, $jsonArrayMetadata)
140154
{
141155
$jsonArray = [];
156+
self::incrementSequence($entityObject->getName());
142157

143158
foreach ($jsonArrayMetadata as $jsonElement) {
144159
if ($jsonElement->getType() == JsonObjectExtractor::JSON_OBJECT_OBJ_NAME) {
@@ -149,23 +164,21 @@ private function convertJsonArray($entityObject, $jsonArrayMetadata)
149164
$jsonElementType = $jsonElement->getValue();
150165

151166
if (in_array($jsonElementType, ApiExecutor::PRIMITIVE_TYPES)) {
152-
$elementData = $entityObject->getDataByName($jsonElement->getKey());
153-
$elementUniquenessData = $entityObject->getUniquenessDataByName($jsonElement->getKey());
154-
if ($elementUniquenessData) {
155-
if ($elementUniquenessData == 'prefix') {
156-
if (DataObjectHandler::UNIQUENESS_FUNCTION == 'msq') {
157-
$elementData = msq($entityObject->getName().'.' . $jsonElement->getKey()).$elementData;
158-
} elseif (DataObjectHandler::UNIQUENESS_FUNCTION == 'msqs') {
159-
$elementData = msqs($entityObject->getName().'.' . $jsonElement->getKey()).$elementData;
160-
}
161-
} elseif ($elementUniquenessData == 'suffix') {
162-
if (DataObjectHandler::UNIQUENESS_FUNCTION == 'msq') {
163-
$elementData .= msq($entityObject->getName() . '.'. $jsonElement->getKey());
164-
} elseif (DataObjectHandler::UNIQUENESS_FUNCTION == 'msqs') {
165-
$elementData .= msqs($entityObject->getName() . '.'. $jsonElement->getKey());
166-
}
167+
$elementData = $entityObject->getDataByName(
168+
$jsonElement->getKey(),
169+
EntityDataObject::CEST_UNIQUE_VALUE
170+
);
171+
172+
if (array_key_exists($jsonElement->getKey(), $entityObject->getUniquenessData())) {
173+
$uniqueData = $entityObject->getUniquenessDataByName($jsonElement->getKey());
174+
if ($uniqueData === 'suffix') {
175+
$elementData .= (string)self::getSequence($entityObject->getName());
176+
} else {
177+
$elementData = (string)self::getSequence($entityObject->getName())
178+
. $elementData;
167179
}
168180
}
181+
169182
$jsonArray[$jsonElement->getKey()] = $this->castValue($jsonElementType, $elementData);
170183
} else {
171184
$entityNamesOfType = $entityObject->getLinkedEntitiesOfType($jsonElementType);
@@ -242,6 +255,35 @@ public function getEncodedJsonString()
242255
return json_encode($jsonMetadataArray, JSON_PRETTY_PRINT);
243256
}
244257

258+
/**
259+
* Increment an entity's sequence number by 1.
260+
*
261+
* @param string $entityName
262+
* @return void
263+
*/
264+
private static function incrementSequence($entityName)
265+
{
266+
if (array_key_exists($entityName, self::$entitySequences)) {
267+
self::$entitySequences[$entityName]++;
268+
} else {
269+
self::$entitySequences[$entityName] = 1;
270+
}
271+
}
272+
273+
/**
274+
* Get the current sequence number for an entity.
275+
*
276+
* @param string $entityName
277+
* @return int
278+
*/
279+
private static function getSequence($entityName)
280+
{
281+
if (array_key_exists($entityName, self::$entitySequences)) {
282+
return self::$entitySequences[$entityName];
283+
}
284+
return 0;
285+
}
286+
245287
// @codingStandardsIgnoreStart
246288
/**
247289
* This function takes a string value and its corresponding type and returns the string cast

src/Magento/FunctionalTestingFramework/DataGenerator/Api/EntityApiHandler.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66

77
namespace Magento\FunctionalTestingFramework\DataGenerator\Api;
88

9-
use Codeception\Test\Cest;
109
use Magento\FunctionalTestingFramework\Config\Data;
1110
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\DataObjectHandler;
1211
use Magento\FunctionalTestingFramework\DataGenerator\Objects\EntityDataObject;
1312
use Magento\FunctionalTestingFramework\Test\Handlers\CestObjectHandler;
14-
use Magento\FunctionalTestingFramework\Test\Managers\CestArrayProcessor;
1513
use Magento\FunctionalTestingFramework\Util\TestGenerator;
1614

1715
class EntityApiHandler
@@ -57,10 +55,11 @@ public function createEntity()
5755
$result = $apiExecutor->executeRequest();
5856

5957
$this->createdObject = new EntityDataObject(
60-
'__created' . $this->entityObject->getName(),
58+
$this->entityObject->getName(),
6159
$this->entityObject->getType(),
6260
json_decode($result, true),
63-
null
61+
null,
62+
null // No uniqueness data is needed to be further processed.
6463
);
6564
}
6665

@@ -93,7 +92,11 @@ public function getCreatedObject()
9392
*/
9493
public function getCreatedDataByName($dataName)
9594
{
96-
return $this->createdObject->getDataByName($dataName);
95+
$data = $this->createdObject->getDataByName($dataName, EntityDataObject::NO_UNIQUE_PROCESS);
96+
if (empty($data)) {
97+
$data = $this->entityObject->getDataByName($dataName, EntityDataObject::CEST_UNIQUE_VALUE);
98+
}
99+
return $data;
97100
}
98101

99102
// TODO add update function

src/Magento/FunctionalTestingFramework/DataGenerator/Handlers/DataObjectHandler.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ class DataObjectHandler implements ObjectHandlerInterface
3737
const DATA_ELEMENT_UNIQUENESS_ATTR = 'unique';
3838
const DATA_ELEMENT_UNIQUENESS_ATTR_VALUE_PREFIX = 'prefix';
3939
const DATA_ELEMENT_UNIQUENESS_ATTR_VALUE_SUFFIX = 'suffix';
40-
const UNIQUENESS_FUNCTION = 'msq';
4140

4241
const ARRAY_VALUES = 'array';
4342
const ARRAY_ELEMENT_KEY = 'key';
@@ -130,6 +129,7 @@ private function parseEnvVariables()
130129
self::ENV_DATA_OBJECT_NAME,
131130
'environment',
132131
$envData,
132+
null,
133133
null
134134
);
135135
$this->data[$envDataObject->getName()] = $envDataObject;

0 commit comments

Comments
 (0)