1 package org.onap.sdc.workflow.services.impl;
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.ArgumentMatchers.any;
5 import static org.mockito.ArgumentMatchers.anyString;
6 import static org.mockito.ArgumentMatchers.argThat;
7 import static org.mockito.ArgumentMatchers.eq;
8 import static org.mockito.Mockito.doReturn;
9 import static org.mockito.Mockito.doThrow;
10 import static org.mockito.Mockito.verify;
11 import static org.onap.sdc.workflow.services.types.WorkflowVersionState.CERTIFIED;
12 import static org.onap.sdc.workflow.services.types.WorkflowVersionState.DRAFT;
14 import java.io.IOException;
15 import java.io.InputStream;
16 import java.util.ArrayList;
17 import java.util.Collections;
18 import java.util.List;
19 import java.util.Optional;
20 import org.apache.commons.io.IOUtils;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.ArgumentCaptor;
24 import org.mockito.ArgumentMatcher;
25 import org.mockito.InjectMocks;
26 import org.mockito.Mock;
27 import org.mockito.Spy;
28 import org.mockito.junit.MockitoJUnitRunner;
29 import org.onap.sdc.workflow.persistence.ArtifactRepository;
30 import org.onap.sdc.workflow.persistence.ParameterRepository;
31 import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
32 import org.onap.sdc.workflow.persistence.types.ParameterRole;
33 import org.onap.sdc.workflow.services.types.WorkflowVersion;
34 import org.onap.sdc.workflow.services.types.WorkflowVersionState;
35 import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException;
36 import org.onap.sdc.workflow.services.exceptions.VersionCreationException;
37 import org.onap.sdc.workflow.services.exceptions.VersionStateModificationException;
38 import org.onap.sdc.workflow.services.impl.mappers.VersionMapper;
39 import org.onap.sdc.workflow.services.impl.mappers.VersionStateMapper;
40 import org.openecomp.sdc.versioning.VersioningManager;
41 import org.openecomp.sdc.versioning.dao.types.Version;
42 import org.openecomp.sdc.versioning.dao.types.VersionState;
43 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
44 import org.openecomp.sdc.versioning.types.VersionCreationMethod;
45 import org.springframework.mock.web.MockMultipartFile;
47 @RunWith(MockitoJUnitRunner.class)
48 public class WorkflowVersionManagerImplTest {
50 private static final String ITEM1_ID = "item_id_1";
51 private static final String VERSION1_ID = "version_id_1";
52 private static final String VERSION2_ID = "version_id_2";
55 private VersioningManager versioningManagerMock;
57 private ParameterRepository parameterRepositoryMock;
59 private ArtifactRepository artifactRepositoryMock;
61 private VersionMapper versionMapperMock;
63 private VersionStateMapper versionStateMapperMock;
66 private WorkflowVersionManagerImpl workflowVersionManager;
68 @Test(expected = EntityNotFoundException.class)
69 public void shouldThrowExceptionWhenVersionDontExist() {
70 Version nonExistingVersion = new Version(VERSION1_ID);
71 doThrow(new RuntimeException()).when(versioningManagerMock).get(ITEM1_ID, nonExistingVersion);
72 workflowVersionManager.get(ITEM1_ID, VERSION1_ID);
76 public void shouldReturnWorkflowVersionWhenExist() {
77 Version version = new Version(VERSION1_ID);
78 WorkflowVersion workflowVersion = new WorkflowVersion(VERSION1_ID);
79 doReturn(workflowVersion).when(versionMapperMock).versionToWorkflowVersion(any(Version.class));
80 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID),any(Version.class));
81 doReturn(new ArrayList()).when(parameterRepositoryMock).list(eq(ITEM1_ID), eq(VERSION1_ID), any(ParameterRole.class));
82 workflowVersionManager.get(ITEM1_ID,VERSION1_ID);
83 verify(versioningManagerMock).get(ITEM1_ID,version);
87 public void shouldReturnWorkflowVersionList() {
88 List<Version> versionList = Arrays.asList(new Version(VERSION1_ID), new Version(VERSION2_ID));
89 doReturn(versionList).when(versioningManagerMock).list(ITEM1_ID);
90 doReturn(new WorkflowVersion()).when(versionMapperMock).versionToWorkflowVersion(any(Version.class));
91 workflowVersionManager.list(ITEM1_ID, null);
92 verify(versioningManagerMock).list(ITEM1_ID);
93 verify(versionMapperMock, times(2)).versionToWorkflowVersion(any(Version.class));
97 public void shouldUpdateWorkflowVersion() {
98 String updatedDescription = "WorkflowVersion description updated";
99 Version retrievedVersion = new Version(VERSION1_ID);
100 retrievedVersion.setName("1.0");
101 retrievedVersion.setDescription("WorkflowVersion description");
102 retrievedVersion.setStatus(VersionStatus.Draft);
103 VersionState versionState = new VersionState();
104 versionState.setDirty(true);
105 retrievedVersion.setState(versionState);
106 doReturn(retrievedVersion).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
107 doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(retrievedVersion.getStatus());
109 WorkflowVersion inputVersion = new WorkflowVersion(VERSION1_ID);
110 inputVersion.setName("1.0");
111 inputVersion.setDescription(updatedDescription);
112 inputVersion.setInputs(new ArrayList<>());
113 inputVersion.setOutputs(new ArrayList<>());
115 Version mappedInputVersion = new Version(VERSION1_ID);
116 mappedInputVersion.setName("1.0");
117 mappedInputVersion.setDescription(updatedDescription);
118 doReturn(mappedInputVersion).when(versionMapperMock).workflowVersionToVersion(inputVersion);
120 ArgumentCaptor<Version> versionArgCaptor = ArgumentCaptor.forClass(Version.class);
121 workflowVersionManager.update(ITEM1_ID, inputVersion);
123 verify(versioningManagerMock).updateVersion(eq(ITEM1_ID), versionArgCaptor.capture());
124 Version captorVersion = versionArgCaptor.getValue();
125 assertEquals("1.0", captorVersion.getName());
126 assertEquals(updatedDescription, captorVersion.getDescription());
127 assertEquals(VersionStatus.Draft, captorVersion.getStatus());
128 verify(versioningManagerMock).publish(ITEM1_ID, mappedInputVersion, "Update version");
133 public void shouldCreateWorkflowVersion(){
134 Version version = new Version(VERSION1_ID);
135 version.setDescription("version desc");
136 doReturn(version).when(versioningManagerMock).create(ITEM1_ID,version, VersionCreationMethod.major);
137 WorkflowVersion versionRequest = new WorkflowVersion();
138 versionRequest.setDescription("version desc");
139 versionRequest.setInputs(new ArrayList<>());
140 versionRequest.setOutputs(new ArrayList<>());
141 WorkflowVersion workflowVersion = new WorkflowVersion(VERSION1_ID);
142 doReturn(workflowVersion).when(workflowVersionManager).get(ITEM1_ID,VERSION1_ID);
143 workflowVersionManager.create(ITEM1_ID, null, versionRequest);
144 verify(versioningManagerMock).create(ITEM1_ID,version, VersionCreationMethod.major);
147 @Test(expected = VersionCreationException.class)
148 public void shouldTrowExceptionWhenDraftVersionExists() {
149 WorkflowVersion versionRequestDto = new WorkflowVersion();
151 Version baseVersion = new Version(VERSION2_ID);
152 baseVersion.setStatus(VersionStatus.Draft);
153 List<Version> versions = Collections.singletonList(baseVersion);
154 doReturn(versions).when(versioningManagerMock).list(ITEM1_ID);
156 workflowVersionManager.create(ITEM1_ID, VERSION2_ID, versionRequestDto);
159 @Test(expected = EntityNotFoundException.class)
160 public void getStateOfNonExisting() {
161 doThrow(new RuntimeException()).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
162 workflowVersionManager.getState(ITEM1_ID, VERSION1_ID);
166 public void getState() {
167 Version version = new Version(VERSION1_ID);
168 version.setStatus(VersionStatus.Certified);
169 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
170 doReturn(CERTIFIED).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
172 WorkflowVersionState state = workflowVersionManager.getState(ITEM1_ID, VERSION1_ID);
173 assertEquals(CERTIFIED, state);
176 @Test(expected = EntityNotFoundException.class)
177 public void updateStateOfNonExisting() {
178 doThrow(new RuntimeException()).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
179 workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, CERTIFIED);
182 @Test(expected = VersionStateModificationException.class)
183 public void updateStateToCurrentState() {
184 Version version = new Version(VERSION1_ID);
185 version.setStatus(VersionStatus.Draft);
186 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
187 doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
189 workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, DRAFT);
192 @Test(expected = VersionStateModificationException.class)
193 public void updateStateWhenCertified() {
194 Version version = new Version(VERSION1_ID);
195 version.setStatus(VersionStatus.Certified);
196 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
197 doReturn(CERTIFIED).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
198 doThrow(new RuntimeException()).when(versioningManagerMock)
199 .submit(eq(ITEM1_ID), eqVersion(VERSION1_ID), anyString());
201 workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, CERTIFIED);
205 public void updateState() {
206 Version retrievedVersion = new Version(VERSION1_ID);
207 retrievedVersion.setStatus(VersionStatus.Draft);
208 doReturn(retrievedVersion).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
209 doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(VersionStatus.Draft);
211 workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, CERTIFIED);
213 verify(versioningManagerMock).submit(eq(ITEM1_ID), eqVersion(VERSION1_ID), anyString());
217 public void shouldUploadArtifact() {
218 Version version = new Version(VERSION1_ID);
219 version.setStatus(VersionStatus.Draft);
220 VersionState versionState = new VersionState();
221 versionState.setDirty(false);
222 version.setState(versionState);
223 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
224 doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
226 MockMultipartFile mockFile = new MockMultipartFile("data", "filename.txt", "text/plain", "some xml".getBytes());
227 workflowVersionManager.uploadArtifact(ITEM1_ID, VERSION1_ID, mockFile);
229 verify(artifactRepositoryMock).update(eq(ITEM1_ID), eq(VERSION1_ID), any(ArtifactEntity.class));
232 @Test(expected = EntityNotFoundException.class)
233 public void shouldThrowExceptionWhenArtifactNotFound() {
234 doReturn(new Version(VERSION1_ID)).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
236 doReturn(Optional.empty()).when(artifactRepositoryMock).get(ITEM1_ID, VERSION1_ID);
237 workflowVersionManager.getArtifact(ITEM1_ID, VERSION1_ID);
241 public void shouldReturnArtifact() throws IOException {
242 doReturn(new Version(VERSION1_ID)).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
244 InputStream inputStreamMock = IOUtils.toInputStream("some test data for my input stream", "UTF-8");
245 ArtifactEntity artifactMock = new ArtifactEntity("fileName.txt", inputStreamMock);
246 doReturn(Optional.of(artifactMock)).when(artifactRepositoryMock).get(ITEM1_ID, VERSION1_ID);
247 ArtifactEntity returnedArtifact = workflowVersionManager.getArtifact(ITEM1_ID, VERSION1_ID);
248 assertEquals(artifactMock, returnedArtifact);
251 private static Version eqVersion(String versionId) {
252 return argThat(new EqVersion(versionId));
255 private static class EqVersion implements ArgumentMatcher<Version> {
257 private final String versionId;
259 EqVersion(String versionId) {
260 this.versionId = versionId;
264 public boolean matches(Version version) {
265 return versionId.equals(version.getId());