| /* |
| * Copyright © 2016-2018 European Support Limited |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| import deepFreeze from 'deep-freeze'; |
| import mockRest from 'test-utils/MockRest.js'; |
| import { cloneAndSet } from 'test-utils/Util.js'; |
| import { storeCreator } from 'sdc-app/AppStore.js'; |
| import Configuration from 'sdc-app/config/Configuration.js'; |
| import SoftwareProductProcessesActionHelper from 'sdc-app/onboarding/softwareProduct/processes/SoftwareProductProcessesActionHelper.js'; |
| import { |
| VSPProcessPostFactory, |
| VSPProcessStoreFactory, |
| VSPProcessPostFactoryWithType, |
| VSPProcessStoreFactoryWithType, |
| VSPProcessStoreWithFormDataFactory, |
| VSPProcessPostWithFormDataFactory, |
| VSPProcessStoreWithArtifactNameFactory |
| } from 'test-utils/factories/softwareProduct/SoftwareProductProcessFactories.js'; |
| import { buildFromExistingObject } from 'test-utils/Util.js'; |
| import { VSPEditorFactory } from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js'; |
| import VersionFactory from 'test-utils/factories/common/VersionFactory.js'; |
| |
| const softwareProductId = '123'; |
| const version = VersionFactory.build(); |
| |
| describe('Software Product Processes Module Tests', function() { |
| let restPrefix = ''; |
| |
| beforeAll(function() { |
| restPrefix = Configuration.get('restPrefix'); |
| deepFreeze(restPrefix); |
| }); |
| |
| //** |
| //** ADD |
| //** |
| it('Add Software Products Processes', () => { |
| const store = storeCreator(); |
| deepFreeze(store.getState()); |
| |
| const softwareProductProcessFromResponse = 'ADDED_ID'; |
| |
| const softwareProductProcessAfterAdd = VSPProcessStoreFactory.build({ |
| id: softwareProductProcessFromResponse |
| }); |
| const softwareProductPostRequest = buildFromExistingObject( |
| VSPProcessPostFactory, |
| softwareProductProcessAfterAdd |
| ); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesList', |
| [softwareProductProcessAfterAdd] |
| ); |
| |
| mockRest.addHandler('post', ({ data, options, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${ |
| version.id |
| }/processes` |
| ); |
| expect(data).toEqual(softwareProductPostRequest); |
| expect(options).toEqual(undefined); |
| return { |
| returnCode: 'OK', |
| value: softwareProductProcessFromResponse |
| }; |
| }); |
| |
| return SoftwareProductProcessesActionHelper.saveProcess( |
| store.dispatch, |
| { |
| softwareProductId, |
| version, |
| previousProcess: null, |
| process: softwareProductPostRequest |
| } |
| ).then(() => { |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| }); |
| |
| it('Add Software Products Processes with type', () => { |
| const store = storeCreator(); |
| deepFreeze(store.getState()); |
| |
| const softwareProductProcessFromResponse = 'ADDED_ID'; |
| |
| const softwareProductProcessAfterAdd = VSPProcessStoreFactoryWithType.build( |
| { id: softwareProductProcessFromResponse } |
| ); |
| const softwareProductPostRequest = buildFromExistingObject( |
| VSPProcessPostFactoryWithType, |
| softwareProductProcessAfterAdd |
| ); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesList', |
| [softwareProductProcessAfterAdd] |
| ); |
| |
| mockRest.addHandler('post', ({ data, options, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${ |
| version.id |
| }/processes` |
| ); |
| expect(data).toEqual(softwareProductPostRequest); |
| expect(options).toEqual(undefined); |
| return { |
| returnCode: 'OK', |
| value: softwareProductProcessFromResponse |
| }; |
| }); |
| |
| return SoftwareProductProcessesActionHelper.saveProcess( |
| store.dispatch, |
| { |
| softwareProductId, |
| version, |
| previousProcess: null, |
| process: softwareProductPostRequest |
| } |
| ).then(() => { |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| }); |
| |
| it('Add Software Products Processes with uploaded file', () => { |
| const store = storeCreator(); |
| deepFreeze(store.getState()); |
| |
| const softwareProductPostRequest = VSPProcessPostFactoryWithType.build(); |
| const softwareProductProcessToAdd = VSPProcessPostWithFormDataFactory.build( |
| softwareProductPostRequest |
| ); |
| const softwareProductProcessAfterAdd = VSPProcessStoreWithFormDataFactory.build(); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesList', |
| [softwareProductProcessAfterAdd] |
| ); |
| |
| mockRest.addHandler('post', ({ data, options, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${ |
| version.id |
| }/processes` |
| ); |
| expect(data).toEqual(softwareProductPostRequest); |
| expect(options).toEqual(undefined); |
| return { |
| returnCode: 'OK', |
| value: softwareProductProcessAfterAdd.id |
| }; |
| }); |
| |
| mockRest.addHandler('post', ({ data, options, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${ |
| version.id |
| }/processes/${softwareProductProcessAfterAdd.id}/upload` |
| ); |
| expect(data).toEqual(softwareProductProcessToAdd.formData); |
| expect(options).toEqual(undefined); |
| return { returnCode: 'OK' }; |
| }); |
| |
| return SoftwareProductProcessesActionHelper.saveProcess( |
| store.dispatch, |
| { |
| softwareProductId, |
| version, |
| previousProcess: null, |
| process: softwareProductProcessToAdd |
| } |
| ).then(() => { |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| }); |
| |
| //** |
| //** UPDATE |
| //** |
| it('Update Software Products Processes', () => { |
| const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList( |
| 1 |
| ); |
| deepFreeze(softwareProductProcessesList); |
| |
| const store = storeCreator({ |
| softwareProduct: { |
| softwareProductProcesses: { |
| processesList: softwareProductProcessesList |
| } |
| } |
| }); |
| deepFreeze(store.getState()); |
| |
| const toBeUpdatedProcessId = softwareProductProcessesList[0].id; |
| const previousProcessData = softwareProductProcessesList[0]; |
| const processUpdateData = VSPProcessStoreWithArtifactNameFactory.build({ |
| ...previousProcessData, |
| name: 'Pr1_UPDATED', |
| description: 'string_UPDATED', |
| type: 'Other' |
| }); |
| |
| deepFreeze(processUpdateData); |
| |
| const processPutRequest = VSPProcessPostFactory.build({ |
| name: 'Pr1_UPDATED', |
| description: 'string_UPDATED', |
| type: 'Other' |
| }); |
| deepFreeze(processPutRequest); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesList', |
| [processUpdateData] |
| ); |
| |
| mockRest.addHandler('put', ({ data, options, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${ |
| version.id |
| }/processes/${toBeUpdatedProcessId}` |
| ); |
| expect(data).toEqual(processPutRequest); |
| expect(options).toEqual(undefined); |
| return { returnCode: 'OK' }; |
| }); |
| |
| return SoftwareProductProcessesActionHelper.saveProcess( |
| store.dispatch, |
| { |
| softwareProductId, |
| version, |
| previousProcess: previousProcessData, |
| process: processUpdateData |
| } |
| ).then(() => { |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| }); |
| |
| it('Update Software Products Processes and uploaded file', () => { |
| const previousProcessData = VSPProcessStoreWithArtifactNameFactory.build(); |
| deepFreeze(previousProcessData); |
| |
| const store = storeCreator({ |
| softwareProduct: { |
| softwareProductProcesses: { |
| processesList: [previousProcessData] |
| } |
| } |
| }); |
| deepFreeze(store.getState()); |
| |
| const newProcessToUpdate = VSPProcessStoreWithFormDataFactory.build({ |
| ...previousProcessData, |
| name: 'new name', |
| formData: { |
| name: 'new artifact name' |
| } |
| }); |
| deepFreeze(newProcessToUpdate); |
| |
| const newProcessToPutRequest = VSPProcessPostFactory.build({ |
| name: newProcessToUpdate.name, |
| description: previousProcessData.description, |
| type: previousProcessData.type |
| }); |
| deepFreeze(newProcessToPutRequest); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesList', |
| [newProcessToUpdate] |
| ); |
| |
| mockRest.addHandler('put', ({ data, options, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${ |
| version.id |
| }/processes/${newProcessToUpdate.id}` |
| ); |
| expect(data).toEqual(newProcessToPutRequest); |
| expect(options).toEqual(undefined); |
| return { returnCode: 'OK' }; |
| }); |
| |
| mockRest.addHandler('post', ({ data, options, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${ |
| version.id |
| }/processes/${newProcessToUpdate.id}/upload` |
| ); |
| expect(data).toEqual(newProcessToUpdate.formData); |
| expect(options).toEqual(undefined); |
| return { returnCode: 'OK' }; |
| }); |
| |
| return SoftwareProductProcessesActionHelper.saveProcess( |
| store.dispatch, |
| { |
| softwareProductId, |
| version, |
| previousProcess: previousProcessData, |
| process: newProcessToUpdate |
| } |
| ).then(() => { |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| }); |
| |
| //** |
| //** GET |
| //** |
| it('Get Software Products Processes List', () => { |
| const store = storeCreator(); |
| deepFreeze(store.getState()); |
| |
| const softwareProductProcessesList = VSPProcessStoreFactory.buildList( |
| 2 |
| ); |
| |
| deepFreeze(softwareProductProcessesList); |
| |
| deepFreeze(store.getState()); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesList', |
| softwareProductProcessesList |
| ); |
| |
| mockRest.addHandler('fetch', ({ options, data, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${ |
| version.id |
| }/processes` |
| ); |
| expect(data).toEqual(undefined); |
| expect(options).toEqual(undefined); |
| return { results: softwareProductProcessesList }; |
| }); |
| |
| return SoftwareProductProcessesActionHelper.fetchProcessesList( |
| store.dispatch, |
| { softwareProductId, version } |
| ).then(() => { |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| }); |
| |
| //** |
| //** DELETE |
| //** |
| it('Delete Software Products Processes', () => { |
| const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList( |
| 1 |
| ); |
| const currentSoftwareProduct = VSPEditorFactory.build(); |
| |
| deepFreeze(softwareProductProcessesList); |
| const store = storeCreator({ |
| softwareProduct: { |
| softwareProductProcesses: { |
| processesList: softwareProductProcessesList |
| }, |
| softwareProductEditor: { |
| data: currentSoftwareProduct |
| } |
| } |
| }); |
| |
| const processId = softwareProductProcessesList[0].id; |
| const versionId = version.id; |
| deepFreeze(store.getState()); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesList', |
| [] |
| ); |
| |
| mockRest.addHandler('destroy', ({ data, options, baseUrl }) => { |
| expect(baseUrl).toEqual( |
| `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/processes/${processId}` |
| ); |
| expect(data).toEqual(undefined); |
| expect(options).toEqual(undefined); |
| return { |
| results: { |
| returnCode: 'OK' |
| } |
| }; |
| }); |
| |
| return SoftwareProductProcessesActionHelper.deleteProcess( |
| store.dispatch, |
| { |
| process: softwareProductProcessesList[0], |
| softwareProductId, |
| version |
| } |
| ).then(() => { |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| }); |
| |
| it('Validating Software Products Processes Delete confirmation', () => { |
| const store = storeCreator(); |
| deepFreeze(store.getState()); |
| |
| let process = VSPProcessStoreFactory.build(); |
| deepFreeze(process); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processToDelete', |
| process |
| ); |
| |
| return SoftwareProductProcessesActionHelper.openDeleteProcessesConfirm( |
| store.dispatch, |
| { process } |
| ); |
| |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| |
| it('Validating Software Products Processes Cancel Delete', () => { |
| const store = storeCreator(); |
| deepFreeze(store.getState()); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processToDelete', |
| false |
| ); |
| |
| SoftwareProductProcessesActionHelper.hideDeleteConfirm(store.dispatch); |
| |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| |
| //** |
| //** CREATE/EDIT |
| //** |
| |
| it('Validating close Software Products Processes from editing mode', () => { |
| const store = storeCreator(); |
| deepFreeze(store.getState()); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesEditor', |
| {} |
| ); |
| |
| SoftwareProductProcessesActionHelper.closeEditor(store.dispatch); |
| expect(store.getState()).toEqual(expectedStore); |
| }); |
| |
| it('Validating open Software Products Processes for editing', () => { |
| const store = storeCreator(); |
| deepFreeze(store.getState()); |
| |
| let process = { name: 'aa', description: 'xx' }; |
| deepFreeze(process); |
| |
| const expectedStore = cloneAndSet( |
| store.getState(), |
| 'softwareProduct.softwareProductProcesses.processesEditor.data', |
| process |
| ); |
| |
| SoftwareProductProcessesActionHelper.openEditor(store.dispatch, { |
| process |
| }); |
| expect( |
| store.getState().softwareProduct.softwareProductProcesses |
| .processesEditor.data |
| ).toEqual( |
| expectedStore.softwareProduct.softwareProductProcesses |
| .processesEditor.data |
| ); |
| }); |
| }); |