88
99use Magento \SemanticVersionChecker \MftfReport ;
1010use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataAdded ;
11+ use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataChanged ;
12+ use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataChildAdded ;
1113use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataChildRemoved ;
1214use Magento \SemanticVersionChecker \Operation \Mftf \Metadata \MetadataRemoved ;
1315use 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 ]['attributes ' ],
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
0 commit comments