8
8
9
9
use Magento \SemanticVersionChecker \MftfReport ;
10
10
use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataAdded ;
11
+ use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataChanged ;
12
+ use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataChildAdded ;
11
13
use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataChildRemoved ;
12
14
use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataRemoved ;
13
15
use Magento \SemanticVersionChecker \Scanner \MftfScanner ;
@@ -54,10 +56,31 @@ public function analyze(Registry $registryBefore, Registry $registryAfter)
54
56
continue ;
55
57
}
56
58
57
- // Build simple metadata tree for comparison
59
+ // Validate metadata attribute changes
60
+ $ this ->matchAndValidateAttributes (
61
+ $ beforeEntity ['attributes ' ],
62
+ $ afterEntities [$ module ][$ entityName ]['attributes ' ],
63
+ $ this ->getReport (),
64
+ $ filenames ,
65
+ [AbstractEntityAnalyzer::DEFAULT_OPERATION_KEY => MetadataChanged::class],
66
+ $ operationTarget
67
+ );
68
+
69
+ // Validate child elements removed
58
70
$ this ->recursiveCompare (
59
71
$ beforeEntity ,
60
72
$ 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,
61
84
$ operationTarget ,
62
85
$ filenames ,
63
86
$ this ->getReport ()
@@ -72,22 +95,23 @@ public function analyze(Registry $registryBefore, Registry $registryAfter)
72
95
*
73
96
* @param array $beforeEntity
74
97
* @param array $afterEntity
98
+ * @param string $operationClass
75
99
* @param string $operationTarget
76
100
* @param string $filenames
77
101
* @param Report $report
78
102
* @return void
79
103
*/
80
- public function recursiveCompare ($ beforeEntity , $ afterEntity , $ operationTarget , $ filenames , $ report )
104
+ public function recursiveCompare ($ beforeEntity , $ afterEntity , $ operationClass , $ operationTarget , $ filenames , $ report )
81
105
{
82
106
$ beforeChildren = $ beforeEntity ['value ' ] ?? [];
107
+ $ afterChildren = $ afterEntity ['value ' ] ?? [];
83
108
if (!is_array ($ beforeChildren )) {
84
109
return ;
85
110
}
86
111
foreach ($ beforeChildren as $ beforeChild ) {
87
112
$ beforeType = $ beforeChild ['name ' ];
88
113
$ beforeFieldKey = $ beforeChild ['attributes ' ]['key ' ] ?? null ;
89
114
$ afterFound = null ;
90
- $ afterChildren = $ afterEntity ['value ' ] ?? [];
91
115
foreach ($ afterChildren as $ afterChild ) {
92
116
if ($ afterChild ['name ' ] !== $ beforeType ) {
93
117
continue ;
@@ -99,12 +123,13 @@ public function recursiveCompare($beforeEntity, $afterEntity, $operationTarget,
99
123
}
100
124
}
101
125
if ($ afterFound === null ) {
102
- $ operation = new MetadataChildRemoved ($ filenames , $ operationTarget . '/ ' . $ beforeFieldKey );
126
+ $ operation = new $ operationClass ($ filenames , $ operationTarget . '/ ' . $ beforeFieldKey );
103
127
$ report ->add (MftfReport::MFTF_REPORT_CONTEXT , $ operation );
104
128
} else {
105
129
$ this ->recursiveCompare (
106
130
$ beforeChild ,
107
131
$ afterFound ,
132
+ $ operationClass ,
108
133
$ operationTarget . '/ ' . $ beforeFieldKey ,
109
134
$ filenames ,
110
135
$ report
0 commit comments