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