2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 import deepFreeze from 'deep-freeze';
17 import mockRest from 'test-utils/MockRest.js';
18 import { cloneAndSet } from 'test-utils/Util.js';
19 import { storeCreator } from 'sdc-app/AppStore.js';
20 import Configuration from 'sdc-app/config/Configuration.js';
21 import SoftwareProductProcessesActionHelper from 'sdc-app/onboarding/softwareProduct/processes/SoftwareProductProcessesActionHelper.js';
23 VSPProcessPostFactory,
24 VSPProcessStoreFactory,
25 VSPProcessPostFactoryWithType,
26 VSPProcessStoreFactoryWithType,
27 VSPProcessStoreWithFormDataFactory,
28 VSPProcessPostWithFormDataFactory,
29 VSPProcessStoreWithArtifactNameFactory
30 } from 'test-utils/factories/softwareProduct/SoftwareProductProcessFactories.js';
31 import { buildFromExistingObject } from 'test-utils/Util.js';
32 import { VSPEditorFactory } from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
33 import VersionFactory from 'test-utils/factories/common/VersionFactory.js';
35 const softwareProductId = '123';
36 const version = VersionFactory.build();
38 describe('Software Product Processes Module Tests', function() {
41 beforeAll(function() {
42 restPrefix = Configuration.get('restPrefix');
43 deepFreeze(restPrefix);
49 it('Add Software Products Processes', () => {
50 const store = storeCreator();
51 deepFreeze(store.getState());
53 const softwareProductProcessFromResponse = 'ADDED_ID';
55 const softwareProductProcessAfterAdd = VSPProcessStoreFactory.build({
56 id: softwareProductProcessFromResponse
58 const softwareProductPostRequest = buildFromExistingObject(
59 VSPProcessPostFactory,
60 softwareProductProcessAfterAdd
63 const expectedStore = cloneAndSet(
65 'softwareProduct.softwareProductProcesses.processesList',
66 [softwareProductProcessAfterAdd]
69 mockRest.addHandler('post', ({ data, options, baseUrl }) => {
70 expect(baseUrl).toEqual(
71 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${
75 expect(data).toEqual(softwareProductPostRequest);
76 expect(options).toEqual(undefined);
79 value: softwareProductProcessFromResponse
83 return SoftwareProductProcessesActionHelper.saveProcess(
88 previousProcess: null,
89 process: softwareProductPostRequest
92 expect(store.getState()).toEqual(expectedStore);
96 it('Add Software Products Processes with type', () => {
97 const store = storeCreator();
98 deepFreeze(store.getState());
100 const softwareProductProcessFromResponse = 'ADDED_ID';
102 const softwareProductProcessAfterAdd = VSPProcessStoreFactoryWithType.build(
103 { id: softwareProductProcessFromResponse }
105 const softwareProductPostRequest = buildFromExistingObject(
106 VSPProcessPostFactoryWithType,
107 softwareProductProcessAfterAdd
110 const expectedStore = cloneAndSet(
112 'softwareProduct.softwareProductProcesses.processesList',
113 [softwareProductProcessAfterAdd]
116 mockRest.addHandler('post', ({ data, options, baseUrl }) => {
117 expect(baseUrl).toEqual(
118 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${
122 expect(data).toEqual(softwareProductPostRequest);
123 expect(options).toEqual(undefined);
126 value: softwareProductProcessFromResponse
130 return SoftwareProductProcessesActionHelper.saveProcess(
135 previousProcess: null,
136 process: softwareProductPostRequest
139 expect(store.getState()).toEqual(expectedStore);
143 it('Add Software Products Processes with uploaded file', () => {
144 const store = storeCreator();
145 deepFreeze(store.getState());
147 const softwareProductPostRequest = VSPProcessPostFactoryWithType.build();
148 const softwareProductProcessToAdd = VSPProcessPostWithFormDataFactory.build(
149 softwareProductPostRequest
151 const softwareProductProcessAfterAdd = VSPProcessStoreWithFormDataFactory.build();
153 const expectedStore = cloneAndSet(
155 'softwareProduct.softwareProductProcesses.processesList',
156 [softwareProductProcessAfterAdd]
159 mockRest.addHandler('post', ({ data, options, baseUrl }) => {
160 expect(baseUrl).toEqual(
161 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${
165 expect(data).toEqual(softwareProductPostRequest);
166 expect(options).toEqual(undefined);
169 value: softwareProductProcessAfterAdd.id
173 mockRest.addHandler('post', ({ data, options, baseUrl }) => {
174 expect(baseUrl).toEqual(
175 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${
177 }/processes/${softwareProductProcessAfterAdd.id}/upload`
179 expect(data).toEqual(softwareProductProcessToAdd.formData);
180 expect(options).toEqual(undefined);
181 return { returnCode: 'OK' };
184 return SoftwareProductProcessesActionHelper.saveProcess(
189 previousProcess: null,
190 process: softwareProductProcessToAdd
193 expect(store.getState()).toEqual(expectedStore);
200 it('Update Software Products Processes', () => {
201 const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList(
204 deepFreeze(softwareProductProcessesList);
206 const store = storeCreator({
208 softwareProductProcesses: {
209 processesList: softwareProductProcessesList
213 deepFreeze(store.getState());
215 const toBeUpdatedProcessId = softwareProductProcessesList[0].id;
216 const previousProcessData = softwareProductProcessesList[0];
217 const processUpdateData = VSPProcessStoreWithArtifactNameFactory.build({
218 ...previousProcessData,
220 description: 'string_UPDATED',
224 deepFreeze(processUpdateData);
226 const processPutRequest = VSPProcessPostFactory.build({
228 description: 'string_UPDATED',
231 deepFreeze(processPutRequest);
233 const expectedStore = cloneAndSet(
235 'softwareProduct.softwareProductProcesses.processesList',
239 mockRest.addHandler('put', ({ data, options, baseUrl }) => {
240 expect(baseUrl).toEqual(
241 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${
243 }/processes/${toBeUpdatedProcessId}`
245 expect(data).toEqual(processPutRequest);
246 expect(options).toEqual(undefined);
247 return { returnCode: 'OK' };
250 return SoftwareProductProcessesActionHelper.saveProcess(
255 previousProcess: previousProcessData,
256 process: processUpdateData
259 expect(store.getState()).toEqual(expectedStore);
263 it('Update Software Products Processes and uploaded file', () => {
264 const previousProcessData = VSPProcessStoreWithArtifactNameFactory.build();
265 deepFreeze(previousProcessData);
267 const store = storeCreator({
269 softwareProductProcesses: {
270 processesList: [previousProcessData]
274 deepFreeze(store.getState());
276 const newProcessToUpdate = VSPProcessStoreWithFormDataFactory.build({
277 ...previousProcessData,
280 name: 'new artifact name'
283 deepFreeze(newProcessToUpdate);
285 const newProcessToPutRequest = VSPProcessPostFactory.build({
286 name: newProcessToUpdate.name,
287 description: previousProcessData.description,
288 type: previousProcessData.type
290 deepFreeze(newProcessToPutRequest);
292 const expectedStore = cloneAndSet(
294 'softwareProduct.softwareProductProcesses.processesList',
298 mockRest.addHandler('put', ({ data, options, baseUrl }) => {
299 expect(baseUrl).toEqual(
300 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${
302 }/processes/${newProcessToUpdate.id}`
304 expect(data).toEqual(newProcessToPutRequest);
305 expect(options).toEqual(undefined);
306 return { returnCode: 'OK' };
309 mockRest.addHandler('post', ({ data, options, baseUrl }) => {
310 expect(baseUrl).toEqual(
311 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${
313 }/processes/${newProcessToUpdate.id}/upload`
315 expect(data).toEqual(newProcessToUpdate.formData);
316 expect(options).toEqual(undefined);
317 return { returnCode: 'OK' };
320 return SoftwareProductProcessesActionHelper.saveProcess(
325 previousProcess: previousProcessData,
326 process: newProcessToUpdate
329 expect(store.getState()).toEqual(expectedStore);
336 it('Get Software Products Processes List', () => {
337 const store = storeCreator();
338 deepFreeze(store.getState());
340 const softwareProductProcessesList = VSPProcessStoreFactory.buildList(
344 deepFreeze(softwareProductProcessesList);
346 deepFreeze(store.getState());
348 const expectedStore = cloneAndSet(
350 'softwareProduct.softwareProductProcesses.processesList',
351 softwareProductProcessesList
354 mockRest.addHandler('fetch', ({ options, data, baseUrl }) => {
355 expect(baseUrl).toEqual(
356 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${
360 expect(data).toEqual(undefined);
361 expect(options).toEqual(undefined);
362 return { results: softwareProductProcessesList };
365 return SoftwareProductProcessesActionHelper.fetchProcessesList(
367 { softwareProductId, version }
369 expect(store.getState()).toEqual(expectedStore);
376 it('Delete Software Products Processes', () => {
377 const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList(
380 const currentSoftwareProduct = VSPEditorFactory.build();
382 deepFreeze(softwareProductProcessesList);
383 const store = storeCreator({
385 softwareProductProcesses: {
386 processesList: softwareProductProcessesList
388 softwareProductEditor: {
389 data: currentSoftwareProduct
394 const processId = softwareProductProcessesList[0].id;
395 const versionId = version.id;
396 deepFreeze(store.getState());
398 const expectedStore = cloneAndSet(
400 'softwareProduct.softwareProductProcesses.processesList',
404 mockRest.addHandler('destroy', ({ data, options, baseUrl }) => {
405 expect(baseUrl).toEqual(
406 `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/processes/${processId}`
408 expect(data).toEqual(undefined);
409 expect(options).toEqual(undefined);
417 return SoftwareProductProcessesActionHelper.deleteProcess(
420 process: softwareProductProcessesList[0],
425 expect(store.getState()).toEqual(expectedStore);
429 it('Validating Software Products Processes Delete confirmation', () => {
430 const store = storeCreator();
431 deepFreeze(store.getState());
433 let process = VSPProcessStoreFactory.build();
436 const expectedStore = cloneAndSet(
438 'softwareProduct.softwareProductProcesses.processToDelete',
442 return SoftwareProductProcessesActionHelper.openDeleteProcessesConfirm(
447 expect(store.getState()).toEqual(expectedStore);
450 it('Validating Software Products Processes Cancel Delete', () => {
451 const store = storeCreator();
452 deepFreeze(store.getState());
454 const expectedStore = cloneAndSet(
456 'softwareProduct.softwareProductProcesses.processToDelete',
460 SoftwareProductProcessesActionHelper.hideDeleteConfirm(store.dispatch);
462 expect(store.getState()).toEqual(expectedStore);
469 it('Validating close Software Products Processes from editing mode', () => {
470 const store = storeCreator();
471 deepFreeze(store.getState());
473 const expectedStore = cloneAndSet(
475 'softwareProduct.softwareProductProcesses.processesEditor',
479 SoftwareProductProcessesActionHelper.closeEditor(store.dispatch);
480 expect(store.getState()).toEqual(expectedStore);
483 it('Validating open Software Products Processes for editing', () => {
484 const store = storeCreator();
485 deepFreeze(store.getState());
487 let process = { name: 'aa', description: 'xx' };
490 const expectedStore = cloneAndSet(
492 'softwareProduct.softwareProductProcesses.processesEditor.data',
496 SoftwareProductProcessesActionHelper.openEditor(store.dispatch, {
500 store.getState().softwareProduct.softwareProductProcesses
501 .processesEditor.data
503 expectedStore.softwareProduct.softwareProductProcesses
504 .processesEditor.data