blob: 90de1e327fc07ade292915ba9161956e0e68b79e [file] [log] [blame]
/*
* 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
);
});
});