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