@northscaler/service-support
Version:
Artifacts that assist in writing service layers effectively
81 lines (73 loc) • 8.79 kB
JavaScript
/* global describe, it */
'use strict';
const chai = require('chai');
chai.use(require('dirty-chai'));
const expect = chai.expect;
const {
CodedError
} = require('@northscaler/error-support');
const {
servicifyOutcomeOf
} = require('../../../main').service;
const {
ResponseStatus
} = require('../../../main').enums;
const BadError = CodedError({
name: 'BadError'
});
describe('unit tests of servicifyOutcomeOf', () => {
it('should create service response from dto', async function () {
var _actual$meta;
const dto = {
my: 'dto'
};
const expected = {
data: dto,
meta: {
status: ResponseStatus.SUCCESS.name
}
};
const actual = await servicifyOutcomeOf({
fn: () => dto
});
expect(actual === null || actual === void 0 ? void 0 : (_actual$meta = actual.meta) === null || _actual$meta === void 0 ? void 0 : _actual$meta.elapsedMillis).to.be.at.least(0);
delete actual.meta.elapsedMillis;
expect(actual).to.deep.equal(expected);
});
it('should create service response from error', async function () {
var _actual$meta2, _actual$error, _actual$error2, _actual$error2$cause;
const causeMsg = 'because';
const msg = 'message';
const code = BadError.CODE;
const expected = {
error: {
cause: {
message: causeMsg,
name: 'Error'
},
code,
message: `${code}: ${msg}: ${causeMsg}`,
name: 'BadError'
},
meta: {
status: ResponseStatus.FAILURE.name
}
};
const actual = await servicifyOutcomeOf({
fn: () => function (e) {
throw e;
}(new BadError({
msg,
cause: new Error(causeMsg)
}))
});
expect(actual === null || actual === void 0 ? void 0 : (_actual$meta2 = actual.meta) === null || _actual$meta2 === void 0 ? void 0 : _actual$meta2.elapsedMillis).to.be.at.least(0);
delete actual.meta.elapsedMillis;
expect(actual === null || actual === void 0 ? void 0 : (_actual$error = actual.error) === null || _actual$error === void 0 ? void 0 : _actual$error.stack).to.be.ok();
expect(actual === null || actual === void 0 ? void 0 : (_actual$error2 = actual.error) === null || _actual$error2 === void 0 ? void 0 : (_actual$error2$cause = _actual$error2.cause) === null || _actual$error2$cause === void 0 ? void 0 : _actual$error2$cause.stack).to.be.ok();
delete actual.error.stack;
delete actual.error.cause.stack;
expect(actual).to.deep.equal(expected);
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0L3VuaXQvc2VydmljZS9zZXJ2aWNpZnlPdXRjb21lT2Yuc3BlYy5qcyJdLCJuYW1lcyI6WyJjaGFpIiwicmVxdWlyZSIsInVzZSIsImV4cGVjdCIsIkNvZGVkRXJyb3IiLCJzZXJ2aWNpZnlPdXRjb21lT2YiLCJzZXJ2aWNlIiwiUmVzcG9uc2VTdGF0dXMiLCJlbnVtcyIsIkJhZEVycm9yIiwibmFtZSIsImRlc2NyaWJlIiwiaXQiLCJkdG8iLCJteSIsImV4cGVjdGVkIiwiZGF0YSIsIm1ldGEiLCJzdGF0dXMiLCJTVUNDRVNTIiwiYWN0dWFsIiwiZm4iLCJlbGFwc2VkTWlsbGlzIiwidG8iLCJiZSIsImF0IiwibGVhc3QiLCJkZWVwIiwiZXF1YWwiLCJjYXVzZU1zZyIsIm1zZyIsImNvZGUiLCJDT0RFIiwiZXJyb3IiLCJjYXVzZSIsIm1lc3NhZ2UiLCJGQUlMVVJFIiwiRXJyb3IiLCJzdGFjayIsIm9rIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBOztBQUVBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0FELElBQUksQ0FBQ0UsR0FBTCxDQUFTRCxPQUFPLENBQUMsWUFBRCxDQUFoQjtBQUNBLE1BQU1FLE1BQU0sR0FBR0gsSUFBSSxDQUFDRyxNQUFwQjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBaUJILE9BQU8sQ0FBQyw0QkFBRCxDQUE5Qjs7QUFFQSxNQUFNO0FBQUVJLEVBQUFBO0FBQUYsSUFBeUJKLE9BQU8sQ0FBQyxlQUFELENBQVAsQ0FBeUJLLE9BQXhEOztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFxQk4sT0FBTyxDQUFDLGVBQUQsQ0FBUCxDQUF5Qk8sS0FBcEQ7O0FBRUEsTUFBTUMsUUFBUSxHQUFHTCxVQUFVLENBQUM7QUFBRU0sRUFBQUEsSUFBSSxFQUFFO0FBQVIsQ0FBRCxDQUEzQjtBQUVBQyxRQUFRLENBQUMsa0NBQUQsRUFBcUMsTUFBTTtBQUNq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QUFiLENBQW1CSSxLQUExQjtBQUVBbkMsSUFBQUEsTUFBTSxDQUFDaUIsTUFBRCxDQUFOLENBQWVHLEVBQWYsQ0FBa0JJLElBQWxCLENBQXVCQyxLQUF2QixDQUE2QmIsUUFBN0I7QUFDRCxHQWpDQyxDQUFGO0FBa0NELENBckRPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVzY3JpYmUsIGl0ICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpXG5jaGFpLnVzZShyZXF1aXJlKCdkaXJ0eS1jaGFpJykpXG5jb25zdCBleHBlY3QgPSBjaGFpLmV4cGVjdFxuY29uc3QgeyBDb2RlZEVycm9yIH0gPSByZXF1aXJlKCdAbm9ydGhzY2FsZXIvZXJyb3Itc3VwcG9ydCcpXG5cbmNvbnN0IHsgc2VydmljaWZ5T3V0Y29tZU9mIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9tYWluJykuc2VydmljZVxuY29uc3QgeyBSZXNwb25zZVN0YXR1cyB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbWFpbicpLmVudW1zXG5cbmNvbnN0IEJhZEVycm9yID0gQ29kZWRFcnJvcih7IG5hbWU6ICdCYWRFcnJvcicgfSlcblxuZGVzY3JpYmUoJ3VuaXQgdGVzdHMgb2Ygc2VydmljaWZ5T3V0Y29tZU9mJywgKCkgPT4ge1xuICBpdCgnc2hvdWxkIGNyZWF0ZSBzZXJ2aWNlIHJlc3BvbnNlIGZyb20gZHRvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGR0byA9IHsgbXk6ICdkdG8nIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgICAgZGF0YTogZHRvLFxuICAgICAgbWV0YToge1xuICAgICAgICBzdGF0dXM6IFJlc3BvbnNlU3RhdHVzLlNVQ0NFU1MubmFtZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbCA9IGF3YWl0IHNlcnZpY2lmeU91dGNvbWVPZih7IGZuOiAoKSA9PiBkdG8gfSlcblxuICAgIGV4cGVjdChhY3R1YWw/Lm1ldGE/LmVsYXBzZWRNaWxsaXMpLnRvLmJlLmF0LmxlYXN0KDApXG4gICAgZGVsZXRlIGFjdHVhbC5tZXRhLmVsYXBzZWRNaWxsaXNcblxuICAgIGV4cGVjdChhY3R1YWwpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWQpXG4gIH0pXG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgc2VydmljZSByZXNwb25zZSBmcm9tIGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNhdXNlTXNnID0gJ2JlY2F1c2UnXG4gICAgY29uc3QgbXNnID0gJ21lc3NhZ2UnXG4gICAgY29uc3QgY29kZSA9IEJhZEVycm9yLkNPREVcblxuICAgIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY2F1c2U6IHtcbiAgICAgICAgICBtZXNzYWdlOiBjYXVzZU1zZyxcbiAgICAgICAgICBuYW1lOiAnRXJyb3InXG4gICAgICAgIH0sXG4gICAgICAgIGNvZGUsXG4gICAgICAgIG1lc3NhZ2U6IGAke2NvZGV9OiAke21zZ306ICR7Y2F1c2VNc2d9YCxcbiAgICAgICAgbmFtZTogJ0JhZEVycm9yJ1xuICAgICAgfSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgc3RhdHVzOiBSZXNwb25zZVN0YXR1cy5GQUlMVVJFLm5hbWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWwgPSBhd2FpdCBzZXJ2aWNpZnlPdXRjb21lT2Yoe1xuICAgICAgZm46ICgpID0+IHRocm93IG5ldyBCYWRFcnJvcih7IG1zZywgY2F1c2U6IG5ldyBFcnJvcihjYXVzZU1zZykgfSlcbiAgICB9KVxuXG4gICAgZXhwZWN0KGFjdHVhbD8ubWV0YT8uZWxhcHNlZE1pbGxpcykudG8uYmUuYXQubGVhc3QoMClcbiAgICBkZWxldGUgYWN0dWFsLm1ldGEuZWxhcHNlZE1pbGxpc1xuXG4gICAgZXhwZWN0KGFjdHVhbD8uZXJyb3I/LnN0YWNrKS50by5iZS5vaygpXG4gICAgZXhwZWN0KGFjdHVhbD8uZXJyb3I/LmNhdXNlPy5zdGFjaykudG8uYmUub2soKVxuICAgIGRlbGV0ZSBhY3R1YWwuZXJyb3Iuc3RhY2tcbiAgICBkZWxldGUgYWN0dWFsLmVycm9yLmNhdXNlLnN0YWNrXG5cbiAgICBleHBlY3QoYWN0dWFsKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkKVxuICB9KVxufSlcbiJdfQ==