1 package org.onap.sdc.workflow.services.impl;
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.ArgumentMatchers.argThat;
5 import static org.mockito.ArgumentMatchers.eq;
6 import static org.mockito.ArgumentMatchers.any;
7 import static org.mockito.Mockito.doReturn;
8 import static org.mockito.Mockito.doThrow;
9 import static org.mockito.Mockito.times;
10 import static org.mockito.Mockito.verify;
11 import static org.onap.sdc.workflow.persistence.types.WorkflowVersionState.CERTIFIED;
12 import static org.onap.sdc.workflow.persistence.types.WorkflowVersionState.DRAFT;
14 import java.io.IOException;
15 import java.io.InputStream;
16 import java.util.ArrayList;
17 import java.util.Arrays;
18 import java.util.Collections;
19 import java.util.List;
20 import java.util.Optional;
21 import org.apache.commons.io.IOUtils;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.mockito.ArgumentCaptor;
25 import org.mockito.ArgumentMatcher;
26 import org.mockito.InjectMocks;
27 import org.mockito.Mock;
28 import org.mockito.Spy;
29 import org.mockito.junit.MockitoJUnitRunner;
30 import org.onap.sdc.workflow.api.types.VersionRequestDto;
31 import org.onap.sdc.workflow.persistence.ArtifactRepository;
32 import org.onap.sdc.workflow.persistence.ParameterRepository;
33 import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
34 import org.onap.sdc.workflow.persistence.types.ParameterRole;
35 import org.onap.sdc.workflow.persistence.types.WorkflowVersion;
36 import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
37 import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException;
38 import org.onap.sdc.workflow.services.exceptions.VersionCreationException;
39 import org.onap.sdc.workflow.services.exceptions.VersionStateModificationException;
40 import org.onap.sdc.workflow.services.impl.mappers.VersionMapper;
41 import org.onap.sdc.workflow.services.impl.mappers.VersionStateMapper;
42 import org.openecomp.sdc.versioning.VersioningManager;
43 import org.openecomp.sdc.versioning.dao.types.Version;
44 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
45 import org.openecomp.sdc.versioning.types.VersionCreationMethod;
46 import org.springframework.mock.web.MockMultipartFile;
48 @RunWith(MockitoJUnitRunner.class)
49 public class WorkflowVersionManagerImplTest {
51 private static final String ITEM1_ID = "item_id_1";
52 private static final String VERSION1_ID = "version_id_1";
53 private static final String VERSION2_ID = "version_id_2";
56 private VersioningManager versioningManagerMock;
58 private ParameterRepository parameterRepositoryMock;
60 private ArtifactRepository artifactRepositoryMock;
62 private VersionMapper versionMapperMock;
64 private VersionStateMapper versionStateMapperMock;
67 private WorkflowVersionManagerImpl workflowVersionManager;
69 @Test(expected = EntityNotFoundException.class)
70 public void shouldThrowExceptionWhenVersionDontExist() {
71 Version nonExistingVersion = new Version(VERSION1_ID);
72 doThrow(new RuntimeException()).when(versioningManagerMock).get(ITEM1_ID, nonExistingVersion);
73 workflowVersionManager.get(ITEM1_ID, VERSION1_ID);
77 public void shouldReturnWorkflowVersionWhenExist() {
78 Version version = new Version(VERSION1_ID);
79 WorkflowVersion workflowVersion = new WorkflowVersion(VERSION1_ID);
80 doReturn(workflowVersion).when(versionMapperMock).versionToWorkflowVersion(any(Version.class));
81 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID),any(Version.class));
82 doReturn(new ArrayList()).when(parameterRepositoryMock).list(eq(ITEM1_ID), eq(VERSION1_ID), any(ParameterRole.class));
83 workflowVersionManager.get(ITEM1_ID,VERSION1_ID);
84 verify(versioningManagerMock).get(ITEM1_ID,version);
88 public void shouldReturnWorkflowVersionList() {
89 List<Version> versionList = Arrays.asList(new Version(VERSION1_ID), new Version(VERSION2_ID));
90 doReturn(versionList).when(versioningManagerMock).list(ITEM1_ID);
91 doReturn(new WorkflowVersion()).when(versionMapperMock).versionToWorkflowVersion(any(Version.class));
92 workflowVersionManager.list(ITEM1_ID);
93 verify(versioningManagerMock).list(ITEM1_ID);
94 verify(versionMapperMock, times(2)).versionToWorkflowVersion(any(Version.class));
98 public void shouldUpdateWorkflowVersion() {
99 String updatedDescription = "WorkflowVersion description updated";
100 Version retrievedVersion = new Version(VERSION1_ID);
101 retrievedVersion.setName("1.0");
102 retrievedVersion.setDescription("WorkflowVersion description");
103 retrievedVersion.setStatus(VersionStatus.Draft);
104 doReturn(retrievedVersion).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
105 doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(retrievedVersion.getStatus());
107 WorkflowVersion inputVersion = new WorkflowVersion(VERSION1_ID);
108 inputVersion.setName("1.0");
109 inputVersion.setDescription(updatedDescription);
110 inputVersion.setInputs(new ArrayList<>());
111 inputVersion.setOutputs(new ArrayList<>());
113 Version mappedInputVersion = new Version(VERSION1_ID);
114 mappedInputVersion.setName("1.0");
115 mappedInputVersion.setDescription(updatedDescription);
116 doReturn(mappedInputVersion).when(versionMapperMock).workflowVersionToVersion(inputVersion);
118 ArgumentCaptor<Version> versionArgCaptor = ArgumentCaptor.forClass(Version.class);
119 workflowVersionManager.update(ITEM1_ID, inputVersion);
121 verify(versioningManagerMock).updateVersion(eq(ITEM1_ID), versionArgCaptor.capture());
122 Version captorVersion = versionArgCaptor.getValue();
123 assertEquals("1.0", captorVersion.getName());
124 assertEquals(updatedDescription, captorVersion.getDescription());
125 assertEquals(VersionStatus.Draft, captorVersion.getStatus());
126 verify(versioningManagerMock).publish(ITEM1_ID, mappedInputVersion, "Update version");
131 public void shouldCreateWorkflowVersion(){
132 Version version = new Version(VERSION1_ID);
133 version.setDescription("version desc");
134 doReturn(version).when(versioningManagerMock).create(ITEM1_ID,version, VersionCreationMethod.major);
135 VersionRequestDto versionRequest = new VersionRequestDto();
136 versionRequest.setDescription("version desc");
137 WorkflowVersion workflowVersion = new WorkflowVersion(VERSION1_ID);
138 doReturn(workflowVersion).when(workflowVersionManager).get(ITEM1_ID,VERSION1_ID);
139 workflowVersionManager.create(ITEM1_ID,versionRequest);
140 verify(versioningManagerMock).create(ITEM1_ID,version, VersionCreationMethod.major);
144 @Test(expected = VersionCreationException.class)
145 public void shouldTrowExceptionWhenDraftVersionExists() {
146 VersionRequestDto versionRequestDto = new VersionRequestDto();
147 versionRequestDto.setBaseVersionId(VERSION2_ID);
149 Version baseVersion = new Version(VERSION2_ID);
150 baseVersion.setStatus(VersionStatus.Draft);
151 List<Version> versions = Collections.singletonList(baseVersion);
152 doReturn(versions).when(versioningManagerMock).list(ITEM1_ID);
154 workflowVersionManager.create(ITEM1_ID, versionRequestDto);
157 @Test(expected = EntityNotFoundException.class)
158 public void getStateOfNonExisting() {
159 doThrow(new RuntimeException()).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
160 workflowVersionManager.getState(ITEM1_ID, VERSION1_ID);
164 public void getState() {
165 Version version = new Version(VERSION1_ID);
166 version.setStatus(VersionStatus.Certified);
167 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
168 doReturn(CERTIFIED).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
170 WorkflowVersionState state = workflowVersionManager.getState(ITEM1_ID, VERSION1_ID);
171 assertEquals(CERTIFIED, state);
174 @Test(expected = EntityNotFoundException.class)
175 public void updateStateOfNonExisting() {
176 doThrow(new RuntimeException()).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
177 workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, CERTIFIED);
180 @Test(expected = VersionStateModificationException.class)
181 public void updateStateToCurrentState() {
182 Version version = new Version(VERSION1_ID);
183 version.setStatus(VersionStatus.Draft);
184 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
185 doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
187 workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, DRAFT);
190 @Test(expected = VersionStateModificationException.class)
191 public void updateStateWhenCertified() {
192 Version version = new Version(VERSION1_ID);
193 version.setStatus(VersionStatus.Certified);
194 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
195 doReturn(CERTIFIED).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
197 workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, CERTIFIED);
201 public void updateState() {
202 Version retrievedVersion = new Version(VERSION1_ID);
203 retrievedVersion.setStatus(VersionStatus.Draft);
204 doReturn(retrievedVersion).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
205 doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(VersionStatus.Draft);
206 doReturn(VersionStatus.Certified).when(versionStateMapperMock).workflowVersionStateToVersionStatus(CERTIFIED);
208 ArgumentCaptor<Version> versionArgCaptor = ArgumentCaptor.forClass(Version.class);
209 workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, CERTIFIED);
211 verify(versioningManagerMock).updateVersion(eq(ITEM1_ID), versionArgCaptor.capture());
212 assertEquals(VersionStatus.Certified, versionArgCaptor.getValue().getStatus());
213 verify(versioningManagerMock)
214 .publish(eq(ITEM1_ID), eqVersion(VERSION1_ID), eq("Update version state from DRAFT to CERTIFIED"));
218 public void shouldUploadArtifact() {
219 Version version = new Version(VERSION1_ID);
220 version.setStatus(VersionStatus.Draft);
221 doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
222 doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
224 MockMultipartFile mockFile = new MockMultipartFile("data", "filename.txt", "text/plain", "some xml".getBytes());
225 workflowVersionManager.uploadArtifact(ITEM1_ID, VERSION1_ID, mockFile);
227 verify(artifactRepositoryMock).update(eq(ITEM1_ID), eq(VERSION1_ID), any(ArtifactEntity.class));
230 @Test(expected = EntityNotFoundException.class)
231 public void shouldThrowExceptionWhenArtifactNotFound() {
232 doReturn(new Version(VERSION1_ID)).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
234 doReturn(Optional.empty()).when(artifactRepositoryMock).get(ITEM1_ID, VERSION1_ID);
235 workflowVersionManager.getArtifact(ITEM1_ID, VERSION1_ID);
239 public void shouldReturnArtifact() throws IOException {
240 doReturn(new Version(VERSION1_ID)).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
242 InputStream inputStreamMock = IOUtils.toInputStream("some test data for my input stream", "UTF-8");
243 ArtifactEntity artifactMock = new ArtifactEntity("fileName.txt", inputStreamMock);
244 doReturn(Optional.of(artifactMock)).when(artifactRepositoryMock).get(ITEM1_ID, VERSION1_ID);
245 ArtifactEntity returnedArtifact = workflowVersionManager.getArtifact(ITEM1_ID, VERSION1_ID);
246 assertEquals(artifactMock, returnedArtifact);
249 private static Version eqVersion(String versionId) {
250 return argThat(new EqVersion(versionId));
253 private static class EqVersion implements ArgumentMatcher<Version> {
255 private final String versionId;
257 EqVersion(String versionId) {
258 this.versionId = versionId;
262 public boolean matches(Version version) {
263 return versionId.equals(version.getId());