Skip to content

Commit 75582e3

Browse files
committed
MQE-2247: Implement additional <section> and <operation> entity use cases in SVC tool
Added use cases for 1. operation changed 2. operation child element added
1 parent eb3866b commit 75582e3

File tree

19 files changed

+479
-8
lines changed
  • src
  • tests/Unit/Console/Command
    • CompareSourceCommandTest/_files/mftf
      • metadata-auth-changed
        • source-code-after/Magento/TestModule/Test/Mftf
        • source-code-before/Magento/TestModule/Test/Mftf
      • metadata-bottom-level-child-added
        • source-code-after/Magento/TestModule/Test/Mftf
        • source-code-before/Magento/TestModule/Test/Mftf
      • metadata-datatype-changed
        • source-code-after/Magento/TestModule/Test/Mftf
        • source-code-before/Magento/TestModule/Test/Mftf
      • metadata-method-changed
        • source-code-after/Magento/TestModule/Test/Mftf
        • source-code-before/Magento/TestModule/Test/Mftf
      • metadata-top-level-child-added
        • source-code-after/Magento/TestModule/Test/Mftf
        • source-code-before/Magento/TestModule/Test/Mftf
      • metadata-type-changed
        • source-code-after/Magento/TestModule/Test/Mftf
        • source-code-before/Magento/TestModule/Test/Mftf
      • metadata-url-changed
        • source-code-after/Magento/TestModule/Test/Mftf
        • source-code-before/Magento/TestModule/Test/Mftf

19 files changed

+479
-8
lines changed

src/Analyzer/Mftf/AbstractEntityAnalyzer.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,10 @@ public function findAddedElementsInArray(
190190
if (!isset($newChild['attributes'][$elementIdentifier])) {
191191
continue;
192192
}
193-
$beforeFieldKey = $newChild['attributes'][$elementIdentifier];
193+
$afterFieldKey = $newChild['attributes'][$elementIdentifier];
194194
$matchingElement = $this->findMatchingElement($newChild, $beforeArray, $elementIdentifier);
195195
if ($matchingElement === null) {
196-
$operation = new $operationClass($filenames, $fullOperationTarget . '/' . $beforeFieldKey);
196+
$operation = new $operationClass($filenames, $fullOperationTarget . '/' . $afterFieldKey);
197197
$report->add(MftfReport::MFTF_REPORT_CONTEXT, $operation);
198198
}
199199
}
@@ -252,11 +252,11 @@ public function findAddedEntitiesInModule(
252252
if (!isset($newChild['type']) || $newChild['type'] !== $entityType) {
253253
continue;
254254
}
255-
$beforeFieldKey = $newChild['attributes']['name'];
255+
$afterFieldKey = $newChild['attributes']['name'];
256256
$matchingElement = $this->findMatchingElement($newChild, $beforeArray, 'name');
257257
if ($matchingElement === null) {
258258
$filenames = implode(', ', $newChild['filePaths']);
259-
$operation = new $operationClass($filenames, $fullOperationTarget . '/' . $beforeFieldKey);
259+
$operation = new $operationClass($filenames, $fullOperationTarget . '/' . $afterFieldKey);
260260
$report->add(MftfReport::MFTF_REPORT_CONTEXT, $operation);
261261
}
262262
}

src/Analyzer/Mftf/MetadataAnalyzer.php

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
use Magento\SemanticVersionChecker\MftfReport;
1010
use Magento\SemanticVersionChecker\Operation\Mftf\Metadata\MetadataAdded;
11+
use Magento\SemanticVersionChecker\Operation\Mftf\Metadata\MetadataChanged;
12+
use Magento\SemanticVersionChecker\Operation\Mftf\Metadata\MetadataChildAdded;
1113
use Magento\SemanticVersionChecker\Operation\Mftf\Metadata\MetadataChildRemoved;
1214
use Magento\SemanticVersionChecker\Operation\Mftf\Metadata\MetadataRemoved;
1315
use Magento\SemanticVersionChecker\Scanner\MftfScanner;
@@ -54,10 +56,31 @@ public function analyze(Registry $registryBefore, Registry $registryAfter)
5456
continue;
5557
}
5658

