UNPKG

core-mvc

Version:

Simple but powerful MVC framework for NodeJS.

250 lines (249 loc) 9.46 kB
"use strict"; 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), }); });