Skip to content

Commit b350296

Browse files
committed
MQE-812: Tests/Action Groups should infer order based on the top level argument
- verification updates - dom.php refactor and fixes.
1 parent c030dcc commit b350296

File tree

10 files changed

+180
-6
lines changed

10 files changed

+180
-6
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
namespace Magento\AcceptanceTest\_default\Backend;
3+
4+
use Magento\FunctionalTestingFramework\AcceptanceTester;
5+
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\DataObjectHandler;
6+
use Magento\FunctionalTestingFramework\DataGenerator\Persist\DataPersistenceHandler;
7+
use Magento\FunctionalTestingFramework\DataGenerator\Objects\EntityDataObject;
8+
use \Codeception\Util\Locator;
9+
use Yandex\Allure\Adapter\Annotation\Features;
10+
use Yandex\Allure\Adapter\Annotation\Stories;
11+
use Yandex\Allure\Adapter\Annotation\Title;
12+
use Yandex\Allure\Adapter\Annotation\Description;
13+
use Yandex\Allure\Adapter\Annotation\Parameter;
14+
use Yandex\Allure\Adapter\Annotation\Severity;
15+
use Yandex\Allure\Adapter\Model\SeverityLevel;
16+
use Yandex\Allure\Adapter\Annotation\TestCaseId;
17+
18+
/**
19+
*/
20+
class MergeMassViaInsertAfterCest
21+
{
22+
/**
23+
* @Parameter(name = "AcceptanceTester", value="$I")
24+
* @param AcceptanceTester $I
25+
* @return void
26+
* @throws \Exception
27+
*/
28+
public function MergeMassViaInsertAfter(AcceptanceTester $I)
29+
{
30+
$I->fillField("#foo", "foo");
31+
$I->fillField("#bar", "bar");
32+
$I->click("#mergeOne");
33+
$I->click("#mergeTwo");
34+
$I->click("#mergeThree");
35+
$I->fillField("#baz", "baz");
36+
}
37+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
namespace Magento\AcceptanceTest\_default\Backend;
3+
4+
use Magento\FunctionalTestingFramework\AcceptanceTester;
5+
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\DataObjectHandler;
6+
use Magento\FunctionalTestingFramework\DataGenerator\Persist\DataPersistenceHandler;
7+
use Magento\FunctionalTestingFramework\DataGenerator\Objects\EntityDataObject;
8+
use \Codeception\Util\Locator;
9+
use Yandex\Allure\Adapter\Annotation\Features;
10+
use Yandex\Allure\Adapter\Annotation\Stories;
11+
use Yandex\Allure\Adapter\Annotation\Title;
12+
use Yandex\Allure\Adapter\Annotation\Description;
13+
use Yandex\Allure\Adapter\Annotation\Parameter;
14+
use Yandex\Allure\Adapter\Annotation\Severity;
15+
use Yandex\Allure\Adapter\Model\SeverityLevel;
16+
use Yandex\Allure\Adapter\Annotation\TestCaseId;
17+
18+
/**
19+
*/
20+
class MergeMassViaInsertBeforeCest
21+
{
22+
/**
23+
* @Parameter(name = "AcceptanceTester", value="$I")
24+
* @param AcceptanceTester $I
25+
* @return void
26+
* @throws \Exception
27+
*/
28+
public function MergeMassViaInsertBefore(AcceptanceTester $I)
29+
{
30+
$I->fillField("#foo", "foo");
31+
$I->click("#mergeOne");
32+
$I->click("#mergeTwo");
33+
$I->click("#mergeThree");
34+
$I->fillField("#bar", "bar");
35+
$I->fillField("#baz", "baz");
36+
}
37+
}

dev/tests/verification/TestModule/ActionGroup/FunctionalActionGroup.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,14 @@
5050
<grabTextFrom selector=".class" stepKey="grabTextData"/>
5151
<fillField stepKey="fill1" selector=".{$grabTextData}" userInput="$createSimpleData.field$"/>
5252
</actionGroup>
53+
<actionGroup name="FunctionalActionGroupForMassMergeBefore">
54+
<fillField selector="#foo" userInput="foo" stepKey="fillField1"/>
55+
<fillField selector="#bar" userInput="bar" stepKey="fillField2"/>
56+
<fillField selector="#baz" userInput="baz" stepKey="fillField3"/>
57+
</actionGroup>
58+
<actionGroup name="FunctionalActionGroupForMassMergeAfter">
59+
<fillField selector="#foo" userInput="foo" stepKey="fillField1"/>
60+
<fillField selector="#bar" userInput="bar" stepKey="fillField2"/>
61+
<fillField selector="#baz" userInput="baz" stepKey="fillField3"/>
62+
</actionGroup>
5363
</actionGroups>

dev/tests/verification/TestModule/ActionGroup/MergeFunctionalActionGroup.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,16 @@
1313
<click stepKey="myMergedClick" selector=".merge .{{myArg.lastname}}" after="amOnPage1"/>
1414
<remove keyForRemoval="deleteMe"/>
1515
</actionGroup>
16+
17+
<actionGroup name="FunctionalActionGroupForMassMergeBefore" insertBefore="fillField2">
18+
<click stepKey="clickOne" selector="#mergeOne"/>
19+
<click stepKey="clickTwo" selector="#mergeTwo"/>
20+
<click stepKey="clickThree" selector="#mergeThree"/>
21+
</actionGroup>
22+
23+
<actionGroup name="FunctionalActionGroupForMassMergeAfter" insertAfter="fillField2">
24+
<click stepKey="clickOne" selector="#mergeOne"/>
25+
<click stepKey="clickTwo" selector="#mergeTwo"/>
26+
<click stepKey="clickThree" selector="#mergeThree"/>
27+
</actionGroup>
1628
</actionGroups>

dev/tests/verification/TestModule/Test/ActionGroupFunctionalTest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,10 @@
182182
<actionGroup ref="FunctionalActionGroup" stepKey="afterGroup"/>
183183
</after>
184184
</test>
185+
<test name="ActionGroupMergedViaInsertBefore">
186+
<actionGroup ref="FunctionalActionGroupForMassMergeBefore" stepKey="keyone"/>
187+
</test>
188+
<test name="ActionGroupMergedViaInsertAfter">
189+
<actionGroup ref="FunctionalActionGroupForMassMergeAfter" stepKey="keyone"/>
190+
</test>
185191
</tests>

dev/tests/verification/TestModule/Test/BasicFunctionalTest.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,14 @@
119119
<waitForJS function="someJsFunction" time="30" stepKey="waitForJSKey1" />
120120
<waitForText selector=".functionalTestSelector" userInput="someInput" time="30" stepKey="waitForText1"/>
121121
</test>
122+
<test name="MergeMassViaInsertBefore">
123+
<fillField selector="#foo" userInput="foo" stepKey="fillField1"/>
124+
<fillField selector="#bar" userInput="bar" stepKey="fillField2"/>
125+
<fillField selector="#baz" userInput="baz" stepKey="fillField3"/>
126+
</test>
127+
<test name="MergeMassViaInsertAfter">
128+
<fillField selector="#foo" userInput="foo" stepKey="fillField1"/>
129+
<fillField selector="#bar" userInput="bar" stepKey="fillField2"/>
130+
<fillField selector="#baz" userInput="baz" stepKey="fillField3"/>
131+
</test>
122132
</tests>

dev/tests/verification/TestModule/Test/MergeFunctionalTest.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,14 @@
4545
<fillField stepKey="fillField1" selector="{{SampleSection.mergeElement}}" userInput="{{DefaultPerson.mergedField}}"/>
4646
<fillField stepKey="fillField2" selector="{{SampleSection.newElement}}" userInput="{{DefaultPerson.newField}}" />
4747
</test>
48+
<test name="MergeMassViaInsertBefore" insertBefore="fillField2">
49+
<click stepKey="clickOne" selector="#mergeOne"/>
50+
<click stepKey="clickTwo" selector="#mergeTwo"/>
51+
<click stepKey="clickThree" selector="#mergeThree"/>
52+
</test>
53+
<test name="MergeMassViaInsertAfter" insertAfter="fillField2">
54+
<click stepKey="clickOne" selector="#mergeOne"/>
55+
<click stepKey="clickTwo" selector="#mergeTwo"/>
56+
<click stepKey="clickThree" selector="#mergeThree"/>
57+
</test>
4858
</tests>

dev/tests/verification/Tests/ActionGroupMergeGenerationTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,26 @@ public function testArgumentWithSameNameAsElement()
108108
{
109109
$this->generateAndCompareTest('ArgumentWithSameNameAsElement');
110110
}
111+
112+
/**
113+
* Test an action group with a merge counterpart that's merged via insertBefore
114+
*
115+
* @throws \Exception
116+
* @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException
117+
*/
118+
public function testMergedActionGroupViaInsertBefore()
119+
{
120+
$this->generateAndCompareTest('ActionGroupMergedViaInsertBefore');
121+
}
122+
123+
/**
124+
* Test an action group with a merge counterpart that's merged via insertAfter
125+
*
126+
* @throws \Exception
127+
* @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException
128+
*/
129+
public function testMergedActionGroupViaInsertAfter()
130+
{
131+
$this->generateAndCompareTest('ActionGroupMergedViaInsertAfter');
132+
}
111133
}

