| /*! |
| * 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 store from 'sdc-app/AppStore.js'; |
| import FlowsActions from 'sdc-app/flows/FlowsActions.js'; |
| import {enums} from 'sdc-app/flows/FlowsConstants.js'; |
| |
| import { |
| FlowCreateFactory, |
| FlowPostRequestFactory, |
| FlowPostResponseFactory, |
| FlowFetchRequestFactory, |
| FlowFetchResponseFactory, |
| FlowDeleteRequestFactory, |
| FlowUpdateRequestFactory } from 'test-utils/factories/flows/FlowsFactories.js'; |
| |
| import {buildFromExistingObject} from 'test-utils/Util.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).not.toBe(-1); |
| }; |
| |
| describe('Workflows and Management Flows Module Tests:', function () { |
| |
| |
| it('empty artifact should open flow creation modal', () => { |
| |
| const artifacts = {}; |
| |
| deepFreeze(store.getState()); |
| deepFreeze(artifacts); |
| FlowsActions.fetchFlowArtifacts(store.dispatch, { |
| artifacts, |
| diagramType: enums.WORKFLOW, |
| participants: [], |
| serviceID: '1234' |
| }); |
| let state = store.getState(); |
| expect(state.flows.isDisplayModal).toBe(true); |
| expect(state.flows.isModalInEditMode).toBe(false); |
| }); |
| |
| it('Close flow details editor modal', () => { |
| deepFreeze(store.getState()); |
| FlowsActions.closeFlowDetailsEditor(store.dispatch); |
| let state = store.getState(); |
| expect(state.flows.isDisplayModal).toBe(false); |
| expect(state.flows.isModalInEditMode).toBe(false); |
| }); |
| |
| it('Get Flows List from loaded artifact', () => { |
| |
| deepFreeze(store.getState()); |
| |
| const artifacts = { |
| 'test1': FlowPostResponseFactory.build({artifactName: 'test1'}), |
| 'kukuriku': FlowPostResponseFactory.build({ |
| 'artifactType': 'PUPPET', |
| 'artifactName': 'kukuriku', |
| }), |
| 'test3': FlowPostResponseFactory.build({artifactName: 'test3'}) |
| }; |
| |
| 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); |
| |
| 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); |
| |
| }); |
| |
| |
| it('Add New Flow', () => { |
| |
| deepFreeze(store.getState()); |
| |
| const flowCreateData = FlowCreateFactory.build(); |
| let expectedDataToBeSentInTheRequest = buildFromExistingObject(FlowPostRequestFactory, flowCreateData); |
| |
| mockRest.addHandler('post', ({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 buildFromExistingObject(FlowPostResponseFactory, expectedDataToBeSentInTheRequest); |
| }); |
| |
| return FlowsActions.createOrUpdateFlow(store.dispatch, {flow: flowCreateData}, NEW_FLOW).then(() => { |
| assertFlowDataAfterCreateFetchAndUpdate(flowCreateData); |
| }); |
| |
| |
| }); |
| |
| it('Fetch Flow', () => { |
| |
| deepFreeze(store.getState()); |
| |
| const flowFetchData = FlowFetchRequestFactory.build(); |
| |
| 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 buildFromExistingObject(FlowFetchResponseFactory, flowFetchData); |
| }); |
| |
| return FlowsActions.fetchArtifact(store.dispatch, {flow: flowFetchData}).then(() => { |
| assertFlowDataAfterCreateFetchAndUpdate(flowFetchData); |
| }); |
| }); |
| |
| it('Update Existing Flow', () => { |
| |
| deepFreeze(store.getState()); |
| const flowUpdateData = FlowUpdateRequestFactory.build(); |
| |
| mockRest.addHandler('post', ({baseUrl}) => { |
| expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowUpdateData.serviceID}/artifacts/${flowUpdateData.uniqueId}`); |
| |
| return buildFromExistingObject(FlowPostResponseFactory, flowUpdateData); |
| }); |
| |
| return FlowsActions.createOrUpdateFlow(store.dispatch, {flow: flowUpdateData}, !NEW_FLOW).then(() => { |
| assertFlowDataAfterCreateFetchAndUpdate(flowUpdateData); |
| }); |
| |
| }); |
| |
| it('Delete Flow', () => { |
| |
| deepFreeze(store.getState()); |
| |
| const flowDeleteData = FlowDeleteRequestFactory.build(); |
| |
| mockRest.addHandler('destroy', ({baseUrl}) => { |
| expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowDeleteData.serviceID}/artifacts/${flowDeleteData.uniqueId}`); |
| return {}; |
| }); |
| |
| return FlowsActions.deleteFlow(store.dispatch, {flow: flowDeleteData}).then(() => { |
| let {flowList} = store.getState().flows; |
| let index = flowList.findIndex(flow => flow.uniqueId === flowDeleteData.uniqueId); |
| expect(index).toBe(-1); |
| }); |
| }); |
| }); |