Skip to content

Commit 545a266

Browse files
authored
Merge pull request #703 from magento/MQE-2126
MQE-2126: Can't modify DataEntity data
2 parents 3510e9f + c1aa918 commit 545a266

File tree

9 files changed

+66
-8
lines changed

9 files changed

+66
-8
lines changed

dev/tests/functional/tests/MFTF/DevDocs/Data/DeprecatedMessageData.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,7 @@
1111
<entity name="DeprecatedMessageData" deprecated="Entity is deprecated. Please use 'MessageData'.">
1212
<data key="message">Introduction to the Magento Functional Testing Framework</data>
1313
</entity>
14+
<entity name="MessageData">
15+
<data key="justSomeField">Some data</data>
16+
</entity>
1417
</entities>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="../../../../../../../src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd">
11+
<entity name="MessageData">
12+
<array key="numbers">
13+
<item>Something New</item>
14+
</array>
15+
</entity>
16+
</entities>

dev/tests/functional/tests/MFTF/DevDocs/Data/MessageData.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,11 @@
1010
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd">
1111
<entity name="MessageData">
1212
<data key="message">Introduction to the Magento Functional Testing Framework</data>
13+
<array key="numbers">
14+
<item name="zero">0</item>
15+
<item name="one">1</item>
16+
<item name="two">2</item>
17+
<item name="three">3</item>
18+
</array>
1319
</entity>
1420
</entities>

dev/tests/functional/tests/MFTF/DevDocs/Test/DevDocsTest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,10 @@
4646
<argument name="test" value="{{HelperData.entityField}}" />
4747
<argument name="entityTest" value="HelperData" />
4848
</actionGroup>
49+
50+
<assertEqualsCanonicalizing stepKey="assertMergedArray">
51+
<actualResult type="array">{{MessageData.numbers}}</actualResult>
52+
<expectedResult type="array">["Something New", "0", "1", "2", "3"]</expectedResult>
53+
</assertEqualsCanonicalizing>
4954
</test>
5055
</tests>

docs/data.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,11 @@ Attributes|Type|Use|Description
276276

277277
`<item>` is an individual piece of data to be passed in as part of the parent `<array>` type.
278278

279+
Attributes|Type|Use|Description
280+
---|---|---|---
281+
`name`|string|optional|Key attribute of <item/> entity in which to assign a value. By default numeric key will be generated.
282+
283+
279284
<!-- Link Definitions -->
280285
[`<array>`]: #array-tag
281286
[`<data>`]: #data-tag

etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@
157157
<argument name="idAttributes" xsi:type="array">
158158
<item name="/entities/entity" xsi:type="string">name</item>
159159
<item name="/entities/entity/(data|array)" xsi:type="string">key</item>
160+
<item name="/entities/entity/array/item" xsi:type="string">name</item>
160161
<item name="/entities/entity/requiredEntity" xsi:type="string">type</item>
161162
</argument>
162163
<argument name="mergeablePaths" xsi:type="array">

src/Magento/FunctionalTestingFramework/Config/Dom.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,8 @@ protected function getNodePathByParent(\DOMElement $node, $parentPath)
246246
$idAttribute = $this->nodeMergingConfig->getIdAttribute($path);
247247
if ($idAttribute) {
248248
foreach (explode('|', $idAttribute) as $idAttributeValue) {
249-
if ($value = $node->getAttribute($idAttributeValue)) {
250-
$path .= "[@{$idAttributeValue}='{$value}']";
249+
if ($node->hasAttribute($idAttributeValue)) {
250+
$path .= "[@{$idAttributeValue}='" . $node->getAttribute($idAttributeValue) . "']";
251251
break;
252252
}
253253
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ public function initDom($xml, $filename = null)
8181
}
8282
}
8383

84+
$itemNodes = $dom->getElementsByTagName('item');
85+
/** @var \DOMElement $itemNode */
86+
foreach ($itemNodes as $itemKey => $itemNode) {
87+
if ($itemNode->hasAttribute("name") == false) {
88+
$itemNode->setAttribute("name", (string)$itemKey);
89+
}
90+
}
8491
return $dom;
8592
}
8693
}

src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,32 @@
118118

119119
<xs:complexType name="arrayType">
120120
<xs:sequence>
121-
<xs:element name="item" type="xs:string" maxOccurs="unbounded" minOccurs="0">
122-
<xs:annotation>
123-
<xs:documentation>
124-
Individual piece of data to be passed in as part of the parrent array type.
125-
</xs:documentation>
126-
</xs:annotation>
121+
<xs:element name="item" type="itemType" maxOccurs="unbounded" minOccurs="0">
122+
<xs:annotation>
123+
<xs:documentation>
124+
Individual piece of data to be passed in as part of the parrent array type.
125+
</xs:documentation>
126+
</xs:annotation>
127127
</xs:element>
128128
</xs:sequence>
129129
<xs:attribute type="xs:string" name="key" use="required"/>
130130
</xs:complexType>
131131

132+
133+
<xs:complexType name="itemType">
134+
<xs:simpleContent>
135+
<xs:extension base="xs:string">
136+
<xs:attribute type="xs:string" name="name" use="optional">
137+
<xs:annotation>
138+
<xs:documentation>
139+
Key attribute of item pair.
140+
</xs:documentation>
141+
</xs:annotation>
142+
</xs:attribute>
143+
</xs:extension>
144+
</xs:simpleContent>
145+
</xs:complexType>
146+
132147
<xs:complexType name="requiredEntityType">
133148
<xs:simpleContent>
134149
<xs:extension base="xs:string">

0 commit comments

Comments
 (0)