process-reporting-ts
Version:
Process reporting with typescript
173 lines (172 loc) • 8.84 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const aop_1 = __importDefault(require("./aop"));
const models_1 = require("./models");
const axios_1 = __importDefault(require("axios"));
jest.mock('axios');
const mockedAxios = axios_1.default;
describe("Intercept on function", () => {
const events = [];
beforeEach(() => {
events.length = 0;
mockedAxios.post.mockImplementation((url, data) => {
events.push(data);
return Promise.resolve(data);
});
process.env.REPORTING_SERVER = 'http://localhost:8080';
process.env.REPORTING_PROCESS_ID = 'process-id';
process.env.REPORTING_PROCESS_VERSION = '1.0';
process.env.REPORTING_EVENT_CATEGORY = 'UnitTest';
});
afterEach(() => {
jest.resetAllMocks();
});
test('should complete', () => __awaiter(void 0, void 0, void 0, function* () {
function StartEvent_1(input) {
return { output: input };
}
const sut = (0, aop_1.default)(StartEvent_1, {
startEvent: true,
instanceIdExpression: '{{ input }}',
keyExpression: '{{ input }}'
});
// GIven
const input = 'foo';
const answer = yield sut(input);
expect(answer).toEqual({ output: input });
expect(events.length).toEqual(2);
expect(mockedAxios.post).toHaveBeenCalledWith('http://localhost:8080/reporting-service/rest/api/report', events[0]);
expect(mockedAxios.post).toHaveBeenCalledWith('http://localhost:8080/reporting-service/rest/api/report', events[1]);
expect(events[0].status).toEqual(models_1.ReportStatus.STARTED);
expect(events[0].payload).toEqual(JSON.stringify({ input }));
expect(events[0].elementId).toEqual('StartEvent_1');
expect(events[0].transactionId).toEqual(input);
expect(events[0].referenceType).toEqual(process.env.REPORTING_EVENT_CATEGORY);
expect(events[0].referenceId).toEqual(input);
expect(events[0].startEvent).toEqual(true);
expect(events[0].endEvent).toEqual(false);
expect(events[0].multipleInstanceIndex).toEqual('0.0');
expect(events[0].errorMessage).not.toBeDefined();
expect(events[0].processId).toEqual(process.env.REPORTING_PROCESS_ID);
expect(events[0].processVersion).toEqual(process.env.REPORTING_PROCESS_VERSION);
expect(events[0].executionId).toBeDefined();
expect(events[0].eventTime).toBeDefined();
expect(events[0].startedBy).toEqual('system');
expect(events[1].status).toEqual(models_1.ReportStatus.COMPLETED);
expect(events[1].payload).toEqual(JSON.stringify({ output: input }));
expect(events[1].elementId).toEqual('StartEvent_1');
expect(events[1].transactionId).toEqual(input);
expect(events[1].referenceType).toEqual('UnitTest');
expect(events[1].referenceId).toEqual(input);
expect(events[1].startEvent).toEqual(true);
expect(events[1].endEvent).toEqual(false);
expect(events[1].multipleInstanceIndex).toEqual('0.0');
expect(events[1].errorMessage).not.toBeDefined();
expect(events[1].processId).toEqual(process.env.REPORTING_PROCESS_ID);
expect(events[1].processVersion).toEqual(process.env.REPORTING_PROCESS_VERSION);
expect(events[1].executionId).toBeDefined();
expect(events[1].eventTime).toBeDefined();
expect(events[1].startedBy).toEqual('system');
}));
test('should terminate', () => __awaiter(void 0, void 0, void 0, function* () {
function StartEvent_1(message) {
throw new Error('Business Error');
}
const sut = (0, aop_1.default)(StartEvent_1, {
endEvent: true,
instanceIdExpression: '{{ message }}',
keyExpression: '{{ message }}'
});
// GIven
const message = 'foo';
try {
yield sut(message);
}
catch (e) {
expect(e).toEqual(new Error('Business Error'));
}
expect(events.length).toEqual(2);
expect(mockedAxios.post).toHaveBeenCalledWith('http://localhost:8080/reporting-service/rest/api/report', events[0]);
expect(mockedAxios.post).toHaveBeenCalledWith('http://localhost:8080/reporting-service/rest/api/report', events[1]);
expect(events[0].status).toEqual(models_1.ReportStatus.STARTED);
expect(events[0].payload).toEqual(JSON.stringify({ message }));
expect(events[0].elementId).toEqual('StartEvent_1');
expect(events[0].transactionId).toEqual(message);
expect(events[0].referenceId).toEqual(message);
expect(events[0].startEvent).toEqual(false);
expect(events[0].endEvent).toEqual(true);
expect(events[0].multipleInstanceIndex).toEqual('0.0');
expect(events[0].errorMessage).not.toBeDefined();
expect(events[0].processId).toEqual(process.env.REPORTING_PROCESS_ID);
expect(events[0].processVersion).toEqual(process.env.REPORTING_PROCESS_VERSION);
expect(events[0].executionId).toBeDefined();
expect(events[0].eventTime).toBeDefined();
expect(events[0].startedBy).toEqual('system');
expect(events[1].status).toEqual(models_1.ReportStatus.ERROR);
expect(events[1].payload).not.toBeDefined();
expect(events[1].elementId).toEqual('StartEvent_1');
expect(events[1].transactionId).toEqual(message);
expect(events[1].referenceId).toEqual(message);
expect(events[1].startEvent).toEqual(false);
expect(events[1].endEvent).toEqual(true);
expect(events[1].multipleInstanceIndex).toEqual('0.0');
expect(events[1].errorMessage).toEqual('Error: Business Error');
expect(events[1].processId).toEqual(process.env.REPORTING_PROCESS_ID);
expect(events[1].processVersion).toEqual(process.env.REPORTING_PROCESS_VERSION);
expect(events[1].executionId).toBeDefined();
expect(events[1].eventTime).toBeDefined();
expect(events[1].startedBy).toEqual('system');
}));
test('should complete a process', () => __awaiter(void 0, void 0, void 0, function* () {
const data = { input: 'start', instanceId: '123456789', referenceId: 'client-123' };
function StartEvent_1(data) {
return Object.assign({}, data);
}
let handler = (0, aop_1.default)(StartEvent_1, {
startEvent: true,
instanceIdExpression: '{{ data.instanceId }}',
keyExpression: '{{ data.referenceId }}'
});
// Given
yield handler(data);
function Service_Task_1(data) {
return Object.assign({}, data);
}
handler = (0, aop_1.default)(Service_Task_1, {
instanceIdExpression: '{{ data.instanceId }}',
keyExpression: '{{ data.referenceId }}'
});
// Given
yield handler(data);
function EndEvent_1(data) {
return { message: data.message };
}
handler = (0, aop_1.default)(EndEvent_1, {
endEvent: true,
instanceIdExpression: '{{ data.instanceId }}',
keyExpression: '{{ data.referenceId }}'
});
// Given
yield handler(Object.assign(Object.assign({}, data), { message: 'message' }));
expect(events.length).toEqual(6);
events.forEach(it => expect(mockedAxios.post).toHaveBeenCalledWith('http://localhost:8080/reporting-service/rest/api/report', it));
expect(events[0].status).toEqual(models_1.ReportStatus.STARTED);
expect(events[1].status).toEqual(models_1.ReportStatus.COMPLETED);
expect(events[2].status).toEqual(models_1.ReportStatus.STARTED);
expect(events[3].status).toEqual(models_1.ReportStatus.COMPLETED);
expect(events[4].status).toEqual(models_1.ReportStatus.STARTED);
expect(events[5].status).toEqual(models_1.ReportStatus.PROCESS_COMPLETED);
}));
});