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