dev/tests/verification/Tests/MergedGenerationTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,26 @@ public function testParsedArray()
4040
$entity = DataObjectHandler::getInstance()->getObject('testEntity');
4141
$this->assertCount(3, $entity->getLinkedEntities());
4242
}
43+
44+
/**
45+
* Tests generation of a test merge file via insertBefore
46+
*
47+
* @throws \Exception
48+
* @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException
49+
*/
50+
public function testMergeMassViaInsertBefore()
51+
{
52+
$this->generateAndCompareTest('MergeMassViaInsertBefore');
53+
}
54+
55+
/**
56+
* Tests generation of a test merge file via insertBefore
57+
*
58+
* @throws \Exception
59+
* @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException
60+
*/
61+
public function testMergeMassViaInsertAfter()
62+
{
63+
$this->generateAndCompareTest('MergeMassViaInsertAfter');
64+
}
4365
}

src/Magento/FunctionalTestingFramework/Test/Config/Dom.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Magento\FunctionalTestingFramework\Exceptions\XmlException;
1111
use Magento\FunctionalTestingFramework\Config\Dom\NodeMergingConfig;
1212
use Magento\FunctionalTestingFramework\Config\Dom\NodePathMatcher;
13+
use Magento\FunctionalTestingFramework\Test\Objects\ActionObject;
1314

