| /* |
| * 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 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.modal).toBeDefined(); |
| }); |
| |
| it('Close flow details editor modal', () => { |
| deepFreeze(store.getState()); |
| FlowsActions.closeEditCreateWFModal(store.dispatch); |
| let state = store.getState(); |
| expect(state.modal).toBeFalsy(); |
| }); |
| |
| 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.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); |
| }); |
| }); |
| }); |