3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
+
6
7
namespace Magento \FunctionalTestingFramework \DataGenerator \Handlers ;
7
8
8
9
use Magento \FunctionalTestingFramework \DataGenerator \Objects \OperationDefinitionObject ;
@@ -42,73 +43,72 @@ class OperationDefinitionObjectHandler implements ObjectHandlerInterface
42
43
const ENTITY_OPERATION_REQUIRED = 'required ' ;
43
44
44
45
/**
45
- * Singleton Instance of class
46
+ * The singleton instance of this class
46
47
*
47
48
* @var OperationDefinitionObjectHandler
48
49
*/
49
- private static $ DATA_DEFINITION_OBJECT_HANDLER ;
50
+ private static $ INSTANCE ;
50
51
51
52
/**
52
- * Array containing all Data Definition Objects
53
+ * An array containing all <operation>
53
54
*
54
- * @var array
55
+ * @var OperationDefinitionObject[]
55
56
*/
56
- private $ operationDefinitions = [];
57
+ private $ operationDefinitionObjects = [];
57
58
58
59
/**
59
- * Object used to extract dataObjects from array into DataElements
60
+ * A helper used to convert the primitive array parser output into objects.
60
61
*
61
62
* @var OperationElementExtractor
62
63
*/
63
- private $ dataDefExtractor ;
64
+ private $ operationElementExtractor ;
65
+
66
+ /**
67
+ * The constructor
68
+ */
69
+ private function __construct ()
70
+ {
71
+ $ this ->operationElementExtractor = new OperationElementExtractor ();
72
+ }
64
73
65
74
/**
66
- * Singleton method to return DataDefinitionProcessor.
75
+ * Return the singleton instance of this class
67
76
*
68
77
* @return OperationDefinitionObjectHandler
69
78
*/
70
79
public static function getInstance ()
71
80
{
72
- if (!self ::$ DATA_DEFINITION_OBJECT_HANDLER ) {
73
- self ::$ DATA_DEFINITION_OBJECT_HANDLER = new OperationDefinitionObjectHandler ();
74
- self ::$ DATA_DEFINITION_OBJECT_HANDLER -> initDataDefinitions ();
81
+ if (!self ::$ INSTANCE ) {
82
+ self ::$ INSTANCE = new OperationDefinitionObjectHandler ();
83
+ self ::$ INSTANCE -> initialize ();
75
84
}
76
85
77
- return self ::$ DATA_DEFINITION_OBJECT_HANDLER ;
86
+ return self ::$ INSTANCE ;
78
87
}
79
88
80
89
/**
81
- * Returns a OperationDefinitionObject object based on name
90
+ * Return an <operation> by the " name" attribute
82
91
*
83
- * @param string $operationDefinitionName
92
+ * @param string $name
84
93
* @return OperationDefinitionObject
85
94
*/
86
- public function getObject ($ operationDefinitionName )
95
+ public function getObject ($ name )
87
96
{
88
- return $ this ->operationDefinitions [ $ operationDefinitionName ];
97
+ return $ this ->getAllObjects ()[ $ name ];
89
98
}
90
99
91
100
/**
92
- * Returns all data Definition objects
101
+ * Return all <operation>
93
102
*
94
- * @return array
103
+ * @return OperationDefinitionObject[]
95
104
*/
96
105
public function getAllObjects ()
97
106
{
98
- return $ this ->operationDefinitions ;
107
+ return $ this ->operationDefinitionObjects ;
99
108
}
100
109
101
110
/**
102
- * DataDefintionArrayProcessor constructor.
103
- */
104
- private function __construct ()
105
- {
106
- $ this ->dataDefExtractor = new OperationElementExtractor ();
107
- }
108
-
109
- /**
110
- * This method takes an operation such as create and a data type such as 'customer' and returns the corresponding
111
- * data definition defined in metadata.xml
111
+ * Return an <operation> by operation and type. Eg. "create" and "address"
112
112
*
113
113
* @param string $operation
114
114
* @param string $dataType
@@ -120,20 +120,22 @@ public function getOperationDefinition($operation, $dataType)
120
120
}
121
121
122
122
/**
123
- * This method reads all dataDefinitions from metadata xml into memory.
123
+ * Read metadata xml via the Magento parser and then convert the primitive array output
124
+ * into an array of objects.
125
+ *
124
126
* @return void
125
127
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
126
128
* @SuppressWarnings(PHPMD.NPathComplexity)
127
129
* @SuppressWarnings(PHPMD.UnusedPrivateMethod)
128
130
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
129
131
*/
130
- private function initDataDefinitions ()
132
+ private function initialize ()
131
133
{
132
134
//TODO: Reduce CyclomaticComplexity/NPathComplexity/Length of method, remove warning suppression.
133
135
$ objectManager = ObjectManagerFactory::getObjectManager ();
134
- $ metadataParser = $ objectManager ->create (OperationDefinitionParser::class);
135
- foreach ( $ metadataParser ->readOperationMetadata ()
136
- [OperationDefinitionObjectHandler:: ENTITY_OPERATION_ROOT_TAG ] as $ dataDefName => $ opDefArray ) {
136
+ $ parser = $ objectManager ->create (OperationDefinitionParser::class);
137
+ $ parserOutput = $ parser ->readOperationMetadata ()[OperationDefinitionObjectHandler:: ENTITY_OPERATION_ROOT_TAG ];
138
+ foreach ( $ parserOutput as $ dataDefName => $ opDefArray ) {
137
139
$ operation = $ opDefArray [OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE ];
138
140
$ dataType = $ opDefArray [OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE ];
139
141
$ url = $ opDefArray [OperationDefinitionObjectHandler::ENTITY_OPERATION_URL ] ?? null ;
@@ -168,7 +170,7 @@ private function initDataDefinitions()
168
170
// extract relevant OperationObjects as OperationElements
169
171
if (array_key_exists (OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT , $ opDefArray )) {
170
172
foreach ($ opDefArray [OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT ] as $ opElementArray ) {
171
- $ operationElements [] = $ this ->dataDefExtractor ->extractOperationElement ($ opElementArray );
173
+ $ operationElements [] = $ this ->operationElementExtractor ->extractOperationElement ($ opElementArray );
172
174
}
173
175
}
174
176
@@ -195,7 +197,7 @@ private function initDataDefinitions()
195
197
OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT ,
196
198
$ operationField
197
199
)) {
198
- $ nestedDataElement = $ this ->dataDefExtractor ->extractOperationElement (
200
+ $ nestedDataElement = $ this ->operationElementExtractor ->extractOperationElement (
199
201
$ operationField [OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT ][0 ]
200
202
);
201
203
$ subOperationElements [$ nestedDataElement ->getKey ()] = $ nestedDataElement ;
@@ -217,7 +219,7 @@ private function initDataDefinitions()
217
219
}
218
220
}
219
221
220
- $ this ->operationDefinitions [$ operation . $ dataType ] = new OperationDefinitionObject (
222
+ $ this ->operationDefinitionObjects [$ operation . $ dataType ] = new OperationDefinitionObject (
221
223
$ dataDefName ,
222
224
$ operation ,
223
225
$ dataType ,
0 commit comments