blob: 621b6a1447182b4adb96b4244ba51c21972192d3 [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 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);
});
});
});