core-mvc
Version:
Simple but powerful MVC framework for NodeJS.
250 lines (249 loc) • 9.46 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const instrumented_1 = require("../../instrumented");
const log_1 = require("../../util/log");
const sleep_1 = __importDefault(require("../../util/sleep"));
vitest_1.vi.mock('../../util/log', () => ({
log: vitest_1.vi.fn(),
}));
(0, vitest_1.afterEach)(() => {
vitest_1.vi.restoreAllMocks();
});
(0, vitest_1.test)('instrumented', async () => {
class MyClass {
constructor() {
this.value1 = 42;
this.value2 = 43;
}
syncMethod() {
return this.value1;
}
syncMethodWithArgumentFormatter(id) {
return this.value1;
}
syncMethodWithSingleArgument(id) {
return this.value1;
}
async asyncMethod() {
await (0, sleep_1.default)(5);
return this.value2;
}
async asyncMethodWithArgument(id) {
await (0, sleep_1.default)(5);
return this.value2;
}
async asyncMethodWithArgumentFormat(id, _) {
await (0, sleep_1.default)(5);
return this.value2;
}
async asyncMethodWithArgumentFormatAndResult(id, _) {
await (0, sleep_1.default)(5);
return this.value2;
}
}
__decorate([
(0, instrumented_1.instrumented)(),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], MyClass.prototype, "syncMethod", null);
__decorate([
(0, instrumented_1.instrumented)({
argumentFormat: id => id,
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number]),
__metadata("design:returntype", void 0)
], MyClass.prototype, "syncMethodWithArgumentFormatter", null);
__decorate([
(0, instrumented_1.instrumented)({
singleArgument: true,
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number]),
__metadata("design:returntype", void 0)
], MyClass.prototype, "syncMethodWithSingleArgument", null);
__decorate([
(0, instrumented_1.instrumented)(),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], MyClass.prototype, "asyncMethod", null);
__decorate([
(0, instrumented_1.instrumented)(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number]),
__metadata("design:returntype", Promise)
], MyClass.prototype, "asyncMethodWithArgument", null);
__decorate([
(0, instrumented_1.instrumented)({
argumentFormat: id => ({ id }),
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number, Object]),
__metadata("design:returntype", Promise)
], MyClass.prototype, "asyncMethodWithArgumentFormat", null);
__decorate([
(0, instrumented_1.instrumented)({
argumentFormat: id => ({ id }),
includeResult: true,
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number, Object]),
__metadata("design:returntype", Promise)
], MyClass.prototype, "asyncMethodWithArgumentFormatAndResult", null);
const object = new MyClass();
(0, vitest_1.expect)(object.syncMethod()).toBe(42);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'syncMethod',
args: [],
duration: vitest_1.expect.any(Number),
});
(0, vitest_1.expect)(object.syncMethodWithArgumentFormatter(6)).toBe(42);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'syncMethodWithArgumentFormatter',
args: 6,
duration: vitest_1.expect.any(Number),
});
(0, vitest_1.expect)(object.syncMethodWithSingleArgument(6)).toBe(42);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'syncMethodWithSingleArgument',
args: 6,
duration: vitest_1.expect.any(Number),
});
(0, vitest_1.expect)(await object.asyncMethod()).toBe(43);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'asyncMethod',
args: [],
duration: vitest_1.expect.any(Number),
});
(0, vitest_1.expect)(await object.asyncMethodWithArgument(2)).toBe(43);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'asyncMethodWithArgument',
args: [2],
duration: vitest_1.expect.any(Number),
});
(0, vitest_1.expect)(await object.asyncMethodWithArgumentFormat(3, {})).toBe(43);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'asyncMethodWithArgumentFormat',
args: { id: 3 },
duration: vitest_1.expect.any(Number),
});
(0, vitest_1.expect)(await object.asyncMethodWithArgumentFormatAndResult(3, {})).toBe(43);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'asyncMethodWithArgumentFormatAndResult',
args: { id: 3 },
result: 43,
duration: vitest_1.expect.any(Number),
});
});
(0, vitest_1.test)('minDuration no log', async () => {
class MyClass {
constructor() {
this.value2 = 43;
}
async asyncMethodThatRunsFor20Mills() {
await (0, sleep_1.default)(20);
return this.value2;
}
async asyncMethodThatRunsFor0Mills() {
return this.value2;
}
}
__decorate([
(0, instrumented_1.instrumented)({
minDuration: 5,
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], MyClass.prototype, "asyncMethodThatRunsFor20Mills", null);
__decorate([
(0, instrumented_1.instrumented)({
minDuration: 5,
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], MyClass.prototype, "asyncMethodThatRunsFor0Mills", null);
const object = new MyClass();
(0, vitest_1.expect)(await object.asyncMethodThatRunsFor20Mills()).toBe(43);
(0, vitest_1.expect)(log_1.log).not.toHaveBeenCalled();
(0, vitest_1.expect)(await object.asyncMethodThatRunsFor0Mills()).toBe(43);
(0, vitest_1.expect)(log_1.log).not.toHaveBeenCalled();
});
(0, vitest_1.test)('minDuration log', async () => {
class MyClass {
constructor() {
this.value2 = 43;
}
async asyncMethodThatRunsFor20Mills() {
await (0, sleep_1.default)(20);
return this.value2;
}
}
__decorate([
(0, instrumented_1.instrumented)({
minDuration: 0.001,
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], MyClass.prototype, "asyncMethodThatRunsFor20Mills", null);
const object = new MyClass();
(0, vitest_1.expect)(await object.asyncMethodThatRunsFor20Mills()).toBe(43);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'asyncMethodThatRunsFor20Mills',
args: [],
duration: vitest_1.expect.any(Number),
});
});
(0, vitest_1.test)('maxDuration log', async () => {
class MyClass {
constructor() {
this.value2 = 43;
}
async asyncMethodThatRunsFor20Mills() {
await (0, sleep_1.default)(20);
return this.value2;
}
}
__decorate([
(0, instrumented_1.instrumented)({
maxDuration: 0.001,
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], MyClass.prototype, "asyncMethodThatRunsFor20Mills", null);
const object = new MyClass();
(0, vitest_1.expect)(await object.asyncMethodThatRunsFor20Mills()).toBe(43);
(0, vitest_1.expect)(log_1.log).toBeCalledWith({
source: 'MyClass',
event: 'asyncMethodThatRunsFor20Mills',
stage: 'timeout',
args: [],
duration: vitest_1.expect.any(Number),
});
});