/*- * ============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); }); });