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