1415
class Dom extends \Magento\FunctionalTestingFramework\Config\Dom
1516
{
@@ -106,28 +107,35 @@ public function merge($xml, $filename = null, $exceptionCollector = null)
106107
* Parses DOM Structure's actions and appends a before/after attribute along with the parent's stepkey reference.
107108
*
108109
* @param \DOMElement $testNode
109-
* @param string $pointerType
110-
* @param string $pointerKey
110+
* @param string $insertType
111+
* @param string $insertKey
111112
* @param string $filename
112113
* @param ExceptionCollector $exceptionCollector
113114
* @return void
114115
*/
115-
protected function appendMergePointerToActions($testNode, $pointerType, $pointerKey, $filename, $exceptionCollector)
116+
protected function appendMergePointerToActions($testNode, $insertType, $insertKey, $filename, $exceptionCollector)
116117
{
117118
$childNodes = $testNode->childNodes;
119+
$previousStepKey = $insertKey;
120+
$actionInsertType = ActionObject::MERGE_ACTION_ORDER_AFTER;
121+
if ($insertType == self::TEST_MERGE_POINTER_BEFORE) {
122+
$actionInsertType = ActionObject::MERGE_ACTION_ORDER_BEFORE;
123+
}
118124
for ($i = 0; $i < $childNodes->length; $i++) {
119125
$currentNode = $childNodes->item($i);
120126
if (!is_a($currentNode, \DOMElement::class)) {
121127
continue;
122128
}
123129
if ($currentNode->hasAttribute('stepKey')) {
124-
if ($currentNode->hasAttribute($pointerType) && $testNode->hasAttribute($pointerType)) {
130+
if ($currentNode->hasAttribute($insertType) && $testNode->hasAttribute($insertType)) {
125131
$errorMsg = "Actions cannot have merge pointers if contained in tests that has a merge pointer.";
126132
$errorMsg .= "\n\tstepKey: {$currentNode->getAttribute('stepKey')}\tin file: {$filename}";
127133
$exceptionCollector->addError($filename, $errorMsg);
128-
continue;
129134
}
130-
$currentNode->setAttribute($pointerType, $pointerKey);
135+
$currentNode->setAttribute($actionInsertType, $previousStepKey);
136+
$previousStepKey = $currentNode->getAttribute('stepKey');
137+
// All actions after the first need to insert AFTER.
138+
$actionInsertType = ActionObject::MERGE_ACTION_ORDER_AFTER;
131139
}
132140
}
133141
}

0 commit comments

Comments
 (0)