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