e5f24ffd5de34b6d069dd95791af465f349515b3
[policy/gui.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
4  *  Modifications Copyright (C) 2020-2022 Nordix Foundation.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.gui.editors.apex.rest.handling;
23
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25 import static org.junit.jupiter.api.Assertions.assertNotNull;
26 import static org.springframework.http.MediaType.APPLICATION_JSON;
27 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
28 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
29 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
30 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
31
32 import org.junit.jupiter.api.Test;
33 import org.onap.policy.apex.model.modelapi.ApexApiResult;
34 import org.onap.policy.apex.model.modelapi.ApexApiResult.Result;
35 import org.onap.policy.common.utils.coder.StandardCoder;
36 import org.onap.policy.common.utils.resources.TextFileUtils;
37 import org.onap.policy.gui.editors.apex.ApexEditor;
38 import org.springframework.beans.factory.annotation.Autowired;
39 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
40 import org.springframework.boot.test.context.SpringBootTest;
41 import org.springframework.test.web.servlet.MockMvc;
42 import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
43
44 /**
45  * Test Apex Editor Rest Resource.
46  *
47  * @author Liam Fallon (liam.fallon@ericsson.com)
48  */
49 @SpringBootTest(classes = ApexEditor.class)
50 @AutoConfigureMockMvc
51 class ApexEditorRestResourceTest {
52
53     private static final String BASE_URL = "/policy/gui/v1/apex/editor/{sessionId}";
54
55     @Autowired
56     private MockMvc mvc;
57
58     @Autowired
59     private RestSessionHandler sessionHandler;
60
61     @Test
62     void testSessionCreate() throws Exception {
63         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -2));
64         assertEquals(Result.FAILED, result.getResult());
65
66         result = apexRequest(get(BASE_URL + "/Session/Create", -1));
67         assertEquals(Result.SUCCESS, result.getResult());
68         final int sessionId = Integer.parseInt(result.getMessages().get(0));
69
70         result = apexRequest(get(BASE_URL + "/Session/Create", -1));
71         assertEquals(Result.SUCCESS, result.getResult());
72
73         final int corruptSessionId = createCorruptSession();
74
75         apexRequest(get(BASE_URL + "/Model/Analyse", corruptSessionId));
76
77         result = apexRequest(get(BASE_URL + "/Model/Analyse", sessionId));
78         assertEquals(Result.SUCCESS, result.getResult());
79         result = apexRequest(get(BASE_URL + "/Model/Analyse", -12345));
80         assertEquals(Result.FAILED, result.getResult());
81         result = apexRequest(get(BASE_URL + "/Model/Analyse", 12345));
82         assertEquals(Result.FAILED, result.getResult());
83
84         apexRequest(get(BASE_URL + "/Model/Validate", corruptSessionId));
85
86         result = apexRequest(get(BASE_URL + "/Model/Validate", sessionId));
87         assertEquals(Result.FAILED, result.getResult());
88         result = apexRequest(get(BASE_URL + "/Model/Validate", -12345));
89         assertEquals(Result.FAILED, result.getResult());
90         result = apexRequest(get(BASE_URL + "/Model/Validate", 12345));
91         assertEquals(Result.FAILED, result.getResult());
92
93         final String modelString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
94             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002699\","
95             + "\"description\"      : \"A description of the model\"" + "}";
96         result = apexRequest(post(BASE_URL + "/Model/Create", -12345)
97                 .content(modelString).contentType(APPLICATION_JSON));
98         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
99         result = apexRequest(post(BASE_URL + "/Model/Create", -12345)
100             .content(modelString).contentType(APPLICATION_JSON));
101         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
102         result = apexRequest(post(BASE_URL + "/Model/Create", 1234545)
103             .content(modelString).contentType(APPLICATION_JSON));
104         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
105         result = apexRequest(post(BASE_URL + "/Model/Create", sessionId)
106             .content(modelString).contentType(APPLICATION_JSON));
107         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
108
109         apexRequest(post(BASE_URL + "/Model/Create", corruptSessionId)
110             .content(modelString).contentType(APPLICATION_JSON));
111
112         result = apexRequest(put(BASE_URL + "/Model/Update", -12345)
113             .content(modelString).contentType(APPLICATION_JSON));
114         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
115         result = apexRequest(put(BASE_URL + "/Model/Update", -12345)
116             .content(modelString).contentType(APPLICATION_JSON));
117         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
118         result = apexRequest(put(BASE_URL + "/Model/Update", 1234545)
119             .content(modelString).contentType(APPLICATION_JSON));
120         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
121         result = apexRequest(put(BASE_URL + "/Model/Update", sessionId)
122             .content(modelString).contentType(APPLICATION_JSON));
123         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
124
125         apexRequest(put(BASE_URL + "/Model/Update", corruptSessionId)
126             .content(modelString).contentType(APPLICATION_JSON));
127
128         apexRequest(get(BASE_URL + "/Model/GetKey", corruptSessionId));
129
130         result = apexRequest(get(BASE_URL + "/Model/GetKey", sessionId));
131         assertEquals(Result.SUCCESS, result.getResult());
132         result = apexRequest(get(BASE_URL + "/Model/GetKey", -12345));
133         assertEquals(Result.FAILED, result.getResult());
134         result = apexRequest(get(BASE_URL + "/Model/GetKey", 12345));
135         assertEquals(Result.FAILED, result.getResult());
136
137         apexRequest(get(BASE_URL + "/Model/Get", corruptSessionId));
138
139         result = apexRequest(get(BASE_URL + "/Model/Get", sessionId));
140         assertEquals(Result.SUCCESS, result.getResult());
141         result = apexRequest(get(BASE_URL + "/Model/Get", -12345));
142         assertEquals(Result.FAILED, result.getResult());
143         result = apexRequest(get(BASE_URL + "/Model/Get", 12345));
144         assertEquals(Result.FAILED, result.getResult());
145
146         String resultString = requestString(get(BASE_URL + "/Model/Download", corruptSessionId));
147         assertEquals("", resultString);
148
149         resultString = requestString(get(BASE_URL + "/Model/Download", sessionId));
150         assertNotNull(resultString);
151     }
152
153     @Test
154     void testSessionCreateExt() throws Exception {
155         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
156
157         final int sessionId = Integer.parseInt(result.getMessages().get(0));
158         apexRequest(get(BASE_URL + "/Session/Create", -1));
159         final int corruptSessionId = createCorruptSession();
160
161         String resultString = requestString(get(BASE_URL + "/Model/Download", -12345));
162         assertEquals("", resultString);
163
164         resultString = requestString(get(BASE_URL + "/Model/Download", 12345));
165         assertEquals("", resultString);
166
167         apexRequest(get(BASE_URL + "/KeyInformation/Get", corruptSessionId));
168
169         result = apexRequest(get(BASE_URL + "/KeyInformation/Get", sessionId));
170         assertEquals(Result.SUCCESS, result.getResult());
171         result = apexRequest(get(BASE_URL + "/KeyInformation/Get", -12345));
172         assertEquals(Result.FAILED, result.getResult());
173         result = apexRequest(get(BASE_URL + "/KeyInformation/Get", 12345));
174         assertEquals(Result.FAILED, result.getResult());
175
176         apexRequest(delete(BASE_URL + "/Model/Delete", corruptSessionId));
177
178         result = apexRequest(delete(BASE_URL + "/Model/Delete", sessionId));
179         assertEquals(Result.SUCCESS, result.getResult());
180         result = apexRequest(delete(BASE_URL + "/Model/Delete", -12345));
181         assertEquals(Result.FAILED, result.getResult());
182         result = apexRequest(delete(BASE_URL + "/Model/Delete", 12345));
183         assertEquals(Result.FAILED, result.getResult());
184     }
185
186     @Test
187     void testContextSchema() throws Exception {
188         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
189         assertEquals(Result.SUCCESS, result.getResult());
190         final int sessionId = Integer.parseInt(result.getMessages().get(0));
191
192         final int corruptSessionId = createCorruptSession();
193
194         result = apexRequest(get(BASE_URL + "/Validate/ContextSchema", -12345));
195         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
196
197         apexRequest(get(BASE_URL + "/Validate/ContextSchema", corruptSessionId));
198
199         result = apexRequest(get(BASE_URL + "/Validate/ContextSchema", sessionId));
200         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
201
202         result = apexRequest(get(BASE_URL + "/Validate/ContextSchema", sessionId)
203             .queryParam("name", (String) null)
204             .queryParam("version", (String) null));
205         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
206
207         result = apexRequest(get(BASE_URL + "/Validate/ContextSchema", sessionId)
208             .queryParam("name", "%%%$£")
209             .queryParam("version", (String) null));
210         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
211
212         String modelString = "Somewhere over the rainbow";
213         result = apexRequest(put(BASE_URL + "/Model/Load", -12345)
214             .content(modelString)
215             .contentType(APPLICATION_JSON));
216         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
217         result = apexRequest(put(BASE_URL + "/Model/Load", 12345)
218             .content(modelString).contentType(APPLICATION_JSON));
219         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
220         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
221             .content(modelString).contentType(APPLICATION_JSON));
222         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
223         modelString = "";
224         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
225             .content(modelString).contentType(APPLICATION_JSON));
226         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
227         modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
228         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
229             .content(modelString).contentType(APPLICATION_JSON));
230         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
231         result = apexRequest(get(BASE_URL + "/ContextSchema/Get", sessionId)
232             .queryParam("name", (String) null)
233             .queryParam("version", (String) null));
234         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
235
236         apexRequest(get(BASE_URL + "/ContextSchema/Get", corruptSessionId)
237             .queryParam("name", (String) null)
238             .queryParam("version", (String) null));
239
240         String csString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
241             + "\"schemaFlavour\"    : \"Java\"," + "\"schemaDefinition\" : \"java.lang.String\","
242             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
243             + "\"description\"      : \"A description of hello\"" + "}";
244         result = apexRequest(post(BASE_URL + "/ContextSchema/Create", -12345)
245             .content(csString).contentType(APPLICATION_JSON));
246         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
247         result = apexRequest(post(BASE_URL + "/ContextSchema/Create", 1234545)
248             .content(csString).contentType(APPLICATION_JSON));
249         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
250         result = apexRequest(post(BASE_URL + "/ContextSchema/Create", sessionId)
251             .content(csString).contentType(APPLICATION_JSON));
252         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
253
254         apexRequest(post(BASE_URL + "/ContextSchema/Create", corruptSessionId)
255             .content(csString).contentType(APPLICATION_JSON));
256
257         csString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
258             + "\"schemaFlavour\"    : \"Java\"," + "\"schemaDefinition\" : \"my.perfect.String\","
259             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
260             + "\"description\"      : \"A description of hello\"" + "}";
261         result = apexRequest(put(BASE_URL + "/ContextSchema/Update", -12345)
262             .content(csString).contentType(APPLICATION_JSON));
263         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
264         result = apexRequest(put(BASE_URL + "/ContextSchema/Update", 1234545)
265             .content(csString).contentType(APPLICATION_JSON));
266         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
267         result = apexRequest(put(BASE_URL + "/ContextSchema/Update", sessionId)
268             .content(csString).contentType(APPLICATION_JSON));
269         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
270
271         apexRequest(put(BASE_URL + "/ContextSchema/Update", corruptSessionId)
272             .content(csString).contentType(APPLICATION_JSON));
273
274         result = apexRequest(get(BASE_URL + "/ContextSchema/Get", sessionId)
275             .queryParam("name", "Hello")
276             .queryParam("version", (String) null));
277         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
278         result = apexRequest(get(BASE_URL + "/ContextSchema/Get", sessionId)
279             .queryParam("name", "NonExistant")
280             .queryParam("version", (String) null));
281         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
282         result = apexRequest(get(BASE_URL + "/ContextSchema/Get", -123345)
283             .queryParam("name", (String) null)
284             .queryParam("version", (String) null));
285         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
286         result = apexRequest(get(BASE_URL + "/ContextSchema/Get", 123345)
287             .queryParam("name", (String) null)
288             .queryParam("version", (String) null));
289         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
290
291         apexRequest(get(BASE_URL + "/ContextSchema/Get", corruptSessionId)
292             .queryParam("name", "Hello")
293             .queryParam("version", (String) null));
294
295         result = apexRequest(get(BASE_URL + "/Validate/ContextSchema", sessionId)
296             .queryParam("name", (String) null)
297             .queryParam("version", (String) null));
298         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
299
300         apexRequest(delete(BASE_URL + "/ContextSchema/Delete", corruptSessionId)
301             .queryParam("name", "Hello")
302             .queryParam("version", "0.0.2"));
303
304         result = apexRequest(delete(BASE_URL + "/ContextSchema/Delete", -123345)
305             .queryParam("name", (String) null)
306             .queryParam("version", (String) null));
307         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
308         result = apexRequest(delete(BASE_URL + "/ContextSchema/Delete", 123345)
309             .queryParam("name", (String) null)
310             .queryParam("version", (String) null));
311         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
312         result = apexRequest(delete(BASE_URL + "/ContextSchema/Delete", sessionId)
313             .queryParam("name", "Hello")
314             .queryParam("version", "0.0.2"));
315         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
316     }
317
318     @Test
319     void testContextSchemaExt() throws Exception {
320         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
321         final int sessionId = Integer.parseInt(result.getMessages().get(0));
322         final String modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
323
324         apexRequest(put(BASE_URL + "/Model/Load", sessionId)
325             .content(modelString).contentType(APPLICATION_JSON));
326         apexRequest(get(BASE_URL + "/ContextSchema/Get", sessionId)
327             .queryParam("name", (String) null)
328             .queryParam("version", (String) null));
329
330         result = apexRequest(delete(BASE_URL + "/ContextSchema/Delete", sessionId)
331             .queryParam("name", (String) null)
332             .queryParam("version", (String) null));
333         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
334     }
335
336     @Test
337     void testContextAlbum() throws Exception {
338         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
339         assertEquals(Result.SUCCESS, result.getResult());
340         final int sessionId = Integer.parseInt(result.getMessages().get(0));
341         final int corruptSessionId = createCorruptSession();
342
343         result = apexRequest(get(BASE_URL + "/Validate/ContextAlbum", -12345));
344         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
345
346         apexRequest(get(BASE_URL + "/Validate/ContextAlbum", corruptSessionId));
347
348         result = apexRequest(get(BASE_URL + "/Validate/ContextAlbum", sessionId));
349         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
350
351         result = apexRequest(get(BASE_URL + "/Validate/ContextAlbum", sessionId)
352             .queryParam("name", (String) null)
353             .queryParam("version", (String) null));
354         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
355
356         result = apexRequest(get(BASE_URL + "/Validate/ContextAlbum", sessionId)
357             .queryParam("name", "%%%$£")
358             .queryParam("version", (String) null));
359         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
360
361         String modelString = "Somewhere over the rainbow";
362         result = apexRequest(put(BASE_URL + "/Model/Load", -12345)
363             .content(modelString).contentType(APPLICATION_JSON));
364         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
365         result = apexRequest(put(BASE_URL + "/Model/Load", 12345)
366             .content(modelString).contentType(APPLICATION_JSON));
367         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
368         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
369             .content(modelString).contentType(APPLICATION_JSON));
370         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
371         modelString = "";
372         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
373             .content(modelString).contentType(APPLICATION_JSON));
374         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
375         modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
376         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
377             .content(modelString).contentType(APPLICATION_JSON));
378         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
379         result = apexRequest(get(BASE_URL + "/ContextAlbum/Get", sessionId)
380             .queryParam("name", (String) null)
381             .queryParam("version", (String) null));
382         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
383
384         String caString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
385             + "\"scope\"            : \"Domain\"," + "\"writeable\"        : false,"
386             + "\"itemSchema\"       : {\"name\" : \"StringType\", \"version\" : \"0.0.1\"},"
387             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
388             + "\"description\"      : \"A description of hello\"" + "}";
389         result = apexRequest(post(BASE_URL + "/ContextAlbum/Create", -12345)
390             .content(caString).contentType(APPLICATION_JSON));
391         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
392         result = apexRequest(post(BASE_URL + "/ContextAlbum/Create", 1234545)
393             .content(caString).contentType(APPLICATION_JSON));
394         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
395         result = apexRequest(post(BASE_URL + "/ContextAlbum/Create", sessionId)
396             .content(caString).contentType(APPLICATION_JSON));
397         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
398
399         apexRequest(post(BASE_URL + "/ContextAlbum/Create", corruptSessionId)
400             .content(caString).contentType(APPLICATION_JSON));
401
402         caString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
403             + "\"scope\"            : \"Global\"," + "\"writeable\"        : false,"
404             + "\"itemSchema\"       : {\"name\" : \"StringType\", \"version\" : \"0.0.1\"},"
405             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
406             + "\"description\"      : \"A description of hello\"" + "}";
407         result = apexRequest(put(BASE_URL + "/ContextAlbum/Update", -12345)
408             .content(caString).contentType(APPLICATION_JSON));
409         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
410         result = apexRequest(put(BASE_URL + "/ContextAlbum/Update", 1234545)
411             .content(caString).contentType(APPLICATION_JSON));
412         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
413         result = apexRequest(put(BASE_URL + "/ContextAlbum/Update", sessionId)
414             .content(caString).contentType(APPLICATION_JSON));
415         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
416
417         apexRequest(put(BASE_URL + "/ContextAlbum/Update", corruptSessionId)
418             .content(caString).contentType(APPLICATION_JSON));
419
420         apexRequest(get(BASE_URL + "/ContextAlbum/Get", corruptSessionId)
421             .queryParam("name", "Hello")
422             .queryParam("version", (String) null));
423
424         result = apexRequest(get(BASE_URL + "/ContextAlbum/Get", sessionId)
425             .queryParam("name", "Hello")
426             .queryParam("version", (String) null));
427         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
428         result = apexRequest(get(BASE_URL + "/ContextAlbum/Get", sessionId)
429             .queryParam("name", "IDontExist")
430             .queryParam("version", (String) null));
431         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
432         result = apexRequest(get(BASE_URL + "/ContextAlbum/Get", -123345)
433             .queryParam("name", (String) null)
434             .queryParam("version", (String) null));
435         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
436         result = apexRequest(get(BASE_URL + "/ContextAlbum/Get", 123345)
437             .queryParam("name", (String) null)
438             .queryParam("version", (String) null));
439         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
440
441         result = apexRequest(get(BASE_URL + "/Validate/ContextAlbum", sessionId)
442             .queryParam("name", (String) null)
443             .queryParam("version", (String) null));
444         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
445
446         apexRequest(delete(BASE_URL + "/ContextAlbum/Delete", corruptSessionId)
447             .queryParam("name", (String) null)
448             .queryParam("version", (String) null));
449
450         result = apexRequest(delete(BASE_URL + "/ContextAlbum/Delete", -123345)
451             .queryParam("name", (String) null)
452             .queryParam("version", (String) null));
453         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
454         result = apexRequest(delete(BASE_URL + "/ContextAlbum/Delete", 123345)
455             .queryParam("name", (String) null)
456             .queryParam("version", (String) null));
457         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
458         result = apexRequest(delete(BASE_URL + "/ContextAlbum/Delete", sessionId)
459             .queryParam("name", "Hello")
460             .queryParam("version", "0.0.2"));
461         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
462     }
463
464     @Test
465     void testContextAlbumExt() throws Exception {
466         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
467         final int sessionId = Integer.parseInt(result.getMessages().get(0));
468
469         final String modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
470
471         apexRequest(put(BASE_URL + "/Model/Load", sessionId)
472             .content(modelString).contentType(APPLICATION_JSON));
473         apexRequest(get(BASE_URL + "/ContextAlbum/Get", sessionId)
474             .queryParam("name", (String) null)
475             .queryParam("version", (String) null));
476
477         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
478     }
479
480     @Test
481     void testEvent() throws Exception {
482         final int corruptSessionId = createCorruptSession();
483
484         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
485         assertEquals(Result.SUCCESS, result.getResult());
486         final int sessionId = Integer.parseInt(result.getMessages().get(0));
487
488         result = apexRequest(get(BASE_URL + "/Validate/Event", -12345));
489         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
490
491         result = apexRequest(get(BASE_URL + "/Validate/Event", sessionId));
492         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
493
494         apexRequest(get(BASE_URL + "/Validate/Event", corruptSessionId));
495
496         result = apexRequest(get(BASE_URL + "/Validate/Event", sessionId)
497             .queryParam("name", (String) null)
498             .queryParam("version", (String) null));
499         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
500
501         result = apexRequest(get(BASE_URL + "/Validate/Event", sessionId)
502             .queryParam("name", "%%%$£")
503             .queryParam("version", (String) null));
504         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
505
506         String modelString = "Somewhere over the rainbow";
507         result = apexRequest(put(BASE_URL + "/Model/Load", -12345)
508             .content(modelString).contentType(APPLICATION_JSON));
509         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
510         result = apexRequest(put(BASE_URL + "/Model/Load", 12345)
511             .content(modelString).contentType(APPLICATION_JSON));
512         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
513         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
514             .content(modelString).contentType(APPLICATION_JSON));
515         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
516         modelString = "";
517         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
518             .content(modelString).contentType(APPLICATION_JSON));
519         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
520         modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.yaml");
521         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
522             .content(modelString).contentType(APPLICATION_JSON));
523         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
524         result = apexRequest(get(BASE_URL + "/Event/Get", sessionId)
525             .queryParam("name", (String) null)
526             .queryParam("version", (String) null));
527         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
528
529         String entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
530             + "\"namespace\"        : \"somewhere.over.the.rainbow\"," + "\"source\"           : \"beginning\","
531             + "\"target\"           : \"end\"," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
532             + "\"description\"      : \"A description of hello\"" + "}";
533         result = apexRequest(post(BASE_URL + "/Event/Create", -12345)
534             .content(entityString).contentType(APPLICATION_JSON));
535         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
536         result = apexRequest(post(BASE_URL + "/Event/Create", 1234545)
537             .content(entityString).contentType(APPLICATION_JSON));
538         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
539         result = apexRequest(post(BASE_URL + "/Event/Create", sessionId)
540             .content(entityString).contentType(APPLICATION_JSON));
541         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
542         result = apexRequest(post(BASE_URL + "/Event/Create", sessionId)
543             .content(entityString).contentType(APPLICATION_JSON));
544         assertEquals(ApexApiResult.Result.CONCEPT_EXISTS, result.getResult());
545
546         apexRequest(post(BASE_URL + "/Event/Create", corruptSessionId)
547             .content(entityString).contentType(APPLICATION_JSON));
548
549         entityString = "{" + "\"name\"             : \"Hiya\"," + "\"version\"          : \"0.0.2\","
550             + "\"namespace\"        : \"somewhere.over.the.rainbow\"," + "\"source\"           : \"beginning\","
551             + "\"target\"           : \"end\"," + "\"parameters\"       : {},"
552             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
553             + "\"description\"      : \"A description of hello\"" + "}";
554         result = apexRequest(post(BASE_URL + "/Event/Create", sessionId)
555             .content(entityString).contentType(APPLICATION_JSON));
556         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
557
558         entityString = "{" + "\"name\"             : \"HowsItGoing\"," + "\"version\"          : \"0.0.2\","
559             + "\"namespace\"        : \"somewhere.over.the.rainbow\"," + "\"source\"           : \"beginning\","
560             + "\"target\"           : \"end\","
561             + "\"parameters\"       : {\"Par0\" : {\"name\" : \"StringType\", \"version\" : \"0.0.1\", "
562             + "\"localName\" : \"Par0\", \"optional\" : false}},"
563             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
564             + "\"description\"      : \"A description of hello\"" + "}";
565         result = apexRequest(post(BASE_URL + "/Event/Create", sessionId)
566             .content(entityString).contentType(APPLICATION_JSON));
567         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
568
569         entityString = "{" + "\"name\"             : \"Hi\"," + "\"version\"          : \"0.0.2\","
570             + "\"namespace\"        : \"somewhere.over.the.rainbow\"," + "\"source\"           : \"beginning\","
571             + "\"target\"           : \"end\"," + "\"parameters\"       : {\"Par0\" : null},"
572             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
573             + "\"description\"      : \"A description of hello\"" + "}";
574         result = apexRequest(post(BASE_URL + "/Event/Create", sessionId)
575             .content(entityString).contentType(APPLICATION_JSON));
576         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
577
578         entityString = "{" + "\"name\"             : \"GoodDay\"," + "\"version\"          : \"0.0.2\","
579             + "\"namespace\"        : \"somewhere.over.the.rainbow\"," + "\"source\"           : \"beginning\","
580             + "\"target\"           : \"end\","
581             + "\"parameters\"       : {\"Par0\" : {\"name\" : \"NonExistantType\", \"version\" : \"0.0.1\", "
582             + "\"localName\" : \"Par0\", \"optional\" : false}},"
583             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
584             + "\"description\"      : \"A description of hello\"" + "}";
585         result = apexRequest(post(BASE_URL + "/Event/Create", sessionId)
586             .content(entityString).contentType(APPLICATION_JSON));
587         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
588
589         entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
590             + "\"namespace\"        : \"somewhere.over.someone.elses.rainbow\"," + "\"source\"           : \"start\","
591             + "\"target\"           : \"finish\"," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
592             + "\"description\"      : \"A description of hello\"" + "}";
593         result = apexRequest(put(BASE_URL + "/Event/Update", -12345)
594             .content(entityString).contentType(APPLICATION_JSON));
595         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
596         result = apexRequest(put(BASE_URL + "/Event/Update", 1234545)
597             .content(entityString).contentType(APPLICATION_JSON));
598         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
599         result = apexRequest(put(BASE_URL + "/Event/Update", sessionId)
600             .content(entityString).contentType(APPLICATION_JSON));
601         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
602
603         apexRequest(put(BASE_URL + "/Event/Update", corruptSessionId)
604             .content(entityString).contentType(APPLICATION_JSON));
605
606         entityString = "{" + "\"name\"             : null," + "\"version\"          : \"0.0.2\","
607             + "\"namespace\"        : \"somewhere.over.someone.elses.rainbow\"," + "\"source\"           : \"start\","
608             + "\"target\"           : \"finish\"," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
609             + "\"description\"      : \"A description of hello\"" + "}";
610         result = apexRequest(put(BASE_URL + "/Event/Update", sessionId)
611             .content(entityString).contentType(APPLICATION_JSON));
612         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
613
614         entityString = "{" + "\"name\"             : \"NonExistantEvent\"," + "\"version\"          : \"0.0.2\","
615             + "\"namespace\"        : \"somewhere.over.someone.elses.rainbow\"," + "\"source\"           : \"start\","
616             + "\"target\"           : \"finish\"," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
617             + "\"description\"      : \"A description of hello\"" + "}";
618         result = apexRequest(put(BASE_URL + "/Event/Update", sessionId)
619             .content(entityString).contentType(APPLICATION_JSON));
620         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
621
622         result = apexRequest(get(BASE_URL + "/Event/Get", sessionId)
623             .queryParam("name", "Hello")
624             .queryParam("version", (String) null));
625         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
626     }
627
628     @Test
629     void testEventExt() throws Exception {
630         final int corruptSessionId = createCorruptSession();
631
632         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
633         final int sessionId = Integer.parseInt(result.getMessages().get(0));
634
635         String entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
636             + "\"namespace\"        : \"somewhere.over.the.rainbow\"," + "\"source\"           : \"beginning\","
637             + "\"target\"           : \"end\"," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
638             + "\"description\"      : \"A description of hello\"" + "}";
639         apexRequest(post(BASE_URL + "/Event/Create", sessionId)
640             .content(entityString).contentType(APPLICATION_JSON));
641
642         entityString = "{" + "\"name\"             : \"Hiya\"," + "\"version\"          : \"0.0.2\","
643             + "\"namespace\"        : \"somewhere.over.the.rainbow\"," + "\"source\"           : \"beginning\","
644             + "\"target\"           : \"end\"," + "\"parameters\"       : {},"
645             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
646             + "\"description\"      : \"A description of hello\"" + "}";
647
648         apexRequest(post(BASE_URL + "/Event/Create", sessionId)
649             .content(entityString).contentType(APPLICATION_JSON));
650         apexRequest(post(BASE_URL + "/Event/Create", corruptSessionId)
651             .content(entityString).contentType(APPLICATION_JSON));
652         apexRequest(put(BASE_URL + "/Event/Update", sessionId)
653             .content(entityString).contentType(APPLICATION_JSON));
654         result = apexRequest(get(BASE_URL + "/Event/Get", sessionId)
655             .queryParam("name", "IDontExist")
656             .queryParam("version", (String) null));
657         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
658         result = apexRequest(get(BASE_URL + "/Event/Get", -123345)
659             .queryParam("name", (String) null)
660             .queryParam("version", (String) null));
661         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
662         result = apexRequest(get(BASE_URL + "/Event/Get", 123345)
663             .queryParam("name", (String) null)
664             .queryParam("version", (String) null));
665         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
666
667         apexRequest(get(BASE_URL + "/Event/Get", corruptSessionId)
668             .queryParam("name", "Hello")
669             .queryParam("version", (String) null));
670
671         result = apexRequest(get(BASE_URL + "/Validate/Event", sessionId)
672             .queryParam("name", (String) null)
673             .queryParam("version", (String) null));
674         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
675         result = apexRequest(get(BASE_URL + "/Validate/Event", -12345)
676             .queryParam("name", (String) null)
677             .queryParam("version", (String) null));
678         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
679         result = apexRequest(get(BASE_URL + "/Validate/Event", 12345)
680             .queryParam("name", (String) null)
681             .queryParam("version", (String) null));
682         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
683
684         apexRequest(delete(BASE_URL + "/Event/Delete", corruptSessionId)
685             .queryParam("name", (String) null)
686             .queryParam("version", (String) null));
687
688         result = apexRequest(delete(BASE_URL + "/Event/Delete", -123345)
689             .queryParam("name", (String) null)
690             .queryParam("version", (String) null));
691         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
692         result = apexRequest(delete(BASE_URL + "/Event/Delete", 123345)
693             .queryParam("name", (String) null)
694             .queryParam("version", (String) null));
695         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
696         result = apexRequest(delete(BASE_URL + "/Event/Delete", sessionId)
697             .queryParam("name", "Hello")
698             .queryParam("version", "0.0.2"));
699         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
700         result = apexRequest(delete(BASE_URL + "/Event/Delete", sessionId)
701             .queryParam("name", (String) null)
702             .queryParam("version", (String) null));
703         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
704     }
705
706     @Test
707     void testTask() throws Exception {
708         final int corruptSessionId = createCorruptSession();
709
710         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
711         assertEquals(Result.SUCCESS, result.getResult());
712         final int sessionId = Integer.parseInt(result.getMessages().get(0));
713
714         result = apexRequest(get(BASE_URL + "/Validate/Task", -12345));
715         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
716
717         result = apexRequest(get(BASE_URL + "/Validate/Task", sessionId));
718         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
719
720         try {
721             apexRequest(get(BASE_URL + "/Validate/Task", corruptSessionId));
722         } catch (final Exception e) {
723             assertEquals("HTTP 500 Request failed.", e.getMessage());
724         }
725
726         result = apexRequest(get(BASE_URL + "/Validate/Task", sessionId)
727             .queryParam("name", (String) null)
728             .queryParam("version", (String) null));
729         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
730
731         result = apexRequest(get(BASE_URL + "/Validate/Task", sessionId)
732             .queryParam("name", "%%%$£")
733             .queryParam("version", (String) null));
734         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
735
736         String modelString = "Somewhere over the rainbow";
737         result = apexRequest(put(BASE_URL + "/Model/Load", -12345)
738             .content(modelString).contentType(APPLICATION_JSON));
739         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
740         result = apexRequest(put(BASE_URL + "/Model/Load", 12345)
741             .content(modelString).contentType(APPLICATION_JSON));
742         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
743         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
744             .content(modelString).contentType(APPLICATION_JSON));
745         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
746         modelString = "";
747         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
748             .content(modelString).contentType(APPLICATION_JSON));
749         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
750         modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
751         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
752             .content(modelString).contentType(APPLICATION_JSON));
753         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
754         result = apexRequest(get(BASE_URL + "/Event/Get", sessionId)
755             .queryParam("name", (String) null)
756             .queryParam("version", (String) null));
757         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
758
759         String entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
760             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
761             + "\"description\"      : \"A description of hello\"" + "}";
762         result = apexRequest(post(BASE_URL + "/Task/Create", -12345)
763             .content(entityString).contentType(APPLICATION_JSON));
764         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
765         result = apexRequest(post(BASE_URL + "/Task/Create", 1234545)
766             .content(entityString).contentType(APPLICATION_JSON));
767         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
768         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
769             .content(entityString).contentType(APPLICATION_JSON));
770         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
771         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
772             .content(entityString).contentType(APPLICATION_JSON));
773         assertEquals(ApexApiResult.Result.CONCEPT_EXISTS, result.getResult());
774
775         apexRequest(post(BASE_URL + "/Task/Create", corruptSessionId)
776             .content(entityString).contentType(APPLICATION_JSON));
777
778         entityString = "{" + "\"name\"             : \"Hiya\"," + "\"version\"          : \"0.0.2\","
779             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
780             + "\"description\"      : \"A description of hello\"" + "}";
781         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
782             .content(entityString).contentType(APPLICATION_JSON));
783         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
784
785         entityString = "{" + "\"name\"             : \"HowsItGoing\"," + "\"version\"          : \"0.0.2\","
786             + "\"inputFields\"      : {\"IField0\" : {\"name\" : \"StringType\", \"version\" : \"0.0.1\", "
787             + "\"localName\" : \"IField0\", \"optional\" : false}},"
788             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
789             + "\"description\"      : \"A description of hello\"" + "}";
790         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
791             .content(entityString).contentType(APPLICATION_JSON));
792         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
793
794         entityString = "{" + "\"name\"             : \"Hi\"," + "\"version\"          : \"0.0.2\","
795             + "\"inputFields\"      : {\"IField0\" : null},"
796             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
797             + "\"description\"      : \"A description of hello\"" + "}";
798         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
799             .content(entityString).contentType(APPLICATION_JSON));
800         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
801
802         entityString = "{" + "\"name\"             : \"GoodDay\"," + "\"version\"          : \"0.0.2\","
803             + "\"inputFields\"      : {\"IField0\" : {\"name\" : \"NonExistantType\", \"version\" : \"0.0.1\", "
804             + "\"localName\" : \"IField0\", \"optional\" : false}},"
805             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
806             + "\"description\"      : \"A description of hello\"" + "}";
807         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
808             .content(entityString).contentType(APPLICATION_JSON));
809         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
810
811         entityString = "{" + "\"name\"             : \"Howdy\"," + "\"version\"          : \"0.0.2\","
812             + "\"inputFields\"      : {\"IField0\" : {\"name\" : \"NonExistantType\", \"version\" : \"0.0.1\", "
813             + "\"localName\" : \"NotIField0\", \"optional\" : false}},"
814             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
815             + "\"description\"      : \"A description of hello\"" + "}";
816         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
817             .content(entityString).contentType(APPLICATION_JSON));
818         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
819
820         entityString = "{" + "\"name\"             : \"HowsItGoing2\"," + "\"version\"          : \"0.0.2\","
821             + "\"outputFields\"     : {\"OField0\" : {\"name\" : \"StringType\", \"version\" : \"0.0.1\", "
822             + "\"localName\" : \"OField0\", \"optional\" : false}},"
823             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
824             + "\"description\"      : \"A description of hello\"" + "}";
825         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
826             .content(entityString).contentType(APPLICATION_JSON));
827         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
828
829         entityString = "{" + "\"name\"             : \"Hi2\"," + "\"version\"          : \"0.0.2\","
830             + "\"outputFields\"     : {\"OField0\" : null},"
831             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
832             + "\"description\"      : \"A description of hello\"" + "}";
833         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
834             .content(entityString).contentType(APPLICATION_JSON));
835         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
836
837         entityString = "{" + "\"name\"             : \"GoodDay2\"," + "\"version\"          : \"0.0.2\","
838             + "\"outputFields\"     : {\"OField0\" : {\"name\" : \"NonExistantType\", \"version\" : \"0.0.1\","
839             + " \"localName\" : \"OField0\", \"optional\" : false}},"
840             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
841             + "\"description\"      : \"A description of hello\"" + "}";
842         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
843             .content(entityString).contentType(APPLICATION_JSON));
844         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
845
846         entityString = "{" + "\"name\"             : \"Howdy2\"," + "\"version\"          : \"0.0.2\","
847             + "\"outputFields\"     : {\"OField0\" : {\"name\" : \"NonExistantType\", \"version\" : \"0.0.1\", "
848             + "\"localName\" : \"NotOField0\", \"optional\" : false}},"
849             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
850             + "\"description\"      : \"A description of hello\"" + "}";
851         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
852             .content(entityString).contentType(APPLICATION_JSON));
853         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
854     }
855
856     @Test
857     void testTaskExt() throws Exception {
858         final int corruptSessionId = createCorruptSession();
859
860         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
861         final int sessionId = Integer.parseInt(result.getMessages().get(0));
862
863         final String modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
864
865         apexRequest(put(BASE_URL + "/Model/Load", sessionId)
866             .content(modelString).contentType(APPLICATION_JSON));
867         apexRequest(get(BASE_URL + "/Event/Get", sessionId)
868             .queryParam("name", (String) null)
869             .queryParam("version", (String) null));
870
871         String entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
872             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
873             + "\"description\"      : \"A description of hello\"" + "}";
874         apexRequest(post(BASE_URL + "/Task/Create", sessionId)
875             .content(entityString).contentType(APPLICATION_JSON));
876         apexRequest(post(BASE_URL + "/Task/Create", corruptSessionId)
877             .content(entityString).contentType(APPLICATION_JSON));
878
879         entityString = "{" + "\"name\"             : \"HowsItGoing3\"," + "\"version\"          : \"0.0.2\","
880             + "\"taskLogic\"        : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons,"
881             + " lots of lime\"}," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
882             + "\"description\"      : \"A description of hello\"" + "}";
883         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
884             .content(entityString).contentType(APPLICATION_JSON));
885         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
886
887         entityString = "{" + "\"name\"             : \"Hi3\"," + "\"version\"          : \"0.0.2\","
888             + "\"taskLogic\"        : null," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
889             + "\"description\"      : \"A description of hello\"" + "}";
890         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
891             .content(entityString).contentType(APPLICATION_JSON));
892         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
893
894         entityString = "{" + "\"name\"             : \"GoodDay3\"," + "\"version\"          : \"0.0.2\","
895             + "\"namespace\"        : \"somewhere.over.the.rainbow\"," + "\"source\"           : \"beginning\","
896             + "\"target\"           : \"end\","
897             + "\"taskLogic\"        : {\"logicFlavour\" : \"UNDEFINED\", \"logic\" : \"lots of lemons,"
898             + " lots of lime\"}," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
899             + "\"description\"      : \"A description of hello\"" + "}";
900         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
901             .content(entityString).contentType(APPLICATION_JSON));
902         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
903
904         entityString = "{" + "\"name\"             : \"Howdy3\"," + "\"version\"          : \"0.0.2\","
905             + "\"taskLogic\"        : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : null},"
906             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
907             + "\"description\"      : \"A description of hello\"" + "}";
908         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
909             .content(entityString).contentType(APPLICATION_JSON));
910         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
911
912         entityString = "{" + "\"name\"             : \"HowsItGoing4\"," + "\"version\"          : \"0.0.2\","
913             + "\"parameters\"       : {\"Par0\" : {\"parameterName\" : \"Par0\", "
914             + "\"defaultValue\" : \"Parameter Defaultvalue\"}},"
915             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
916             + "\"description\"      : \"A description of hello\"" + "}";
917         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
918             .content(entityString).contentType(APPLICATION_JSON));
919         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
920
921         entityString = "{" + "\"name\"             : \"Hi4\"," + "\"version\"          : \"0.0.2\","
922             + "\"parameters\"       : {\"Par0\" : null},"
923             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
924             + "\"description\"      : \"A description of hello\"" + "}";
925         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
926             .content(entityString).contentType(APPLICATION_JSON));
927         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
928
929         entityString = "{" + "\"name\"             : \"GoodDay4\"," + "\"version\"          : \"0.0.2\","
930             + "\"parameters\"       : {\"Par0\" : {\"parameterName\" : \"NotPar0\", \"defaultValue\" : "
931             + "\"Parameter Defaultvalue\"}}," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
932             + "\"description\"      : \"A description of hello\"" + "}";
933         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
934             .content(entityString).contentType(APPLICATION_JSON));
935         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
936
937         entityString = "{" + "\"name\"             : \"Howdy4\"," + "\"version\"          : \"0.0.2\","
938             + "\"parameters\"       : {\"Par0\" : {\"parameterName\" : \"MyParameter\", \"defaultValue\" : null}},"
939             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
940             + "\"description\"      : \"A description of hello\"" + "}";
941         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
942             .content(entityString).contentType(APPLICATION_JSON));
943         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
944
945         entityString = "{" + "\"name\"             : \"HowsItGoing5\"," + "\"version\"          : \"0.0.2\","
946             + "\"contexts\"         : [{\"name\" : \"contextAlbum0\", \"version\" : \"0.0.1\"}],"
947             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
948             + "\"description\"      : \"A description of hello\"" + "}";
949         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
950             .content(entityString).contentType(APPLICATION_JSON));
951         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
952
953         entityString = "{" + "\"name\"             : \"Hi5\"," + "\"version\"          : \"0.0.2\","
954             + "\"contexts\"         : []," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
955             + "\"description\"      : \"A description of hello\"" + "}";
956         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
957             .content(entityString).contentType(APPLICATION_JSON));
958         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
959
960         entityString = "{" + "\"name\"             : \"GoodDay5\"," + "\"version\"          : \"0.0.2\","
961             + "\"contexts\"         : [{\"name\" : \"NonExistantType\", \"version\" : \"0.0.1\"}],"
962             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
963             + "\"description\"      : \"A description of hello\"" + "}";
964         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
965             .content(entityString).contentType(APPLICATION_JSON));
966         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
967
968         entityString = "{" + "\"name\"             : \"Howdy5\"," + "\"version\"          : \"0.0.2\","
969             + "\"contexts\"         : [{\"name\" : null, \"version\" : \"0.0.1\"}],"
970             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002799\","
971             + "\"description\"      : \"A description of hello\"" + "}";
972         result = apexRequest(post(BASE_URL + "/Task/Create", sessionId)
973             .content(entityString).contentType(APPLICATION_JSON));
974         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
975
976         entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
977             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
978             + "\"description\"      : \"A description of hello\"" + "}";
979         result = apexRequest(put(BASE_URL + "/Task/Update", -12345)
980             .content(entityString).contentType(APPLICATION_JSON));
981         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
982         result = apexRequest(put(BASE_URL + "/Task/Update", 1234545)
983             .content(entityString).contentType(APPLICATION_JSON));
984         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
985         result = apexRequest(put(BASE_URL + "/Task/Update", sessionId)
986             .content(entityString).contentType(APPLICATION_JSON));
987         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
988
989         apexRequest(put(BASE_URL + "/Task/Update", corruptSessionId)
990             .content(entityString).contentType(APPLICATION_JSON));
991
992         entityString = "{" + "\"name\"             : null," + "\"version\"          : \"0.0.2\","
993             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
994             + "\"description\"      : \"A description of hello\"" + "}";
995         result = apexRequest(put(BASE_URL + "/Task/Update", sessionId)
996             .content(entityString).contentType(APPLICATION_JSON));
997         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
998
999         entityString = "{" + "\"name\"             : \"NonExistantEvent\"," + "\"version\"          : \"0.0.2\","
1000             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1001             + "\"description\"      : \"A description of hello\"" + "}";
1002         result = apexRequest(put(BASE_URL + "/Task/Update", sessionId)
1003             .content(entityString).contentType(APPLICATION_JSON));
1004         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
1005
1006         result = apexRequest(get(BASE_URL + "/Task/Get", sessionId)
1007             .queryParam("name", "Hello")
1008             .queryParam("version", (String) null));
1009         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1010         result = apexRequest(get(BASE_URL + "/Task/Get", sessionId)
1011             .queryParam("name", (String) null)
1012             .queryParam("version", (String) null));
1013         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1014         result = apexRequest(get(BASE_URL + "/Task/Get", sessionId)
1015             .queryParam("name", "IDontExist")
1016             .queryParam("version", (String) null));
1017         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
1018         result = apexRequest(get(BASE_URL + "/Task/Get", -123345)
1019             .queryParam("name", (String) null)
1020             .queryParam("version", (String) null));
1021         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1022         result = apexRequest(get(BASE_URL + "/Task/Get", 123345)
1023             .queryParam("name", (String) null)
1024             .queryParam("version", (String) null));
1025         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1026
1027         apexRequest(get(BASE_URL + "/Task/Get", corruptSessionId)
1028             .queryParam("name", "Hello")
1029             .queryParam("version", (String) null));
1030
1031         result = apexRequest(get(BASE_URL + "/Validate/Event", sessionId)
1032             .queryParam("name", (String) null)
1033             .queryParam("version", (String) null));
1034         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1035         result = apexRequest(get(BASE_URL + "/Validate/Event", -12345)
1036             .queryParam("name", (String) null)
1037             .queryParam("version", (String) null));
1038         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1039         result = apexRequest(get(BASE_URL + "/Validate/Event", 12345)
1040             .queryParam("name", (String) null)
1041             .queryParam("version", (String) null));
1042         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1043     }
1044
1045     @Test
1046     void testTaskExt_2() throws Exception {
1047         final int corruptSessionId = createCorruptSession();
1048
1049         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
1050         final int sessionId = Integer.parseInt(result.getMessages().get(0));
1051
1052         final String modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
1053
1054         apexRequest(put(BASE_URL + "/Model/Load", sessionId)
1055             .content(modelString).contentType(APPLICATION_JSON));
1056         apexRequest(get(BASE_URL + "/Event/Get", sessionId)
1057             .queryParam("name", (String) null)
1058             .queryParam("version", (String) null));
1059
1060         String entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
1061             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1062             + "\"description\"      : \"A description of hello\"" + "}";
1063
1064         apexRequest(post(BASE_URL + "/Task/Create", 1234545)
1065             .content(entityString).contentType(APPLICATION_JSON));
1066         apexRequest(post(BASE_URL + "/Task/Create", sessionId)
1067             .content(entityString).contentType(APPLICATION_JSON));
1068         apexRequest(post(BASE_URL + "/Task/Create", corruptSessionId)
1069             .content(entityString).contentType(APPLICATION_JSON));
1070
1071         result = apexRequest(delete(BASE_URL + "/Task/Delete", -123345)
1072             .queryParam("name", (String) null)
1073             .queryParam("version", (String) null));
1074         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1075         result = apexRequest(delete(BASE_URL + "/Task/Delete", 123345)
1076             .queryParam("name", (String) null)
1077             .queryParam("version", (String) null));
1078         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1079         result = apexRequest(delete(BASE_URL + "/Task/Delete", sessionId)
1080             .queryParam("name", "Hello")
1081             .queryParam("version", "0.0.2"));
1082         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1083         result = apexRequest(delete(BASE_URL + "/Task/Delete", sessionId)
1084             .queryParam("name", (String) null)
1085             .queryParam("version", (String) null));
1086         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1087     }
1088
1089     @Test
1090     void testPolicy() throws Exception {
1091         final int corruptSessionId = createCorruptSession();
1092
1093         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
1094         assertEquals(Result.SUCCESS, result.getResult());
1095         final int sessionId = Integer.parseInt(result.getMessages().get(0));
1096
1097         result = apexRequest(get(BASE_URL + "/Model/Validate", -12345));
1098         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1099
1100         result = apexRequest(get(BASE_URL + "/Model/Validate", sessionId));
1101         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1102
1103         apexRequest(get(BASE_URL + "/Model/Validate", corruptSessionId));
1104         result = apexRequest(get(BASE_URL + "/Model/Validate", sessionId)
1105             .queryParam("name", (String) null)
1106             .queryParam("version", (String) null));
1107         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1108
1109         result = apexRequest(get(BASE_URL + "/Model/Validate", sessionId)
1110             .queryParam("name", "%%%$£")
1111             .queryParam("version", (String) null));
1112         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1113
1114         String modelString = "Somewhere over the rainbow";
1115         result = apexRequest(put(BASE_URL + "/Model/Load", -12345)
1116             .content(modelString).contentType(APPLICATION_JSON));
1117         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1118         result = apexRequest(put(BASE_URL + "/Model/Load", 12345)
1119             .content(modelString).contentType(APPLICATION_JSON));
1120         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1121         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
1122             .content(modelString).contentType(APPLICATION_JSON));
1123         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1124         modelString = "";
1125         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
1126             .content(modelString).contentType(APPLICATION_JSON));
1127         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1128         modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
1129         result = apexRequest(put(BASE_URL + "/Model/Load", sessionId)
1130             .content(modelString).contentType(APPLICATION_JSON));
1131         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1132         result = apexRequest(get(BASE_URL + "/Event/Get", sessionId)
1133             .queryParam("name", (String) null)
1134             .queryParam("version", (String) null));
1135         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1136
1137         String entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
1138             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1139             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1140             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1141             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1142             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1143             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1144             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1145             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1146             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1147             + "\"description\"      : \"A description of hello\"" + "}";
1148         result = apexRequest(post(BASE_URL + "/Policy/Create", -12345)
1149             .content(entityString).contentType(APPLICATION_JSON));
1150         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1151         result = apexRequest(post(BASE_URL + "/Policy/Create", 1234545)
1152             .content(entityString).contentType(APPLICATION_JSON));
1153         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1154         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1155             .content(entityString).contentType(APPLICATION_JSON));
1156         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1157         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1158             .content(entityString).contentType(APPLICATION_JSON));
1159         assertEquals(ApexApiResult.Result.CONCEPT_EXISTS, result.getResult());
1160
1161         apexRequest(post(BASE_URL + "/Policy/Create", corruptSessionId)
1162             .content(entityString).contentType(APPLICATION_JSON));
1163
1164         entityString = "{" + "\"name\"             : \"GoodTaSeeYa\"," + "\"version\"          : \"0.0.2\","
1165             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1166             + "\"states\"           : null," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1167             + "\"description\"      : \"A description of hello\"" + "}";
1168         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1169             .content(entityString).contentType(APPLICATION_JSON));
1170         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1171
1172         entityString = "{" + "\"name\"             : \"HelloAnother\"," + "\"version\"          : \"0.0.2\","
1173             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1174             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1175             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1176             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1177             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1178             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1179             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1180             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1181             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1182             + "\"description\"      : \"A description of hello\"" + "}";
1183         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1184             .content(entityString).contentType(APPLICATION_JSON));
1185         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1186
1187         entityString = "{" + "\"name\"             : \"Hello2\"," + "\"version\"          : \"0.0.2\","
1188             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1189             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1190             + "  \"trigger\"        : null," + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1191             + "  \"stateOutputs\"   : {" + "   \"so0\"           : {"
1192             + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1193             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1194             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1195             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1196             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1197             + "\"description\"      : \"A description of hello\"" + "}";
1198         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1199             .content(entityString).contentType(APPLICATION_JSON));
1200         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1201
1202         entityString = "{" + "\"name\"             : \"Hello3\"," + "\"version\"          : \"0.0.2\","
1203             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1204             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1205             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1206             + "  \"defaultTask\"    : null," + "  \"stateOutputs\"   : {" + "   \"so0\"           : {"
1207             + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1208             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1209             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1210             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1211             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1212             + "\"description\"      : \"A description of hello\"" + "}";
1213         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1214             .content(entityString).contentType(APPLICATION_JSON));
1215         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1216
1217         entityString = "{" + "\"name\"             : \"Hello4\"," + "\"version\"          : \"0.0.2\","
1218             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1219             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1220             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1221             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : null,"
1222             + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1223             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1224             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1225             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1226             + "\"description\"      : \"A description of hello\"" + "}";
1227         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1228             .content(entityString).contentType(APPLICATION_JSON));
1229         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1230
1231         entityString = "{" + "\"name\"             : \"Hello5\"," + "\"version\"          : \"0.0.2\","
1232             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1233             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1234             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1235             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1236             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1237             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : null" + " }" + "},"
1238             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1239             + "\"description\"      : \"A description of hello\"" + "}";
1240         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1241             .content(entityString).contentType(APPLICATION_JSON));
1242         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1243
1244         entityString = "{" + "\"name\"             : \"Hello6\"," + "\"version\"          : \"0.0.2\","
1245             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1246             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1247             + "  \"trigger\"        : {\"name\" : \"IDontExist\", \"version\" : \"0.0.1\"},"
1248             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1249             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1250             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1251             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1252             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1253             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1254             + "\"description\"      : \"A description of hello\"" + "}";
1255         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1256             .content(entityString).contentType(APPLICATION_JSON));
1257         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
1258
1259         entityString = "{" + "\"name\"             : \"Hello7\"," + "\"version\"          : \"0.0.2\","
1260             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1261             + "\"states\"           : {" + " \"state\"           : null" + "},"
1262             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1263             + "\"description\"      : \"A description of hello\"" + "}";
1264         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1265             .content(entityString).contentType(APPLICATION_JSON));
1266         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1267
1268         entityString = "{" + "\"name\"             : \"Hello8\"," + "\"version\"          : \"0.0.2\","
1269             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1270             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1271             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1272             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1273             + "   \"so0\"           : {"
1274             + "    \"event\"        : {\"name\" : \"IDontExist\", \"version\" : \"0.0.1\"},"
1275             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1276             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1277             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1278             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1279             + "\"description\"      : \"A description of hello\"" + "}";
1280         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1281             .content(entityString).contentType(APPLICATION_JSON));
1282         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
1283
1284         entityString = "{" + "\"name\"             : \"Hello9\"," + "\"version\"          : \"0.0.2\","
1285             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1286             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1287             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1288             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1289             + "   \"so0\"           : {" + "    \"event\"        : null," + "    \"nextState\"    : null" + "   }"
1290             + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1291             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1292             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1293             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1294             + "\"description\"      : \"A description of hello\"" + "}";
1295         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1296             .content(entityString).contentType(APPLICATION_JSON));
1297         System.err.println(result);
1298         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1299     }
1300
1301     @Test
1302     void testPolicyExt() throws Exception {
1303         final int corruptSessionId = createCorruptSession();
1304
1305         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
1306         final int sessionId = Integer.parseInt(result.getMessages().get(0));
1307
1308         final String modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
1309
1310         apexRequest(put(BASE_URL + "/Model/Load", sessionId)
1311             .content(modelString).contentType(APPLICATION_JSON));
1312
1313         String entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
1314             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1315             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1316             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1317             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1318             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1319             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1320             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1321             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1322             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1323             + "\"description\"      : \"A description of hello\"" + "}";
1324
1325         apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1326             .content(entityString).contentType(APPLICATION_JSON));
1327         apexRequest(post(BASE_URL + "/Policy/Create", corruptSessionId)
1328             .content(entityString).contentType(APPLICATION_JSON));
1329
1330         entityString = "{" + "\"name\"             : \"HelloAnother\"," + "\"version\"          : \"0.0.2\","
1331             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1332             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1333             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1334             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1335             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1336             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1337             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1338             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1339             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1340             + "\"description\"      : \"A description of hello\"" + "}";
1341         apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1342             .content(entityString).contentType(APPLICATION_JSON));
1343
1344         entityString = "{" + "\"name\"             : \"Hello10\"," + "\"version\"          : \"0.0.2\","
1345             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1346             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1347             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1348             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1349             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1350             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1351             + "    \"task\"         : {\"name\" : \"IDontExist\", \"version\" : \"0.0.1\"},"
1352             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1353             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1354             + "\"description\"      : \"A description of hello\"" + "}";
1355         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1356             .content(entityString).contentType(APPLICATION_JSON));
1357         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
1358
1359         entityString = "{" + "\"name\"             : \"Hello11\"," + "\"version\"          : \"0.0.2\","
1360             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1361             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1362             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1363             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1364             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1365             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1366             + "    \"task\"         : null," + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\""
1367             + "   }" + "  }" + " }" + "}," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1368             + "\"description\"      : \"A description of hello\"" + "}";
1369         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1370             .content(entityString).contentType(APPLICATION_JSON));
1371         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1372
1373         entityString = "{" + "\"name\"                 : \"Hello12\"," + "\"version\"              : \"0.0.2\","
1374             + "\"template\"             : \"somewhere.over.the.rainbow\"," + "\"firstState\"           : \"state\","
1375             + "\"states\"               : {" + " \"state\"               : {" + "  \"name\"               : \"state\","
1376             + "  \"trigger\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1377             + "  \"defaultTask\"        : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1378             + "  \"taskSelectionLogic\" : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons, "
1379             + "lots of lime\"}," + "  \"stateOutputs\"       : {" + "   \"so0\"               : {"
1380             + "    \"event\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1381             + "    \"nextState\"        : null" + "   }" + "  }," + "  \"tasks\"              : {"
1382             + "   \"tr0\"               : {"
1383             + "    \"task\"             : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1384             + "    \"outputType\"       : \"DIRECT\"," + "    \"outputName\"       : \"so0\"" + "   }" + "  }" + " }"
1385             + "}," + "\"uuid\"                 : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1386             + "\"description\"          : \"A description of hello\"" + "}";
1387         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1388             .content(entityString).contentType(APPLICATION_JSON));
1389         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1390
1391         entityString = "{" + "\"name\"                 : \"Hello13\"," + "\"version\"              : \"0.0.2\","
1392             + "\"template\"             : \"somewhere.over.the.rainbow\"," + "\"firstState\"           : \"state\","
1393             + "\"states\"               : {" + " \"state\"               : {" + "  \"name\"               : \"state\","
1394             + "  \"trigger\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1395             + "  \"defaultTask\"        : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1396             + "  \"taskSelectionLogic\" : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : null},"
1397             + "  \"stateOutputs\"       : {" + "   \"so0\"               : {"
1398             + "    \"event\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1399             + "    \"nextState\"        : null" + "   }" + "  }," + "  \"tasks\"              : {"
1400             + "   \"tr0\"               : {"
1401             + "    \"task\"             : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1402             + "    \"outputType\"       : \"DIRECT\"," + "    \"outputName\"       : \"so0\"" + "   }" + "  }" + " }"
1403             + "}," + "\"uuid\"                 : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1404             + "\"description\"          : \"A description of hello\"" + "}";
1405         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1406             .content(entityString).contentType(APPLICATION_JSON));
1407         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1408
1409         entityString = "{" + "\"name\"                 : \"Hello14\"," + "\"version\"              : \"0.0.2\","
1410             + "\"template\"             : \"somewhere.over.the.rainbow\"," + "\"firstState\"           : \"state\","
1411             + "\"states\"               : {" + " \"state\"               : {" + "  \"name\"               : \"state\","
1412             + "  \"trigger\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1413             + "  \"defaultTask\"        : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1414             + "  \"taskSelectionLogic\" : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons, "
1415             + "lots of lime\"},"
1416             + "  \"contexts\"           : [{\"name\" : \"contextAlbum0\", \"version\" : \"0.0.1\"}],"
1417             + "  \"stateOutputs\"       : {" + "   \"so0\"               : {"
1418             + "    \"event\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1419             + "    \"nextState\"        : null" + "   }" + "  }," + "  \"tasks\"              : {"
1420             + "   \"tr0\"               : {"
1421             + "    \"task\"             : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1422             + "    \"outputType\"       : \"DIRECT\"," + "    \"outputName\"       : \"so0\"" + "   }" + "  }" + " }"
1423             + "}," + "\"uuid\"                 : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1424             + "\"description\"          : \"A description of hello\"" + "}";
1425         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1426             .content(entityString).contentType(APPLICATION_JSON));
1427         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1428
1429         entityString = "{" + "\"name\"                 : \"Hello15\"," + "\"version\"              : \"0.0.2\","
1430             + "\"template\"             : \"somewhere.over.the.rainbow\"," + "\"firstState\"           : \"state\","
1431             + "\"states\"               : {" + " \"state\"               : {" + "  \"name\"               : \"state\","
1432             + "  \"trigger\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1433             + "  \"defaultTask\"        : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1434             + "  \"taskSelectionLogic\" : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons, "
1435             + "lots of lime\"}," + "  \"contexts\"           : [{\"name\" : \"IDontExist\", \"version\" : \"0.0.1\"}],"
1436             + "  \"stateOutputs\"       : {" + "   \"so0\"               : {"
1437             + "    \"event\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1438             + "    \"nextState\"        : null" + "   }" + "  }," + "  \"tasks\"              : {"
1439             + "   \"tr0\"               : {"
1440             + "    \"task\"             : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1441             + "    \"outputType\"       : \"DIRECT\"," + "    \"outputName\"       : \"so0\"" + "   }" + "  }" + " }"
1442             + "}," + "\"uuid\"                 : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1443             + "\"description\"          : \"A description of hello\"" + "}";
1444         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1445             .content(entityString).contentType(APPLICATION_JSON));
1446         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
1447
1448         entityString = "{" + "\"name\"                 : \"Hello16\"," + "\"version\"              : \"0.0.2\","
1449             + "\"template\"             : \"somewhere.over.the.rainbow\"," + "\"firstState\"           : \"state\","
1450             + "\"states\"               : {" + " \"state\"               : {" + "  \"name\"               : \"state\","
1451             + "  \"trigger\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1452             + "  \"defaultTask\"        : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1453             + "  \"taskSelectionLogic\" : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons, "
1454             + "lots of lime\"}," + "  \"contexts\"           : [null]," + "  \"stateOutputs\"       : {"
1455             + "   \"so0\"               : {"
1456             + "    \"event\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1457             + "    \"nextState\"        : null" + "   }" + "  }," + "  \"tasks\"              : {"
1458             + "   \"tr0\"               : {"
1459             + "    \"task\"             : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1460             + "    \"outputType\"       : \"DIRECT\"," + "    \"outputName\"       : \"so0\"" + "   }" + "  }" + " }"
1461             + "}," + "\"uuid\"                 : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1462             + "\"description\"          : \"A description of hello\"" + "}";
1463         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1464             .content(entityString).contentType(APPLICATION_JSON));
1465         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1466
1467         entityString = "{" + "\"name\"                 : \"Hello17\"," + "\"version\"              : \"0.0.2\","
1468             + "\"template\"             : \"somewhere.over.the.rainbow\"," + "\"firstState\"           : \"state\","
1469             + "\"states\"               : {" + " \"state\"               : {" + "  \"name\"               : \"state\","
1470             + "  \"trigger\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1471             + "  \"defaultTask\"        : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1472             + "  \"taskSelectionLogic\" : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons, "
1473             + "lots of lime\"},"
1474             + "  \"contexts\"           : [{\"name\" : \"contextAlbum0\", \"version\" : \"0.0.1\"}],"
1475             + "  \"stateOutputs\"       : {" + "   \"so0\"               : {"
1476             + "    \"event\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1477             + "    \"nextState\"        : null" + "   }" + "  }," + "  \"tasks\"              : {"
1478             + "   \"tr0\"               : {"
1479             + "    \"task\"             : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1480             + "    \"outputType\"       : \"DIRECT\"," + "    \"outputName\"       : \"so0\"" + "   }" + "  },"
1481             + "  \"finalizers\"         : {"
1482             + "   \"sf0\"               : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons, "
1483             + "lots of lime\"}" + "  }" + " }" + "},"
1484             + "\"uuid\"                 : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1485             + "\"description\"          : \"A description of hello\"" + "}";
1486         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1487             .content(entityString).contentType(APPLICATION_JSON));
1488         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1489
1490         entityString = "{" + "\"name\"                 : \"Hello18\"," + "\"version\"              : \"0.0.2\","
1491             + "\"template\"             : \"somewhere.over.the.rainbow\"," + "\"firstState\"           : \"state\","
1492             + "\"states\"               : {" + " \"state\"               : {" + "  \"name\"               : \"state\","
1493             + "  \"trigger\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1494             + "  \"defaultTask\"        : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1495             + "  \"taskSelectionLogic\" : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons, "
1496             + "lots of lime\"},"
1497             + "  \"contexts\"           : [{\"name\" : \"contextAlbum0\", \"version\" : \"0.0.1\"}],"
1498             + "  \"stateOutputs\"       : {" + "   \"so0\"               : {"
1499             + "    \"event\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1500             + "    \"nextState\"        : null" + "   }" + "  }," + "  \"tasks\"              : {"
1501             + "   \"tr0\"               : {"
1502             + "    \"task\"             : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1503             + "    \"outputType\"       : \"DIRECT\"," + "    \"outputName\"       : \"so0\"" + "   }" + "  },"
1504             + "  \"finalizers\"         : {" + "   \"sf0\"               : null" + "  }" + " }" + "},"
1505             + "\"uuid\"                 : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1506             + "\"description\"          : \"A description of hello\"" + "}";
1507         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1508             .content(entityString).contentType(APPLICATION_JSON));
1509         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1510
1511         entityString = "{" + "\"name\"                 : \"Hello19\"," + "\"version\"              : \"0.0.2\","
1512             + "\"template\"             : \"somewhere.over.the.rainbow\"," + "\"firstState\"           : \"state\","
1513             + "\"states\"               : {" + " \"state\"               : {" + "  \"name\"               : \"state\","
1514             + "  \"trigger\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1515             + "  \"defaultTask\"        : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1516             + "  \"taskSelectionLogic\" : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : \"lots of lemons, "
1517             + "lots of lime\"},"
1518             + "  \"contexts\"           : [{\"name\" : \"contextAlbum0\", \"version\" : \"0.0.1\"}],"
1519             + "  \"stateOutputs\"       : {" + "   \"so0\"               : {"
1520             + "    \"event\"            : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1521             + "    \"nextState\"        : null" + "   }" + "  }," + "  \"tasks\"              : {"
1522             + "   \"tr0\"               : {"
1523             + "    \"task\"             : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1524             + "    \"outputType\"       : \"DIRECT\"," + "    \"outputName\"       : \"so0\"" + "   }" + "  },"
1525             + "  \"finalizers\"         : {"
1526             + "   \"sf0\"               : {\"logicFlavour\" : \"LemonAndLime\", \"logic\" : null}" + "  }" + " }" + "},"
1527             + "\"uuid\"                 : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1528             + "\"description\"          : \"A description of hello\"" + "}";
1529         result = apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1530             .content(entityString).contentType(APPLICATION_JSON));
1531         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1532
1533         entityString = "{" + "\"name\"             : \"HelloAnother\"," + "\"version\"          : \"0.0.2\","
1534             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1535             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1536             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1537             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1538             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1539             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1540             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1541             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1542             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1543             + "\"description\"      : \"A better description of hello\"" + "}";
1544         result = apexRequest(put(BASE_URL + "/Policy/Update", -12345)
1545             .content(entityString).contentType(APPLICATION_JSON));
1546         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1547         result = apexRequest(put(BASE_URL + "/Policy/Update", 1234545)
1548             .content(entityString).contentType(APPLICATION_JSON));
1549         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1550         result = apexRequest(put(BASE_URL + "/Policy/Update", sessionId)
1551             .content(entityString).contentType(APPLICATION_JSON));
1552         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1553
1554         result = apexRequest(put(BASE_URL + "/Policy/Update", sessionId)
1555             .queryParam("firstStatePeriodic", "true")
1556             .content(entityString).contentType(APPLICATION_JSON));
1557         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1558
1559         apexRequest(put(BASE_URL + "/Policy/Update", corruptSessionId)
1560             .content(entityString).contentType(APPLICATION_JSON));
1561
1562         entityString = "{" + "\"name\"             : null," + "\"version\"          : \"0.0.2\","
1563             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1564             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1565             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1566             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1567             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1568             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1569             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1570             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1571             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1572             + "\"description\"      : \"A better description of hello\"" + "}";
1573         result = apexRequest(put(BASE_URL + "/Policy/Update", sessionId)
1574             .content(entityString).contentType(APPLICATION_JSON));
1575         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1576
1577         entityString = "{" + "\"name\"             : \"IDontExist\"," + "\"version\"          : \"0.0.2\","
1578             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1579             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1580             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1581             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1582             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1583             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1584             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1585             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1586             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1587             + "\"description\"      : \"A better description of hello\"" + "}";
1588         result = apexRequest(put(BASE_URL + "/Policy/Update", sessionId)
1589             .content(entityString).contentType(APPLICATION_JSON));
1590         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
1591
1592         result = apexRequest(get(BASE_URL + "/Policy/Get", sessionId)
1593             .queryParam("name", "Hello")
1594             .queryParam("version", (String) null));
1595         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1596         result = apexRequest(get(BASE_URL + "/Policy/Get", sessionId)
1597             .queryParam("name", "IDontExist")
1598             .queryParam("version", (String) null));
1599         assertEquals(ApexApiResult.Result.CONCEPT_DOES_NOT_EXIST, result.getResult());
1600         result = apexRequest(get(BASE_URL + "/Policy/Get", sessionId)
1601             .queryParam("name", (String) null)
1602             .queryParam("version", (String) null));
1603         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1604         result = apexRequest(get(BASE_URL + "/Policy/Get", -123345)
1605             .queryParam("name", (String) null)
1606             .queryParam("version", (String) null));
1607         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1608         result = apexRequest(get(BASE_URL + "/Policy/Get", 123345)
1609             .queryParam("name", (String) null)
1610             .queryParam("version", (String) null));
1611         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1612
1613         apexRequest(get(BASE_URL + "/Policy/Get", corruptSessionId)
1614             .queryParam("name", "Hello")
1615             .queryParam("version", (String) null));
1616
1617         result = apexRequest(get(BASE_URL + "/Validate/Event", sessionId)
1618             .queryParam("name", (String) null)
1619             .queryParam("version", (String) null));
1620         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1621         result = apexRequest(get(BASE_URL + "/Validate/Event", -12345)
1622             .queryParam("name", (String) null)
1623             .queryParam("version", (String) null));
1624         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1625         result = apexRequest(get(BASE_URL + "/Validate/Event", 12345)
1626             .queryParam("name", (String) null)
1627             .queryParam("version", (String) null));
1628         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1629
1630         apexRequest(delete(BASE_URL + "/Policy/Delete", corruptSessionId)
1631             .queryParam("name", (String) null)
1632             .queryParam("version", (String) null));
1633
1634         result = apexRequest(delete(BASE_URL + "/Policy/Delete", -123345)
1635             .queryParam("name", (String) null)
1636             .queryParam("version", (String) null));
1637         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1638
1639     }
1640
1641     @Test
1642     void testPolicyExt_2() throws Exception {
1643         final int corruptSessionId = createCorruptSession();
1644
1645         ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
1646         final int sessionId = Integer.parseInt(result.getMessages().get(0));
1647
1648         apexRequest(get(BASE_URL + "/Model/Validate", corruptSessionId));
1649         apexRequest(get(BASE_URL + "/Model/Validate", sessionId)
1650             .queryParam("name", "%%%$£")
1651             .queryParam("version", (String) null));
1652
1653         final String modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
1654
1655         apexRequest(put(BASE_URL + "/Model/Load", sessionId)
1656             .content(modelString).contentType(APPLICATION_JSON));
1657
1658         String entityString = "{" + "\"name\"             : \"Hello\"," + "\"version\"          : \"0.0.2\","
1659             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1660             + "\"states\"           : {" + " \"state\"           : {" + "  \"name\"           : \"state\","
1661             + "  \"trigger\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1662             + "  \"defaultTask\"    : {\"name\" : \"task\", \"version\" : \"0.0.1\"}," + "  \"stateOutputs\"   : {"
1663             + "   \"so0\"           : {" + "    \"event\"        : {\"name\" : \"inEvent\", \"version\" : \"0.0.1\"},"
1664             + "    \"nextState\"    : null" + "   }" + "  }," + "  \"tasks\"          : {" + "   \"tr0\"           : {"
1665             + "    \"task\"         : {\"name\" : \"task\", \"version\" : \"0.0.1\"},"
1666             + "    \"outputType\"   : \"DIRECT\"," + "    \"outputName\"   : \"so0\"" + "   }" + "  }" + " }" + "},"
1667             + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1668             + "\"description\"      : \"A description of hello\"" + "}";
1669         apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1670             .content(entityString).contentType(APPLICATION_JSON));
1671         apexRequest(post(BASE_URL + "/Policy/Create", corruptSessionId)
1672             .content(entityString).contentType(APPLICATION_JSON));
1673
1674         entityString = "{" + "\"name\"             : \"GoodTaSeeYa\"," + "\"version\"          : \"0.0.2\","
1675             + "\"template\"         : \"somewhere.over.the.rainbow\"," + "\"firstState\"       : \"state\","
1676             + "\"states\"           : null," + "\"uuid\"             : \"1fa2e430-f2b2-11e6-bc64-92361f002671\","
1677             + "\"description\"      : \"A description of hello\"" + "}";
1678         apexRequest(post(BASE_URL + "/Policy/Create", sessionId)
1679             .content(entityString).contentType(APPLICATION_JSON));
1680
1681         result = apexRequest(delete(BASE_URL + "/Policy/Delete", 123345)
1682             .queryParam("name", (String) null)
1683             .queryParam("version", (String) null));
1684         assertEquals(ApexApiResult.Result.FAILED, result.getResult());
1685         result = apexRequest(delete(BASE_URL + "/Policy/Delete", sessionId)
1686             .queryParam("name", "Hello")
1687             .queryParam("version", "0.0.2"));
1688         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1689         result = apexRequest(delete(BASE_URL + "/Policy/Delete", sessionId)
1690             .queryParam("name", (String) null)
1691             .queryParam("version", (String) null));
1692         assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
1693     }
1694
1695     /*
1696      * Make a request using MockMvc and return the response body as a string.
1697      */
1698     private String requestString(MockHttpServletRequestBuilder requestBuilder) throws Exception {
1699         return mvc.perform(requestBuilder).andReturn().getResponse().getContentAsString();
1700     }
1701
1702     /*
1703      * Make a request using MockMvc and return the decoded JSON response as an ApexApiResult.
1704      */
1705     private ApexApiResult apexRequest(MockHttpServletRequestBuilder requestBuilder) throws Exception {
1706         String json = requestString(requestBuilder);
1707         return new StandardCoder().decode(json, ApexApiResult.class);
1708     }
1709
1710     /*
1711      * This method is used only for testing and is used to cause an exception on calls from unit test to test exception
1712      * handling.
1713      */
1714     private int createCorruptSession() throws Exception {
1715         final ApexApiResult result = apexRequest(get(BASE_URL + "/Session/Create", -1));
1716         final int corruptSessionId = Integer.parseInt(result.getMessages().get(0));
1717         sessionHandler.setCorruptSession(corruptSessionId);
1718         return corruptSessionId;
1719     }
1720 }