blob: 43110d2e55dbf3df8bb2613be97744d54260a8bf [file] [log] [blame]
/*!
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
*
* 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 ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
const softwareProductId = '123';
const version = VSPEditorFactory.build().version;
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 version = store.getState().softwareProduct.softwareProductEditor.data.version;
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', done => {
const store = storeCreator();
deepFreeze(store.getState());
let process = VSPProcessStoreFactory.build();
deepFreeze(process);
const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processToDelete', process);
SoftwareProductProcessesActionHelper.openDeleteProcessesConfirm(store.dispatch, {process});
setTimeout(function(){
expect(store.getState()).toEqual(expectedStore);
done();
}, 100);
});
it('Validating Software Products Processes Cancel Delete', done => {
const store = storeCreator();
deepFreeze(store.getState());
const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processToDelete', false);
SoftwareProductProcessesActionHelper.hideDeleteConfirm(store.dispatch);
setTimeout(function(){
expect(store.getState()).toEqual(expectedStore);
done();
}, 100);
});
//**
//** CREATE/EDIT
//**
it('Validating open Software Products Processes for create', () => {
const store = storeCreator();
deepFreeze(store.getState());
let process = {};
deepFreeze(process);
const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesEditor.data', process);
SoftwareProductProcessesActionHelper.openEditor(store.dispatch);
expect(store.getState().softwareProduct.softwareProductProcesses.processesEditor.data).toEqual(expectedStore.softwareProduct.softwareProductProcesses.processesEditor.data);
});
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);
});
});