07a426582c3fe0db8689b622dde7589c3dba5b53
[sdc/sdc-workflow-designer.git] / workflow-designer-be / src / test / java / org / onap / sdc / workflow / persistence / impl / ParameterRepositoryTest.java
1 package org.onap.sdc.workflow.persistence.impl;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
5 import static org.mockito.ArgumentMatchers.isNull;
6 import static org.mockito.Matchers.any;
7 import static org.mockito.Matchers.eq;
8 import static org.mockito.Mockito.doReturn;
9 import static org.mockito.Mockito.verify;
10
11 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
12 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
13 import com.amdocs.zusammen.datatypes.Id;
14 import com.amdocs.zusammen.datatypes.SessionContext;
15 import com.amdocs.zusammen.datatypes.item.ElementContext;
16 import com.amdocs.zusammen.datatypes.item.Info;
17 import java.util.ArrayList;
18 import java.util.Collection;
19 import java.util.Optional;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mapstruct.ap.internal.util.Collections;
24 import org.mockito.InjectMocks;
25 import org.mockito.Mock;
26 import org.mockito.Spy;
27 import org.mockito.junit.MockitoJUnitRunner;
28 import org.onap.sdc.workflow.persistence.types.ParameterEntity;
29 import org.onap.sdc.workflow.persistence.types.ParameterPropertyName;
30 import org.onap.sdc.workflow.persistence.types.ParameterRole;
31 import org.onap.sdc.workflow.persistence.types.ParameterType;
32 import org.onap.sdc.workflow.persistence.types.WorkflowElementType;
33 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
34 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
35
36 @RunWith(MockitoJUnitRunner.class)
37 public class ParameterRepositoryTest {
38
39     private static final String ITEM1_ID = "item_id_1";
40     private static final String VERSION1_ID = "version_id_1";
41     private static final String PARAMETER1_ID = "parameter_id_1";
42     private static final String PARAMETER2_ID = "parameter_id_2";
43     private static final String PARAMETERS_PARENT_ID = "parameters_id";
44
45
46     @Mock
47     private ZusammenAdaptor zusammenAdaptorMock;
48     @Spy
49     @InjectMocks
50     private ParameterRepositoryImpl parameterRepository;
51
52     @Before
53     public void setUp() {
54         SessionContextProviderFactory.getInstance().createInterface().create("test_user", "workflow");
55     }
56
57     @Test
58     public void shouldGetParameterById() {
59
60         ElementInfo element = new ElementInfo();
61         element.setId(new Id(PARAMETER1_ID));
62         Info info = new Info();
63         info.setName("testInput");
64         info.addProperty(ParameterPropertyName.TYPE.name(), ParameterType.FLOAT.name());
65         info.addProperty(ParameterPropertyName.mandatory.name(), true);
66         element.setInfo(info);
67         doReturn(Optional.of(element)).when(zusammenAdaptorMock)
68                                       .getElementInfo(any(SessionContext.class), any(ElementContext.class),
69                                               eq(new Id(PARAMETER1_ID)));
70         ParameterEntity result = parameterRepository.get(ITEM1_ID, VERSION1_ID, PARAMETER1_ID);
71         verify(zusammenAdaptorMock)
72                 .getElementInfo(any(SessionContext.class), any(ElementContext.class), eq(new Id(PARAMETER1_ID)));
73         assertEquals("testInput", result.getName());
74
75     }
76
77
78     @Test
79     public void shouldUpdateParameter() {
80         ParameterEntity parameterEntityToUpdate = new ParameterEntity();
81         parameterEntityToUpdate.setId(PARAMETER1_ID);
82         parameterEntityToUpdate.setName("Input1");
83         parameterEntityToUpdate.setMandatory(true);
84         parameterEntityToUpdate.setType(ParameterType.STRING);
85
86         parameterRepository.update(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT, parameterEntityToUpdate);
87         verify(zusammenAdaptorMock)
88                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
89                         eq("Update WorkflowVersion Parameter"));
90
91     }
92
93     @Test
94     public void shouldCreateParameterStructure() {
95         parameterRepository.createStructure(ITEM1_ID, VERSION1_ID);
96         verify(zusammenAdaptorMock)
97                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
98                         eq("Create WorkflowVersion INPUTS Element"));
99         verify(zusammenAdaptorMock)
100                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
101                         eq("Create WorkflowVersion OUTPUTS Element"));
102     }
103
104     @Test
105     public void shouldDeleteParameter() {
106         parameterRepository.delete(ITEM1_ID, VERSION1_ID, PARAMETER1_ID);
107         verify(zusammenAdaptorMock)
108                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
109                         eq("Delete Parameter with id parameter_id_1"));
110     }
111
112
113     @Test
114     public void shouldListParametersByType() {
115
116         ElementInfo parameter1 = new ElementInfo();
117         parameter1.setId(new Id(PARAMETER1_ID));
118         Info info1 = new Info();
119         info1.setName("input1");
120         info1.addProperty(ParameterPropertyName.TYPE.name(), "INTEGER");
121         info1.addProperty(ParameterPropertyName.mandatory.name(), true);
122         parameter1.setInfo(info1);
123         ElementInfo parameter2 = new ElementInfo();
124         parameter2.setId(new Id(PARAMETER2_ID));
125         Info info2 = new Info();
126         info2.setName("input2");
127         info2.addProperty(ParameterPropertyName.TYPE.name(), "STRING");
128         info2.addProperty(ParameterPropertyName.mandatory.name(), false);
129         parameter2.setInfo(info2);
130         Collection<ElementInfo> parameters = Collections.asSet(parameter1, parameter2);
131         doReturn(parameters).when(zusammenAdaptorMock)
132                             .listElementsByName(any(SessionContext.class), any(ElementContext.class), isNull(),
133                                     eq(WorkflowElementType.INPUTS.name()));
134         Collection<ParameterEntity> results = parameterRepository.list(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT);
135
136         verify(zusammenAdaptorMock).listElementsByName(any(SessionContext.class), any(ElementContext.class), isNull(),
137                 eq(WorkflowElementType.INPUTS.name()));
138         assertTrue(results.stream().anyMatch(parameterEntity -> parameterEntity.getId().equals(PARAMETER1_ID)));
139         assertTrue(results.stream().anyMatch(parameterEntity -> parameterEntity.getId().equals(PARAMETER2_ID)));
140     }
141
142     @Test
143     public void shouldDeleteAllParametersByType() {
144         ElementInfo parameterParentElement = new ElementInfo();
145         parameterParentElement.setId(new Id(PARAMETERS_PARENT_ID));
146         ElementInfo parameter1 = new ElementInfo();
147         parameter1.setId(new Id(PARAMETER1_ID));
148         ElementInfo parameter2 = new ElementInfo();
149         parameter2.setId(new Id(PARAMETER2_ID));
150         parameterParentElement.setSubElements(new ArrayList<>());
151         parameterParentElement.getSubElements().add(parameter1);
152         parameterParentElement.getSubElements().add(parameter2);
153
154         Optional<ElementInfo> elementOptional = Optional.of(parameterParentElement);
155
156         doReturn(elementOptional).when(zusammenAdaptorMock)
157                                  .getElementInfoByName(any(SessionContext.class), any(ElementContext.class), isNull(),
158                                          eq(WorkflowElementType.INPUTS.name()));
159
160         parameterRepository.deleteAll(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT);
161         verify(zusammenAdaptorMock)
162                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
163                         eq("Delete all INPUT"));
164     }
165
166 }