20
20
*/
21
21
class OperationDefinitionObjectHandlerTest extends TestCase
22
22
{
23
- public function testGetAllObjects ()
23
+ public function testGetMultipleObjects ()
24
24
{
25
- // Define data variables
26
- $ testDataTypeName1 = "operationDataTypeName " ;
27
- $ testDataTypeName2 = "operationDataTypeName2 " ;
28
- $ testAuth = "adminOAuth " ;
29
- $ testUrl = "V1/object " ;
25
+ // Data Variables for Assertions
26
+ $ dataType1 = "type1 " ;
27
+ $ operationType1 = "create " ;
28
+ $ operationType2 = "update " ;
29
+
30
+ /**
31
+ * Parser Output. Just two simple pieces of metadata with 1 field each
32
+ * operationName
33
+ * createType1
34
+ * has field
35
+ * key=id, value=integer
36
+ * updateType1
37
+ * has field
38
+ * key=id, value=integer
39
+ */
40
+ $ mockData = [OperationDefinitionObjectHandler::ENTITY_OPERATION_ROOT_TAG => [
41
+ "testOperationName " => [
42
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE => $ dataType1 ,
43
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE => $ operationType1 ,
44
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_AUTH => "auth " ,
45
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_URL => "V1/Type1 " ,
46
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_METHOD => "POST " ,
47
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY => [
48
+ 0 => [
49
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_KEY => "id " ,
50
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_VALUE => "integer "
51
+ ],
52
+ ]
53
+ ],[
54
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE => $ dataType1 ,
55
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE => $ operationType2 ,
56
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_AUTH => "auth " ,
57
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_URL => "V1/Type1/{id} " ,
58
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_METHOD => "PUT " ,
59
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY => [
60
+ 0 => [
61
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_KEY => "id " ,
62
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_VALUE => "integer "
63
+ ],
64
+ ]
65
+ ]]];
66
+ $ this ->setMockParserOutput ($ mockData );
67
+
68
+ //Perform Assertions
69
+ $ operationDefinitionManager = OperationDefinitionObjectHandler::getInstance ();
70
+ $ operations = $ operationDefinitionManager ->getAllObjects ();
71
+ $ this ->assertArrayHasKey ($ operationType1 . $ dataType1 , $ operations );
72
+ $ this ->assertArrayHasKey ($ operationType2 . $ dataType1 , $ operations );
73
+
74
+ }
75
+
76
+ public function testObjectCreation ()
77
+ {
78
+ // Data Variables for Assertions
79
+ $ testDataTypeName1 = "type1 " ;
80
+ $ testAuth = "auth " ;
81
+ $ testUrl = "V1/dataType " ;
30
82
$ testOperationType = "create " ;
31
83
$ testMethod = "POST " ;
32
84
$ testSuccessRegex = "/messages-message-success/ " ;
33
85
$ testContentType = "application/json " ;
34
86
$ testHeaderParam = "testParameter " ;
35
87
$ testHeaderValue = "testHeader " ;
36
- // Nested data variables
37
- $ nestedObjectKey = "object " ;
88
+ // Nested Object variables
89
+ $ nestedObjectKey = "objectKey " ;
38
90
$ nestedObjectType = "objectType " ;
39
91
$ nestedEntryKey1 = "id " ;
40
92
$ nestedEntryValue1 = "integer " ;
@@ -43,15 +95,23 @@ public function testGetAllObjects()
43
95
$ nestedEntryRequired2 = "true " ;
44
96
$ nestedEntryKey3 = "active " ;
45
97
$ nestedEntryValue3 = "boolean " ;
46
- // Two Level nested data variables
47
- $ objectArrayKey = "ObjectArray " ;
48
- $ twiceNestedObjectKey = "nestedObjectKey " ;
49
- $ twiceNestedObjectType = "nestedObjectType " ;
50
- $ twiceNestedEntryKey = "nestedFieldKey " ;
51
- $ twiceNestedEntryValue = "string " ;
52
-
53
- // Operation Metadata. BE CAREFUL WHEN EDITING, Objects defined below rely on values in this array.
54
98
99
+ /**
100
+ * Complex Object
101
+ * testOperation
102
+ * createType1
103
+ * has contentType
104
+ * has headers
105
+ * has URL
106
+ * has successRegex
107
+ * has nested object
108
+ * key nestedKey type nestedType
109
+ * has 3 fields
110
+ * key id, value integer
111
+ * key name, value string, required TRUE
112
+ * key active, value boolean
113
+ *
114
+ */
55
115
$ mockData = [OperationDefinitionObjectHandler::ENTITY_OPERATION_ROOT_TAG => [
56
116
"testOperationName " => [
57
117
OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE => $ testDataTypeName1 ,
@@ -98,6 +158,79 @@ public function testGetAllObjects()
98
158
]
99
159
]
100
160
],
161
+ ]]];
162
+ // Prepare objects to compare against
163
+ $ field = OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY ;
164
+ $ expectedNestedField = new OperationElement ($ nestedEntryKey1 , $ nestedEntryValue1 , $ field , false , [], null );
165
+ $ expectedNestedField2 = new OperationElement (
166
+ $ nestedEntryKey2 ,
167
+ $ nestedEntryValue2 ,
168
+ $ field ,
169
+ $ nestedEntryRequired2 ,
170
+ [],
171
+ null
172
+ );
173
+ $ expectedNestedField3 = new OperationElement ($ nestedEntryKey3 , $ nestedEntryValue3 , $ field , false , [], null );
174
+ $ expectedOperation = new OperationElement (
175
+ $ nestedObjectKey ,
176
+ $ nestedObjectType ,
177
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT ,
178
+ false ,
179
+ [],
180
+ [0 => $ expectedNestedField , 1 => $ expectedNestedField2 , 2 =>$ expectedNestedField3 ]
181
+ );
182
+
183
+ // Set up mocked data output
184
+ $ this ->setMockParserOutput ($ mockData );
185
+
186
+ // Get Operation
187
+ $ operationDefinitionManager = OperationDefinitionObjectHandler::getInstance ();
188
+ $ operation = $ operationDefinitionManager ->getOperationDefinition ($ testOperationType , $ testDataTypeName1 );
189
+
190
+ // Perform Asserts
191
+ $ this ->assertEquals (
192
+ [0 => "{$ testHeaderParam }: {$ testHeaderValue }" ,
193
+ 1 => OperationDefinitionObject::HTTP_CONTENT_TYPE_HEADER . ": {$ testContentType }" ],
194
+ $ operation ->getHeaders ()
195
+ );
196
+ $ this ->assertEquals ($ testOperationType , $ operation ->getOperation ());
197
+ $ this ->assertEquals ($ testMethod , $ operation ->getApiMethod ());
198
+ $ this ->assertEquals ($ testUrl , $ operation ->getApiUrl ());
199
+ $ this ->assertEquals ($ testDataTypeName1 , $ operation ->getDataType ());
200
+ $ this ->assertEquals ($ testContentType , $ operation ->getContentType ());
201
+ $ this ->assertEquals ($ testAuth , $ operation ->getAuth ());
202
+ $ this ->assertEquals ($ testSuccessRegex , $ operation ->getSuccessRegex ());
203
+
204
+ // perform asserts on the instantiated metadata in the $createOperationByName
205
+ $ this ->assertEquals ($ expectedOperation , $ operation ->getOperationMetadata ()[0 ]);
206
+ }
207
+
208
+ public function testObjectArrayCreation ()
209
+ {
210
+ // Data Variables for Assertions
211
+ $ dataType1 = "type1 " ;
212
+ $ operationType1 = "create " ;
213
+ $ objectArrayKey = "ObjectArray " ;
214
+ $ twiceNestedObjectKey = "nestedObjectKey " ;
215
+ $ twiceNestedObjectType = "nestedObjectType " ;
216
+ $ twiceNestedEntryKey = "nestedFieldKey " ;
217
+ $ twiceNestedEntryValue = "string " ;
218
+ // Parser Output
219
+ /**
220
+ * Metadata with nested array of objects, with a single field
221
+ * OperationName
222
+ * createType1
223
+ * has array with key ObjectArray
224
+ * objects with key = nestedObjectKey, type = nestedObjectType
225
+ * has field with key = nestedFieldKey, value = string
226
+ */
227
+ $ mockData = [OperationDefinitionObjectHandler::ENTITY_OPERATION_ROOT_TAG => [
228
+ "testOperationName " => [
229
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE => $ dataType1 ,
230
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE => $ operationType1 ,
231
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_AUTH => "auth " ,
232
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_URL => "V1/Type1 " ,
233
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_METHOD => "POST " ,
101
234
OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY => [
102
235
0 => [
103
236
OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT_KEY => $ objectArrayKey ,
@@ -116,56 +249,8 @@ public function testGetAllObjects()
116
249
]
117
250
]
118
251
]
119
- ]
120
- ],
121
- "testOperationName2 " => [
122
- OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE => $ testDataTypeName2 ,
123
- OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE => $ testOperationType ,
124
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY => [
125
- 0 => [
126
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_KEY => "id " ,
127
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_VALUE => "integer "
128
- ],
129
- 1 => [
130
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_KEY => "name " ,
131
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_VALUE => "string "
132
- ]
133
- ],
134
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY => [
135
- 0 => [
136
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY_KEY => "arrayKey " ,
137
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY_VALUE => [
138
- 0 => [
139
- OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_VALUE => "string "
140
- ]
141
- ]
142
- ]
143
- ]
144
- ]
145
- ]];
146
-
147
- //prepare OperationElements to compare against.
148
- $ field = OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY ;
149
-
150
- $ expectedNestedMetadata1 = new OperationElement ($ nestedEntryKey1 , $ nestedEntryValue1 , $ field , false , [], null );
151
- $ expectedNestedMetadata2 = new OperationElement (
152
- $ nestedEntryKey2 ,
153
- $ nestedEntryValue2 ,
154
- $ field ,
155
- $ nestedEntryRequired2 ,
156
- [],
157
- null
158
- );
159
- $ expectedNestedMetadata3 = new OperationElement ($ nestedEntryKey3 , $ nestedEntryValue3 , $ field , false , [], null );
160
- $ expectedOperation1 = new OperationElement (
161
- $ nestedObjectKey ,
162
- $ nestedObjectType ,
163
- OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT ,
164
- false ,
165
- [],
166
- [0 => $ expectedNestedMetadata1 , 1 => $ expectedNestedMetadata2 , 2 =>$ expectedNestedMetadata3 ]
167
- );
168
-
252
+ ]]]];
253
+ // Prepare Objects to compare against
169
254
$ twoLevelNestedMetadata = new OperationElement (
170
255
$ twiceNestedEntryKey ,
171
256
$ twiceNestedEntryValue ,
@@ -184,7 +269,7 @@ public function testGetAllObjects()
184
269
[0 => $ twoLevelNestedMetadata ]
185
270
);
186
271
187
- $ expectedOperation2 = new OperationElement (
272
+ $ expectedOperation = new OperationElement (
188
273
$ objectArrayKey ,
189
274
$ twiceNestedObjectType ,
190
275
$ twiceNestedObjectKey ,
@@ -196,34 +281,81 @@ public function testGetAllObjects()
196
281
// Set up mocked data output
197
282
$ this ->setMockParserOutput ($ mockData );
198
283
199
- // get Operations
284
+ // Get Operation
200
285
$ operationDefinitionManager = OperationDefinitionObjectHandler::getInstance ();
201
- $ operations = $ operationDefinitionManager ->getAllObjects ( );
202
- $ operationByName = $ operationDefinitionManager -> getOperationDefinition ( $ testOperationType , $ testDataTypeName1 );
286
+ $ operation = $ operationDefinitionManager ->getOperationDefinition ( $ operationType1 , $ dataType1 );
287
+ // Make Assertions
203
288
204
- // perform asserts on $operations
205
- $ this ->assertCount (2 , $ operations );
206
- $ this ->assertArrayHasKey ($ testOperationType . $ testDataTypeName1 , $ operations );
207
- $ this ->assertArrayHasKey ($ testOperationType . $ testDataTypeName2 , $ operations );
289
+ $ this ->assertEquals ($ expectedOperation , $ operation ->getOperationMetadata ()[0 ]);
290
+ }
208
291
209
- // perform asserts on $createOperationByName
210
- $ this ->assertEquals (
211
- [0 => "{$ testHeaderParam }: {$ testHeaderValue }" ,
212
- 1 => OperationDefinitionObject::HTTP_CONTENT_TYPE_HEADER . ": {$ testContentType }" ],
213
- $ operationByName ->getHeaders ()
292
+ public function testLooseJsonCreation ()
293
+ {
294
+ // Data Variables for Assertions
295
+ $ dataType = "dataType " ;
296
+ $ operationType = "create " ;
297
+ $ entryKey = "id " ;
298
+ $ entryValue = "integer " ;
299
+ $ arrayKey = "arrayKey " ;
300
+ $ arrayValue = "string " ;
301
+ /**
302
+ * Operation with no objects, just an entry and an array of strings
303
+ * testOperationName
304
+ * createDataType
305
+ * has entry key = id, value = integer
306
+ * has array key = arrayKey
307
+ * fields of value = string
308
+ */
309
+ $ mockData = [OperationDefinitionObjectHandler::ENTITY_OPERATION_ROOT_TAG => [
310
+ "testOperationName " => [
311
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE => $ dataType ,
312
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE => $ operationType ,
313
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY => [
314
+ 0 => [
315
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_KEY => $ entryKey ,
316
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_VALUE => $ entryValue
317
+ ]
318
+ ],
319
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY => [
320
+ 0 => [
321
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY_KEY => $ arrayKey ,
322
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY_VALUE => [
323
+ 0 => [
324
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY_VALUE => $ arrayValue
325
+ ]
326
+ ]
327
+ ]
328
+ ]
329
+ ]
330
+ ]];
331
+ // Prepare Objects to assert against
332
+ $ entry = new OperationElement (
333
+ $ entryKey ,
334
+ $ entryValue ,
335
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY ,
336
+ false ,
337
+ [],
338
+ null
339
+ );
340
+ $ array = new OperationElement (
341
+ $ arrayKey ,
342
+ $ arrayValue ,
343
+ OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY ,
344
+ false ,
345
+ [],
346
+ null
214
347
);
215
- $ this ->assertEquals ($ testOperationType , $ operationByName ->getOperation ());
216
- $ this ->assertEquals ($ testMethod , $ operationByName ->getApiMethod ());
217
- $ this ->assertEquals ($ testUrl , $ operationByName ->getApiUrl ());
218
- $ this ->assertEquals ($ testDataTypeName1 , $ operationByName ->getDataType ());
219
- $ this ->assertEquals ($ testContentType , $ operationByName ->getContentType ());
220
- $ this ->assertEquals ($ testAuth , $ operationByName ->getAuth ());
221
- $ this ->assertEquals ($ testSuccessRegex , $ operationByName ->getSuccessRegex ());
222
348
223
- // perform asserts on the instantiated metadata in the $createOperationByName
224
- $ this ->assertEquals ($ expectedOperation1 , $ operationByName ->getOperationMetadata ()[0 ]);
225
- $ this ->assertEquals ($ expectedOperation2 , $ operationByName ->getOperationMetadata ()[1 ]);
349
+ // Set up mocked data output
350
+ $ this ->setMockParserOutput ($ mockData );
351
+
352
+ // get Operations
353
+ $ operationDefinitionManager = OperationDefinitionObjectHandler::getInstance ();
354
+ $ operation = $ operationDefinitionManager ->getOperationDefinition ($ operationType , $ dataType );
226
355
356
+ // Perform Assertions
357
+ $ this ->assertEquals ($ entry , $ operation ->getOperationMetadata ()[0 ]);
358
+ $ this ->assertEquals ($ array , $ operation ->getOperationMetadata ()[1 ]);
227
359
}
228
360
229
361
/**
@@ -233,7 +365,7 @@ public function testGetAllObjects()
233
365
*/
234
366
private function setMockParserOutput ($ data )
235
367
{
236
- // clear section object handler value to inject parsed content
368
+ // clear Operation object handler value to inject parsed content
237
369
$ property = new \ReflectionProperty (
238
370
OperationDefinitionObjectHandler::class,
239
371
'DATA_DEFINITION_OBJECT_HANDLER '
0 commit comments