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