blob: 4c5ab786401a75faf7310d8eb9f659afd5454a26 [file] [log] [blame]
/*-
* ============LICENSE_START=======================================================
* SDC
* ================================================================================
* 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.
* ============LICENSE_END=========================================================
*/
import expect from 'expect';
import deepFreeze from 'deep-freeze';
import mockRest from 'test-utils/MockRest.js';
import store from 'sdc-app/AppStore.js';
import FlowsActions from 'sdc-app/flows/FlowsActions.js';
import {enums} from 'sdc-app/flows/FlowsConstants.js';
const NEW_FLOW = true;
let assertFlowDataAfterCreateFetchAndUpdate = (data) => {
let {flowList, serviceID, diagramType} = store.getState().flows;
expect(serviceID).toBe(data.serviceID);
expect(diagramType).toBe(data.artifactType);
let uniqueId = data.uniqueId || `${data.serviceID}.${data.artifactName}`;
let index = flowList.findIndex(flow => flow.uniqueId === uniqueId);
expect(index).toNotBe(-1);
};
describe('Workflows and Management Flows Module Tests:', function () {
it('empty artifact should open flow creation modal', done => {
const artifacts = {};
deepFreeze(store.getState());
deepFreeze(artifacts);
FlowsActions.fetchFlowArtifacts(store.dispatch, {
artifacts,
diagramType: enums.WORKFLOW,
participants: [],
serviceID: '1234'
});
setTimeout(() => {
let state = store.getState();
expect(state.flows.isDisplayModal).toBe(true);
expect(state.flows.isModalInEditMode).toBe(false);
done();
}, 50);
});
it('Close flow details editor modal', done => {
deepFreeze(store.getState());
FlowsActions.closeFlowDetailsEditor(store.dispatch);
setTimeout(() => {
let state = store.getState();
expect(state.flows.isDisplayModal).toBe(false);
expect(state.flows.isModalInEditMode).toBe(false);
done();
}, 50);
});
it('Get Flows List from loaded artifact', done => {
deepFreeze(store.getState());
const artifacts = {
'test1': {
'uniqueId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.test1',
'artifactType': 'NETWORK_CALL_FLOW',
'artifactName': 'test1',
'artifactChecksum': 'MzYxZGIyNjlkNjRmMTM4ZWMxM2FjNDUyNDQwMTI3NzM=',
'attUidLastUpdater': 'cs0008',
'updaterFullName': 'Carlos Santana',
'creationDate': 1468164899724,
'lastUpdateDate': 1468164899724,
'esId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.test1',
'artifactLabel': 'test1',
'artifactCreator': 'cs0008',
'description': 'www',
'mandatory': false,
'artifactDisplayName': 'test1',
'serviceApi': false,
'artifactGroupType': 'INFORMATIONAL',
'timeout': 0,
'artifactVersion': '1',
'artifactUUID': '28d4cb95-bb46-4666-b858-e333671e6444',
'payloadUpdateDate': 1468164900232
},
'kukuriku': {
'uniqueId': '0280b577-2c7b-426e-b7a2-f0dc16508c37.kukuriku',
'artifactType': 'PUPPET',
'artifactName': 'fuel.JPG',
'artifactChecksum': 'OWEyYTVjMWFiNWQ4ZDIwZDUxYTE3Y2EzZmI3YTYyMjA=',
'attUidLastUpdater': 'cs0008',
'updaterFullName': 'Carlos Santana',
'creationDate': 1467877631512,
'lastUpdateDate': 1467877631512,
'esId': '0280b577-2c7b-426e-b7a2-f0dc16508c37.kukuriku',
'artifactLabel': 'kukuriku',
'artifactCreator': 'cs0008',
'description': 'asdfasdf',
'mandatory': false,
'artifactDisplayName': 'kukuriku',
'serviceApi': false,
'artifactGroupType': 'INFORMATIONAL',
'timeout': 0,
'artifactVersion': '1',
'artifactUUID': 'c1e98336-03f4-4b2a-b6a5-08eca44fe3c4',
'payloadUpdateDate': 1467877632722
},
'test3': {
'uniqueId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.test3',
'artifactType': 'NETWORK_CALL_FLOW',
'artifactName': 'test3',
'artifactChecksum': 'ZmJkZGU1M2M2ZWUxZTdmNGU5NTNiNTdiYTAzMmM1YzU=',
'attUidLastUpdater': 'cs0008',
'updaterFullName': 'Carlos Santana',
'creationDate': 1468165068570,
'lastUpdateDate': 1468165128827,
'esId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.test3',
'artifactLabel': 'test3',
'artifactCreator': 'cs0008',
'description': '333',
'mandatory': false,
'artifactDisplayName': 'test3',
'serviceApi': false,
'artifactGroupType': 'INFORMATIONAL',
'timeout': 0,
'artifactVersion': '2',
'artifactUUID': '0988027c-d19c-43db-8315-2c68fc773775',
'payloadUpdateDate': 1468165129335
}
};
const artifactsArray = Object.keys(artifacts).map(artifact => artifact);
deepFreeze(artifacts);
deepFreeze(store.getState());
let actionData = {
artifacts,
diagramType: enums.WORKFLOW,
participants: [],
serviceID: '1234'
};
FlowsActions.fetchFlowArtifacts(store.dispatch, actionData);
setTimeout(() => {
let state = store.getState();
expect(state.flows.isDisplayModal).toBe(false);
expect(state.flows.isModalInEditMode).toBe(false);
expect(state.flows.flowList.length).toEqual(artifactsArray.length);
expect(state.flows.flowParticipants).toEqual(actionData.participants);
expect(state.flows.serviceID).toBe(actionData.serviceID);
expect(state.flows.diagramType).toBe(actionData.diagramType);
done();
}, 50);
});
it('Add New Flow', done => {
deepFreeze(store.getState());
const flowCreateData = deepFreeze({
artifactName: 'zizizi',
artifactType: 'WORKFLOW',
description: 'aslkjdfl asfdasdf',
serviceID: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
});
let expectedDataToBeSentInTheRequest = {
artifactGroupType: 'INFORMATIONAL',
artifactLabel: 'zizizi',
artifactName: 'zizizi',
artifactType: 'WORKFLOW',
description: 'aslkjdfl asfdasdf',
payloadData: 'eyJWRVJTSU9OIjp7Im1ham9yIjoxLCJtaW5vciI6MH0sImRlc2NyaXB0aW9uIjoiYXNsa2pkZmwgYXNmZGFzZGYifQ=='
};
mockRest.addHandler('create', ({data, baseUrl, options}) => {
expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowCreateData.serviceID}/artifacts/`);
expect(data.artifactLabel).toBe(expectedDataToBeSentInTheRequest.artifactLabel);
expect(data.artifactName).toBe(expectedDataToBeSentInTheRequest.artifactName);
expect(data.artifactType).toBe(expectedDataToBeSentInTheRequest.artifactType);
expect(data.description).toBe(expectedDataToBeSentInTheRequest.description);
expect(data.payloadData).toBe(expectedDataToBeSentInTheRequest.payloadData);
expect(options.md5).toBe(true);
return {
artifactChecksum: 'NjBmYjc4NGM5MWIwNmNkMDhmMThhMDAwYmQxYjBiZTU=',
artifactCreator: 'cs0008',
artifactDisplayName: 'zizizi',
artifactGroupType: 'INFORMATIONAL',
artifactLabel: 'zizizi',
artifactName: 'zizizi',
artifactType: 'WORKFLOW',
artifactUUID: '0295a7cc-8c02-4105-9d7e-c30ce67ecd07',
artifactVersion: '1',
attUidLastUpdater: 'cs0008',
creationDate: 1470144601623,
description: 'aslkjdfl asfdasdf',
esId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
lastUpdateDate: 1470144601623,
mandatory: false,
payloadUpdateDate: 1470144602131,
serviceApi: false,
timeout: 0,
uniqueId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
updaterFullName: 'Carlos Santana',
};
});
FlowsActions.createOrUpdateFlow(store.dispatch, {flow: flowCreateData}, NEW_FLOW);
setTimeout(() => {
assertFlowDataAfterCreateFetchAndUpdate(flowCreateData);
done();
}, 50);
});
it('Fetch Flow', done => {
deepFreeze(store.getState());
const flowFetchData = {
artifactName: 'zizizi',
artifactType: 'WORKFLOW',
description: 'aslkjdfl asfdasdf',
serviceID: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
uniqueId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
participants: []
};
mockRest.addHandler('fetch', ({baseUrl}) => {
//sdc1/feProxy/rest/v1/catalog/services/338d75f0-aec8-4eb4-89c9-8733fcd9bf3b/artifacts/338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi
expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowFetchData.serviceID}/artifacts/${flowFetchData.uniqueId}`);
return {
artifactName: 'zizizi',
base64Contents: 'eyJWRVJTSU9OIjp7Im1ham9yIjoxLCJtaW5vciI6MH0sImRlc2NyaXB0aW9uIjoiYXNsa2pkZmwgYXNmZGFzZGYifQ=='
};
});
FlowsActions.fetchArtifact(store.dispatch, {flow: flowFetchData});
setTimeout(() => {
assertFlowDataAfterCreateFetchAndUpdate(flowFetchData);
done();
}, 50);
});
it('Update Existing Flow', done => {
deepFreeze(store.getState());
const flowUpdateData = {
'artifactType': 'WORKFLOW',
'participants': [
{
'id': '1',
'name': 'Customer'
},
{
'id': '2',
'name': 'CCD'
},
{
'id': '3',
'name': 'Infrastructure'
},
{
'id': '4',
'name': 'MSO'
},
{
'id': '5',
'name': 'SDN-C'
},
{
'id': '6',
'name': 'A&AI'
},
{
'id': '7',
'name': 'APP-C'
},
{
'id': '8',
'name': 'Cloud'
},
{
'id': '9',
'name': 'DCAE'
},
{
'id': '10',
'name': 'ALTS'
},
{
'id': '11',
'name': 'VF'
}
],
'serviceID': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
'artifactDisplayName': 'zizizi',
'artifactGroupType': 'INFORMATIONAL',
'uniqueId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
'artifactName': 'zizizi',
'artifactLabel': 'zizizi',
'artifactUUID': '0295a7cc-8c02-4105-9d7e-c30ce67ecd07',
'artifactVersion': '1',
'creationDate': 1470144601623,
'lastUpdateDate': 1470144601623,
'description': 'aslkjdfl asfdasdf',
'mandatory': false,
'timeout': 0,
'esId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
'artifactChecksum': 'NjBmYjc4NGM5MWIwNmNkMDhmMThhMDAwYmQxYjBiZTU=',
'heatParameters': [],
'sequenceDiagramModel': {
'diagram': {
'metadata': {
'id': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
'name': 'zizizi',
'ref': 'BLANK'
},
'lifelines': [
{
'id': '1',
'name': 'Customer',
'index': 1,
'x': 175
},
{
'id': '2',
'name': 'CCD',
'index': 2,
'x': 575
},
{
'id': '3',
'name': 'Infrastructure',
'index': 3,
'x': 975
},
{
'id': '4',
'name': 'MSO',
'index': 4,
'x': 1375
},
{
'id': '5',
'name': 'SDN-C',
'index': 5,
'x': 1775
},
{
'id': '6',
'name': 'A&AI',
'index': 6,
'x': 2175
},
{
'id': '7',
'name': 'APP-C',
'index': 7,
'x': 2575
},
{
'id': '8',
'name': 'Cloud',
'index': 8,
'x': 2975
},
{
'id': '9',
'name': 'DCAE',
'index': 9,
'x': 3375
},
{
'id': '10',
'name': 'ALTS',
'index': 10,
'x': 3775
},
{
'id': '11',
'name': 'VF',
'index': 11,
'x': 4175
}
],
'steps': [
{
'message': {
'id': '9377-5036-c011-cb95-3a8b-82c6-bbb5-bc84',
'name': '[Unnamed Message]',
'type': 'request',
'from': '1',
'to': '2',
'index': 1
}
},
{
'message': {
'id': '64c4-4fd1-b1da-4355-a060-6e48-ee47-c85c',
'name': '[Unnamed Message]',
'type': 'request',
'from': '1',
'to': '2',
'index': 2
}
}
]
}
}
};
mockRest.addHandler('create', ({baseUrl}) => {
expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowUpdateData.serviceID}/artifacts/${flowUpdateData.uniqueId}`);
return {
artifactChecksum: 'MmE5MWJmN2ZlN2FhM2JhMzA0NGQ1ODMyOWFhNWI0NDA=',
artifactCreator: 'cs0008',
artifactDisplayName: 'zizizi',
artifactGroupType: 'INFORMATIONAL',
artifactLabel: 'zizizi',
artifactName: 'zizizi',
artifactType: 'WORKFLOW',
artifactUUID: '3319335b-969e-4d72-b5a2-409645de6d64',
artifactVersion: '3',
attUidLastUpdater: 'cs0008',
creationDate: 1470144601623,
description: 'aslkjdfl asfdasdf',
esId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
lastUpdateDate: 1470208425904,
mandatory: false,
payloadUpdateDate: 1470208426424,
serviceApi: false,
timeout: 0,
uniqueId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
updaterFullName: 'Carlos Santana'
};
});
FlowsActions.createOrUpdateFlow(store.dispatch, {flow: flowUpdateData}, !NEW_FLOW);
setTimeout(() => {
assertFlowDataAfterCreateFetchAndUpdate(flowUpdateData);
done();
}, 50);
});
it('Delete Flow', done => {
deepFreeze(store.getState());
const flowDeleteData = deepFreeze({
artifactName: 'zizizi',
artifactType: 'WORKFLOW',
description: 'aslkjdfl asfdasdf',
serviceID: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
uniqueId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
participants: []
});
mockRest.addHandler('destroy', ({baseUrl}) => {
expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowDeleteData.serviceID}/artifacts/${flowDeleteData.uniqueId}`);
return {};
});
FlowsActions.deleteFlow(store.dispatch, {flow: flowDeleteData});
setTimeout(() => {
let {flowList} = store.getState().flows;
let index = flowList.findIndex(flow => flow.uniqueId === flowDeleteData.uniqueId);
expect(index).toBe(-1);
done();
}, 50);
});
});