abadd298cac73373cce5312461ff508e95069eb0
[sdc/sdc-workflow-designer.git] /
1 /**
2  * Copyright (c) 2017-2018 ZTE Corporation.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the Apache License, Version 2.0
5  * and the Eclipse Public License v1.0 which both accompany this distribution,
6  * and are available at http://www.eclipse.org/legal/epl-v10.html
7  * and http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Contributors:
10  *     ZTE - initial API and implementation and/or initial documentation
11  */
12 package org.onap.sdc.workflowdesigner.parser;
13
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.fail;
16
17 import java.io.IOException;
18 import java.net.MalformedURLException;
19 import java.net.URI;
20 import java.nio.file.Paths;
21 import java.util.Iterator;
22 import java.util.List;
23
24 import org.junit.Test;
25 import org.onap.sdc.workflowdesigner.model.Element;
26 import org.onap.sdc.workflowdesigner.model.Position;
27 import org.onap.sdc.workflowdesigner.model.Process;
28 import org.onap.sdc.workflowdesigner.model.ScriptTask;
29 import org.onap.sdc.workflowdesigner.model.SequenceFlow;
30
31 import com.fasterxml.jackson.core.JsonParseException;
32 import com.fasterxml.jackson.databind.JsonMappingException;
33
34 public class Bpmn4ToscaJsonParserTest {
35
36     private static String RESOURCES_DIR = "src/test/resources/workflow";
37     protected static String PROCESS_NAME = "test1";
38
39     @Test
40     public void parseTest() throws JsonParseException, JsonMappingException, MalformedURLException, IOException {
41         Bpmn4ToscaJsonParser parser = new Bpmn4ToscaJsonParser();
42         URI srcUri = Paths.get(RESOURCES_DIR, "workflow.json").toUri();
43         Process actualProcess = parser.parse(PROCESS_NAME, srcUri);
44         Process expectedProcess = createReferenceProcess();
45
46         assertElements(expectedProcess.getElementList(), actualProcess.getElementList());
47         assertSequenceFlows(expectedProcess.getSequenceFlowList(), actualProcess.getSequenceFlowList());
48     }
49
50     private static void assertElements(List<Element> expectedElementList, List<Element> actualElementList) {
51         assertEquals(expectedElementList.size(), actualElementList.size());
52
53         for (Iterator<Element> iterator = expectedElementList.iterator(); iterator.hasNext();) {
54             Element expectedElement = (Element) iterator.next();
55             Element actualElement = getElementById(expectedElement.getId(), actualElementList);
56             if (actualElement != null) {
57                 assertElement(expectedElement, actualElement);
58             } else {
59                 fail("Element with id " + expectedElement.getId() + " could not be found");
60             }
61         }
62     }
63
64     private static Element getElementById(String id, List<Element> actualElementList) {
65         Iterator<Element> iter = actualElementList.iterator();
66         while (iter.hasNext()) {
67             Element element = (Element) iter.next();
68             if (element.getId().equals(id)) {
69                 return element;
70             }
71         }
72         return null;
73     }
74
75     public static void assertElement(Element expected, Element actual) {
76         assertEquals("element: id ", expected.getId(), actual.getId());
77         assertEquals("element: name ", expected.getName(), actual.getName());
78     }
79
80     public static void assertSequenceFlows(List<SequenceFlow> expectedSequenceList,
81             List<SequenceFlow> actualSequenceFlowList) {
82         assertEquals(expectedSequenceList.size(), actualSequenceFlowList.size());
83
84         for (Iterator<SequenceFlow> iterator = expectedSequenceList.iterator(); iterator.hasNext();) {
85             SequenceFlow expectedElement = (SequenceFlow) iterator.next();
86             SequenceFlow actualElement = getSequenceById(expectedElement.getSourceRef(), expectedElement.getTargetRef(),
87                     actualSequenceFlowList);
88             if (actualElement != null) {
89                 assertLink(expectedElement, actualElement);
90             } else {
91                 fail("Element with id " + expectedElement.getId() + " could not be found");
92             }
93         }
94     }
95
96     private static SequenceFlow getSequenceById(String sourceRef, String targetRef,
97             List<SequenceFlow> actualSequenceFlowList) {
98         Iterator<SequenceFlow> iter = actualSequenceFlowList.iterator();
99         while (iter.hasNext()) {
100             SequenceFlow element = (SequenceFlow) iter.next();
101             if (element.getSourceRef().equals(sourceRef) && element.getTargetRef().equals(targetRef)) {
102                 return element;
103             }
104         }
105         return null;
106     }
107
108     public static void assertLink(SequenceFlow expectedLink, SequenceFlow actualLink) {
109         assertEquals("Link source: id", expectedLink.getSourceRef(), actualLink.getSourceRef());
110         assertEquals("Link target :id", expectedLink.getTargetRef(), actualLink.getTargetRef());
111     }
112
113     private static Process createReferenceProcess() {
114         Process process = new Process(PROCESS_NAME);
115         
116         ScriptTask scriptTask = new ScriptTask();
117         scriptTask.setId("scriptTask");
118         scriptTask.setName("Script Task");
119         Position position = new Position();
120         position.setLeft(328);
121         position.setTop(134);
122         scriptTask.setPosition(position);
123         scriptTask.setScript("");
124         scriptTask.setScriptFormat("JavaScript");
125         process.getElementList().add(scriptTask);
126
127         return process;
128     }
129
130 }