57-
// Build simple metadata tree for comparison
59+
// Validate metadata attribute changes
60+
$this->matchAndValidateAttributes(
61+
$beforeEntity['attributes'],
62+
$afterEntities[$module][$entityName],
63+
$this->getReport(),
64+
$filenames,
65+
[AbstractEntityAnalyzer::DEFAULT_OPERATION_KEY => MetadataChanged::class],
66+
$operationTarget
67+
);
68+
69+
// Validate child elements removed
5870
$this->recursiveCompare(
5971
$beforeEntity,
6072
$afterEntities[$module][$entityName],
73+
MetadataChildRemoved::class,
74+
$operationTarget,
75+
$filenames,
76+
$this->getReport()
77+
);
78+
79+
// Validate child elements added
80+
$this->recursiveCompare(
81+
$afterEntities[$module][$entityName],
82+
$beforeEntity,
83+
MetadataChildAdded::class,
6184
$operationTarget,
6285
$filenames,
6386
$this->getReport()
@@ -72,22 +95,23 @@ public function analyze(Registry $registryBefore, Registry $registryAfter)
7295
*
7396
* @param array $beforeEntity
7497
* @param array $afterEntity
98+
* @param string $operationClass
7599
* @param string $operationTarget
76100
* @param string $filenames
77101
* @param Report $report
78102
* @return void
79103
*/
80-
public function recursiveCompare($beforeEntity, $afterEntity, $operationTarget, $filenames, $report)
104+
public function recursiveCompare($beforeEntity, $afterEntity, $operationClass, $operationTarget, $filenames, $report)
81105
{
82106
$beforeChildren = $beforeEntity['value'] ?? [];
107+
$afterChildren = $afterEntity['value'] ?? [];
83108
if (!is_array($beforeChildren)) {
84109
return;
85110
}
86111
foreach ($beforeChildren as $beforeChild) {
87112
$beforeType = $beforeChild['name'];
88113
$beforeFieldKey = $beforeChild['attributes']['key'] ?? null;
89114
$afterFound = null;
90-
$afterChildren = $afterEntity['value'] ?? [];
91115
foreach ($afterChildren as $afterChild) {
92116
if ($afterChild['name'] !== $beforeType) {
93117
continue;
@@ -99,12 +123,13 @@ public function recursiveCompare($beforeEntity, $afterEntity, $operationTarget,
99123
}
100124
}
101125
if ($afterFound === null) {
102-
$operation = new MetadataChildRemoved($filenames, $operationTarget . '/' . $beforeFieldKey);
126+
$operation = new $operationClass($filenames, $operationTarget . '/' . $beforeFieldKey);
103127
$report->add(MftfReport::MFTF_REPORT_CONTEXT, $operation);
104128
} else {
105129
$this->recursiveCompare(
106130
$beforeChild,
107131
$afterFound,
132+
$operationClass,
108133
$operationTarget . '/' . $beforeFieldKey,
109134
$filenames,
110135
$report
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace Magento\SemanticVersionChecker\Operation\Mftf\Metadata;
4+
5+
use Magento\SemanticVersionChecker\Operation\Mftf\MftfOperation;
6+
use PHPSemVerChecker\SemanticVersioning\Level;
7+
8+
/**
9+
* Metadata Entity was modified
10+
*/
11+
class MetadataChanged extends MftfOperation
12+
{
13+
/**
14+
* Error codes.
15+
*
16+
* @var array
17+
*/
18+
protected $code = 'M241';
19+
20+
/**
21+
* Operation Severity
22+
* @var int
23+
*/
24+
protected $level = Level::MINOR;
25+
26+
/**
27+
* Operation message.
28+
*
29+
* @var string
30+
*/
31+
protected $reason = '<operation> was changed';
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace Magento\SemanticVersionChecker\Operation\Mftf\Metadata;
4+
5+
use Magento\SemanticVersionChecker\Operation\Mftf\MftfOperation;
6+
use PHPSemVerChecker\SemanticVersioning\Level;
7+
8+
/**
9+
* Metadata Child was added in the Module
10+
*/
11+
class MetadataChildAdded extends MftfOperation
12+
{
13+
/**
14+
* Error codes.
15+
*
16+
* @var array
17+
*/
18+
protected $code = 'M242';
19+
20+
/**
21+
* Operation Severity
22+
* @var int
23+
*/
24+
protected $level = Level::MINOR;
25+
26+
/**
27+
* Operation message.
28+
*
29+
* @var string
30+
*/
31+
protected $reason = '<operation> child element was added';
32+
}

tests/Unit/Console/Command/CompareSourceCommandMftfTest.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,51 @@ public function changesDataProvider()
280280
],
281281
'Minor change is detected.'
282282
],
283+
'metadata-datatype-changed' => [
284+
$pathToFixtures . '/metadata-datatype-changed/source-code-before',
285+
$pathToFixtures . '/metadata-datatype-changed/source-code-after',
286+
[
287+
'Mftf (MINOR)',
288+
'Metadata/createEntity/dataType | <operation> was changed | M241'
289+
],
290+
'Minor change is detected.'
291+
],
292+
'metadata-type-changed' => [
293+
$pathToFixtures . '/metadata-type-changed/source-code-before',
294+
$pathToFixtures . '/metadata-type-changed/source-code-after',
295+
[
296+
'Mftf (MINOR)',
297+
'Metadata/createEntity/type | <operation> was changed | M241'
298+
],
299+
'Minor change is detected.'
300+
],
301+
'metadata-auth-changed' => [
302+
$pathToFixtures . '/metadata-auth-changed/source-code-before',
303+
$pathToFixtures . '/metadata-auth-changed/source-code-after',
304+
[
305+
'Mftf (MINOR)',
306+
'Metadata/createEntity/auth | <operation> was changed | M241'
307+
],
308+
'Minor change is detected.'
309+
],
310+
'metadata-url-changed' => [
311+
$pathToFixtures . '/metadata-url-changed/source-code-before',
312+
$pathToFixtures . '/metadata-url-changed/source-code-after',
313+
[
314+
'Mftf (MINOR)',
315+
'Metadata/createEntity/url | <operation> was changed | M241'
316+
],
317+
'Minor change is detected.'
318+
],
319+
'metadata-method-changed' => [
320+
$pathToFixtures . '/metadata-method-changed/source-code-before',
321+
$pathToFixtures . '/metadata-method-changed/source-code-after',
322+
[
323+
'Mftf (MINOR)',
324+
'Metadata/createEntity/method | <operation> was changed | M241'
325+
],
326+
'Minor change is detected.'
327+
],
283328
'metadata-top-level-child-removed' => [
284329
$pathToFixtures . '/metadata-top-level-child-removed/source-code-before',
285330
$pathToFixtures . '/metadata-top-level-child-removed/source-code-after',
@@ -289,6 +334,15 @@ public function changesDataProvider()
289334
],
290335
'Major change is detected.'
291336
],
337+
'metadata-top-level-child-added' => [
338+
$pathToFixtures . '/metadata-top-level-child-added/source-code-before',
339+
$pathToFixtures . '/metadata-top-level-child-added/source-code-after',
340+
[
341+
'Mftf (MINOR)',
342+
'Metadata/createEntity/toplevelField | <operation> child element was added | M242'
343+
],
344+
'Minor change is detected.'
345+
],
292346
'metadata-bottom-level-child-removed' => [
293347
$pathToFixtures . '/metadata-bottom-level-child-removed/source-code-before',
294348
$pathToFixtures . '/metadata-bottom-level-child-removed/source-code-after',
@@ -298,6 +352,15 @@ public function changesDataProvider()
298352
],
299353
'Major change is detected.'
300354
],
355+
'metadata-bottom-level-child-added' => [
356+
$pathToFixtures . '/metadata-bottom-level-child-added/source-code-before',
357+
$pathToFixtures . '/metadata-bottom-level-child-added/source-code-after',
358+
[
359+
'Mftf (MINOR)',
360+
'Metadata/createEntity/toplevelObj/childField | <operation> child element was added | M242'
361+
],
362+
'Minor change is detected.'
363+
],
301364
'page-removed' => [
302365
$pathToFixtures . '/page-removed/source-code-before',
303366
$pathToFixtures . '/page-removed/source-code-after',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
<operations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataOperation.xsd">
10+
<operation name="createEntity" dataType="entity" type="create"
11+
auth="adminOauth" url="/url/path/" method="POST" successRegex="/messages-message-success/" returnRegex="" >
12+
<contentType>application/x-www-form-urlencoded</contentType>
13+
<object dataType="entity" key="toplevelObj">
14+
<field key="childField">string</field>
15+
</object>
16+
<field key="toplevelField">string</field>
17+
<array key="toplevelArray">
18+
<value>val1</value>
19+
<value>val2</value>
20+
<value>val3</value>
21+
</array>
22+
</operation>
23+
</operations>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
<operations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataOperation.xsd">
10+
<operation name="createEntity" dataType="entity" type="create"
11+
auth="adminFormKey" url="/url/path/" method="POST" successRegex="/messages-message-success/" returnRegex="" >
12+
<contentType>application/x-www-form-urlencoded</contentType>
13+
<object dataType="entity" key="toplevelObj">
14+
<field key="childField">string</field>
15+
</object>
16+
<field key="toplevelField">string</field>
17+
<array key="toplevelArray">
18+
<value>val1</value>
19+
<value>val2</value>
20+
<value>val3</value>
21+
</array>
22+
</operation>
23+
</operations>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
<operations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataOperation.xsd">
10+
<operation name="createEntity" dataType="entity" type="create"
11+
auth="adminFormKey" url="/url/path/" method="POST" successRegex="/messages-message-success/" returnRegex="" >
12+
<contentType>application/x-www-form-urlencoded</contentType>
13+
<object dataType="entity" key="toplevelObj">
14+
<field key="childField">string</field>
15+
</object>
16+
<field key="toplevelField">string</field>
17+
<array key="toplevelArray">
18+
<value>val1</value>
19+
<value>val2</value>
20+
<value>val3</value>
21+
</array>
22+
</operation>
23+
</operations>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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+
<operations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataOperation.xsd">
10+
<operation name="createEntity" dataType="entity" type="create"
11+
auth="adminFormKey" url="/url/path/" method="POST" successRegex="/messages-message-success/" returnRegex="" >
12+
<contentType>application/x-www-form-urlencoded</contentType>
13+
<object dataType="entity" key="toplevelObj"/>
14+
<field key="toplevelField">string</field>
15+
<array key="toplevelArray">
16+
<value>val1</value>
17+
<value>val2</value>
18+
<value>val3</value>
19+
</array>
20+
</operation>
21+
</operations>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
<operations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataOperation.xsd">
10+
<operation name="createEntity" dataType="entityOne" type="create"
11+
auth="adminFormKey" url="/url/path/" method="POST" successRegex="/messages-message-success/" returnRegex="" >
12+
<contentType>application/x-www-form-urlencoded</contentType>
13+
<object dataType="entity" key="toplevelObj">
14+
<field key="childField">string</field>
15+
</object>
16+
<field key="toplevelField">string</field>
17+
<array key="toplevelArray">
18+
<value>val1</value>
19+
<value>val2</value>
20+
<value>val3</value>
21+
</array>
22+
</operation>
23+
</operations>

0 commit comments

Comments
 (0)