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