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