2 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
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
13 * or implied. See the License for the specific language governing
14 * permissions and 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 } from 'test-utils/factories/softwareProduct/SoftwareProductProcessFactories.js';
30 import {buildFromExistingObject} from 'test-utils/Util.js';
31 import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
32 import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
34 const softwareProductId = '123';
35 const version = VSPEditorFactory.build().version;
37 describe('Software Product Processes Module Tests', function () {
41 beforeAll(function() {
42 restPrefix = Configuration.get('restPrefix');
43 deepFreeze(restPrefix);
49 it('Add Software Products Processes', () => {
51 const store = storeCreator();
52 deepFreeze(store.getState());
54 const softwareProductProcessFromResponse = 'ADDED_ID';
56 const softwareProductProcessAfterAdd = VSPProcessStoreFactory.build({id: softwareProductProcessFromResponse});
57 const softwareProductPostRequest = buildFromExistingObject(VSPProcessPostFactory, softwareProductProcessAfterAdd);
59 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [softwareProductProcessAfterAdd]);
61 mockRest.addHandler('post', ({data, options, baseUrl}) => {
63 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes`);
64 expect(data).toEqual(softwareProductPostRequest);
65 expect(options).toEqual(undefined);
68 value: softwareProductProcessFromResponse
72 return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
76 previousProcess: null,
77 process: softwareProductPostRequest
80 expect(store.getState()).toEqual(expectedStore);
84 it('Add Software Products Processes with type', () => {
86 const store = storeCreator();
87 deepFreeze(store.getState());
89 const softwareProductProcessFromResponse = 'ADDED_ID';
91 const softwareProductProcessAfterAdd = VSPProcessStoreFactoryWithType.build({id: softwareProductProcessFromResponse});
92 const softwareProductPostRequest = buildFromExistingObject(VSPProcessPostFactoryWithType, softwareProductProcessAfterAdd);
94 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [softwareProductProcessAfterAdd]);
96 mockRest.addHandler('post', ({data, options, baseUrl}) => {
98 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes`);
99 expect(data).toEqual(softwareProductPostRequest);
100 expect(options).toEqual(undefined);
103 value: softwareProductProcessFromResponse
107 return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
111 previousProcess: null,
112 process: softwareProductPostRequest
115 expect(store.getState()).toEqual(expectedStore);
119 it('Add Software Products Processes with uploaded file', () => {
121 const store = storeCreator();
122 deepFreeze(store.getState());
124 const softwareProductPostRequest = VSPProcessPostFactoryWithType.build();
125 const softwareProductProcessToAdd = VSPProcessPostWithFormDataFactory.build(softwareProductPostRequest);
126 const softwareProductProcessAfterAdd = VSPProcessStoreWithFormDataFactory.build();
128 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [softwareProductProcessAfterAdd]);
130 mockRest.addHandler('post', ({data, options, baseUrl}) => {
131 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes`);
132 expect(data).toEqual(softwareProductPostRequest);
133 expect(options).toEqual(undefined);
136 value: softwareProductProcessAfterAdd.id
140 mockRest.addHandler('post', ({data, options, baseUrl}) => {
141 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes/${softwareProductProcessAfterAdd.id}/upload`);
142 expect(data).toEqual(softwareProductProcessToAdd.formData);
143 expect(options).toEqual(undefined);
144 return {returnCode: 'OK'};
147 return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
151 previousProcess: null,
152 process: softwareProductProcessToAdd
155 expect(store.getState()).toEqual(expectedStore);
162 it('Update Software Products Processes', () => {
163 const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList(1);
164 deepFreeze(softwareProductProcessesList);
166 const store = storeCreator({
168 softwareProductProcesses: {
169 processesList: softwareProductProcessesList
173 deepFreeze(store.getState());
175 const toBeUpdatedProcessId = softwareProductProcessesList[0].id;
176 const previousProcessData = softwareProductProcessesList[0];
177 const processUpdateData = VSPProcessStoreWithArtifactNameFactory.build(
178 {...previousProcessData,
180 description: 'string_UPDATED',
185 deepFreeze(processUpdateData);
187 const processPutRequest = VSPProcessPostFactory.build({
189 description: 'string_UPDATED',
192 deepFreeze(processPutRequest);
194 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [processUpdateData]);
197 mockRest.addHandler('put', ({data, options, baseUrl}) => {
198 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes/${toBeUpdatedProcessId}`);
199 expect(data).toEqual(processPutRequest);
200 expect(options).toEqual(undefined);
201 return {returnCode: 'OK'};
204 return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
208 previousProcess: previousProcessData,
209 process: processUpdateData
212 expect(store.getState()).toEqual(expectedStore);
216 it('Update Software Products Processes and uploaded file', () => {
217 const previousProcessData = VSPProcessStoreWithArtifactNameFactory.build();
218 deepFreeze(previousProcessData);
220 const store = storeCreator({
222 softwareProductProcesses: {
223 processesList: [previousProcessData]
227 deepFreeze(store.getState());
229 const newProcessToUpdate = VSPProcessStoreWithFormDataFactory.build({
230 ...previousProcessData,
233 name: 'new artifact name'
236 deepFreeze(newProcessToUpdate);
238 const newProcessToPutRequest = VSPProcessPostFactory.build({
239 name: newProcessToUpdate.name,
240 description: previousProcessData.description,
241 type: previousProcessData.type
243 deepFreeze(newProcessToPutRequest);
245 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [newProcessToUpdate]);
247 mockRest.addHandler('put', ({data, options, baseUrl}) => {
248 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes/${newProcessToUpdate.id}`);
249 expect(data).toEqual(newProcessToPutRequest);
250 expect(options).toEqual(undefined);
251 return {returnCode: 'OK'};
254 mockRest.addHandler('post', ({data, options, baseUrl}) => {
255 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes/${newProcessToUpdate.id}/upload`);
256 expect(data).toEqual(newProcessToUpdate.formData);
257 expect(options).toEqual(undefined);
258 return {returnCode: 'OK'};
261 return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
265 previousProcess: previousProcessData,
266 process: newProcessToUpdate
269 expect(store.getState()).toEqual(expectedStore);
276 it('Get Software Products Processes List', () => {
277 const store = storeCreator();
278 deepFreeze(store.getState());
280 const softwareProductProcessesList = VSPProcessStoreFactory.buildList(2);
282 deepFreeze(softwareProductProcessesList);
284 deepFreeze(store.getState());
286 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', softwareProductProcessesList);
288 mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
289 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes`);
290 expect(data).toEqual(undefined);
291 expect(options).toEqual(undefined);
292 return {results: softwareProductProcessesList};
295 return SoftwareProductProcessesActionHelper.fetchProcessesList(store.dispatch, {softwareProductId, version}).then(() => {
296 expect(store.getState()).toEqual(expectedStore);
303 it('Delete Software Products Processes', () => {
304 const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList(1);
305 const currentSoftwareProduct = VSPEditorFactory.build();
307 deepFreeze(softwareProductProcessesList);
308 const store = storeCreator({
310 softwareProductProcesses: {
311 processesList: softwareProductProcessesList
313 softwareProductEditor: {
314 data: currentSoftwareProduct
319 const processId = softwareProductProcessesList[0].id;
320 const version = store.getState().softwareProduct.softwareProductEditor.data.version;
321 const versionId = version.id;
322 deepFreeze(store.getState());
324 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', []);
326 mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
327 expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/processes/${processId}`);
328 expect(data).toEqual(undefined);
329 expect(options).toEqual(undefined);
337 return SoftwareProductProcessesActionHelper.deleteProcess(store.dispatch, {
338 process: softwareProductProcessesList[0],
342 expect(store.getState()).toEqual(expectedStore);
346 it('Validating Software Products Processes Delete confirmation', done => {
347 const store = storeCreator();
348 deepFreeze(store.getState());
350 let process = VSPProcessStoreFactory.build();
353 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processToDelete', process);
355 SoftwareProductProcessesActionHelper.openDeleteProcessesConfirm(store.dispatch, {process});
357 setTimeout(function(){
358 expect(store.getState()).toEqual(expectedStore);
363 it('Validating Software Products Processes Cancel Delete', done => {
364 const store = storeCreator();
365 deepFreeze(store.getState());
367 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processToDelete', false);
369 SoftwareProductProcessesActionHelper.hideDeleteConfirm(store.dispatch);
371 setTimeout(function(){
372 expect(store.getState()).toEqual(expectedStore);
380 it('Validating open Software Products Processes for create', () => {
381 const store = storeCreator();
382 deepFreeze(store.getState());
387 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesEditor.data', process);
389 SoftwareProductProcessesActionHelper.openEditor(store.dispatch);
390 expect(store.getState().softwareProduct.softwareProductProcesses.processesEditor.data).toEqual(expectedStore.softwareProduct.softwareProductProcesses.processesEditor.data);
393 it('Validating close Software Products Processes from editing mode', () => {
394 const store = storeCreator();
395 deepFreeze(store.getState());
397 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesEditor', {});
399 SoftwareProductProcessesActionHelper.closeEditor(store.dispatch);
400 expect(store.getState()).toEqual(expectedStore);
403 it('Validating open Software Products Processes for editing', () => {
404 const store = storeCreator();
405 deepFreeze(store.getState());
407 let process = {name: 'aa', description: 'xx'};
410 const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesEditor.data', process);
412 SoftwareProductProcessesActionHelper.openEditor(store.dispatch, process);
413 expect(store.getState().softwareProduct.softwareProductProcesses.processesEditor.data).toEqual(expectedStore.softwareProduct.softwareProductProcesses.processesEditor.data);