@nest-boot/schedule 7.0.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
File without changes
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ describe("public API", () => {
36
+ it("should export schedule module APIs", async () => {
37
+ const api = await Promise.resolve().then(() => __importStar(require(".")));
38
+ expect(api.ScheduleModule).toBeDefined();
39
+ expect(api.ScheduleRegistry).toBeDefined();
40
+ expect(api.Schedule).toBeDefined();
41
+ expect(api.Cron).toBeDefined();
42
+ expect(api.Interval).toBeDefined();
43
+ });
44
+ });
45
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,GAAG,GAAG,wDAAa,GAAG,GAAC,CAAC;QAE9B,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ import "reflect-metadata";
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ require("reflect-metadata");
13
+ const schedule_decorator_1 = require("./schedule.decorator");
14
+ const schedule_module_definition_1 = require("./schedule.module-definition");
15
+ function getMethod(prototype, name) {
16
+ return Object.getOwnPropertyDescriptor(prototype, name)?.value;
17
+ }
18
+ describe("schedule decorators", () => {
19
+ class ExampleSchedules {
20
+ explicit() {
21
+ return undefined;
22
+ }
23
+ cron() {
24
+ return undefined;
25
+ }
26
+ interval() {
27
+ return undefined;
28
+ }
29
+ }
30
+ __decorate([
31
+ (0, schedule_decorator_1.Schedule)({
32
+ type: "cron",
33
+ value: "0 1 * * *",
34
+ timezone: "Asia/Shanghai",
35
+ }),
36
+ __metadata("design:type", Function),
37
+ __metadata("design:paramtypes", []),
38
+ __metadata("design:returntype", void 0)
39
+ ], ExampleSchedules.prototype, "explicit", null);
40
+ __decorate([
41
+ (0, schedule_decorator_1.Cron)("* * * * *", {
42
+ attempts: 2,
43
+ timezone: "UTC",
44
+ }),
45
+ __metadata("design:type", Function),
46
+ __metadata("design:paramtypes", []),
47
+ __metadata("design:returntype", void 0)
48
+ ], ExampleSchedules.prototype, "cron", null);
49
+ __decorate([
50
+ (0, schedule_decorator_1.Interval)("5000", {
51
+ removeOnComplete: true,
52
+ }),
53
+ __metadata("design:type", Function),
54
+ __metadata("design:paramtypes", []),
55
+ __metadata("design:returntype", void 0)
56
+ ], ExampleSchedules.prototype, "interval", null);
57
+ it("should attach explicit schedule metadata", () => {
58
+ expect(Reflect.getMetadata(schedule_module_definition_1.SCHEDULE_METADATA_KEY, getMethod(ExampleSchedules.prototype, "explicit"))).toEqual({
59
+ type: "cron",
60
+ value: "0 1 * * *",
61
+ timezone: "Asia/Shanghai",
62
+ });
63
+ });
64
+ it("should build cron and interval metadata with optional job options", () => {
65
+ expect(Reflect.getMetadata(schedule_module_definition_1.SCHEDULE_METADATA_KEY, getMethod(ExampleSchedules.prototype, "cron"))).toEqual({
66
+ attempts: 2,
67
+ timezone: "UTC",
68
+ type: "cron",
69
+ value: "* * * * *",
70
+ });
71
+ expect(Reflect.getMetadata(schedule_module_definition_1.SCHEDULE_METADATA_KEY, getMethod(ExampleSchedules.prototype, "interval"))).toEqual({
72
+ removeOnComplete: true,
73
+ type: "interval",
74
+ value: "5000",
75
+ });
76
+ });
77
+ it("should default omitted decorator options to an empty object", () => {
78
+ class Defaults {
79
+ cron() {
80
+ return undefined;
81
+ }
82
+ interval() {
83
+ return undefined;
84
+ }
85
+ }
86
+ __decorate([
87
+ (0, schedule_decorator_1.Cron)("0 * * * *"),
88
+ __metadata("design:type", Function),
89
+ __metadata("design:paramtypes", []),
90
+ __metadata("design:returntype", void 0)
91
+ ], Defaults.prototype, "cron", null);
92
+ __decorate([
93
+ (0, schedule_decorator_1.Interval)(1000),
94
+ __metadata("design:type", Function),
95
+ __metadata("design:paramtypes", []),
96
+ __metadata("design:returntype", void 0)
97
+ ], Defaults.prototype, "interval", null);
98
+ expect(Reflect.getMetadata(schedule_module_definition_1.SCHEDULE_METADATA_KEY, getMethod(Defaults.prototype, "cron"))).toEqual({
99
+ type: "cron",
100
+ value: "0 * * * *",
101
+ });
102
+ expect(Reflect.getMetadata(schedule_module_definition_1.SCHEDULE_METADATA_KEY, getMethod(Defaults.prototype, "interval"))).toEqual({
103
+ type: "interval",
104
+ value: 1000,
105
+ });
106
+ });
107
+ });
108
+ //# sourceMappingURL=schedule.decorator.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.decorator.spec.js","sourceRoot":"","sources":["../src/schedule.decorator.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAA0B;AAE1B,6DAAgE;AAChE,6EAAqE;AAErE,SAAS,SAAS,CAAC,SAAiB,EAAE,IAAY;IAChD,OAAO,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC;AACjE,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,MAAM,gBAAgB;QAMpB,QAAQ;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;QAMD,IAAI;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAKD,QAAQ;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;KACF;IAlBC;QALC,IAAA,6BAAQ,EAAC;YACR,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,eAAe;SAC1B,CAAC;;;;oDAGD;IAMD;QAJC,IAAA,yBAAI,EAAC,WAAW,EAAE;YACjB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC;;;;gDAGD;IAKD;QAHC,IAAA,6BAAQ,EAAC,MAAM,EAAE;YAChB,gBAAgB,EAAE,IAAI;SACvB,CAAC;;;;oDAGD;IAGH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CACJ,OAAO,CAAC,WAAW,CACjB,kDAAqB,EACrB,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAClD,CACF,CAAC,OAAO,CAAC;YACR,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CACJ,OAAO,CAAC,WAAW,CACjB,kDAAqB,EACrB,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAC9C,CACF,CAAC,OAAO,CAAC;YACR,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,MAAM,CACJ,OAAO,CAAC,WAAW,CACjB,kDAAqB,EACrB,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAClD,CACF,CAAC,OAAO,CAAC;YACR,gBAAgB,EAAE,IAAI;YACtB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,QAAQ;YAEZ,IAAI;gBACF,OAAO,SAAS,CAAC;YACnB,CAAC;YAGD,QAAQ;gBACN,OAAO,SAAS,CAAC;YACnB,CAAC;SACF;QARC;YADC,IAAA,yBAAI,EAAC,WAAW,CAAC;;;;4CAGjB;QAGD;YADC,IAAA,6BAAQ,EAAC,IAAI,CAAC;;;;gDAGd;QAGH,MAAM,CACJ,OAAO,CAAC,WAAW,CACjB,kDAAqB,EACrB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CACtC,CACF,CAAC,OAAO,CAAC;YACR,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,MAAM,CACJ,OAAO,CAAC,WAAW,CACjB,kDAAqB,EACrB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAC1C,CACF,CAAC,OAAO,CAAC;YACR,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- import "dotenv/config";
1
+ export {};
@@ -1,39 +1,91 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- require("dotenv/config");
4
- const bullmq_1 = require("@nest-boot/bullmq");
5
- const testing_1 = require("@nestjs/testing");
6
- const _1 = require(".");
7
- describe("BullModule", () => {
8
- let app;
9
- it(`ScheduleModule`, async () => {
10
- const moduleRef = await testing_1.Test.createTestingModule({
11
- imports: [bullmq_1.BullModule, _1.ScheduleModule],
12
- }).compile();
13
- app = moduleRef.createNestApplication();
14
- await app.init();
15
- await app.close();
3
+ const common_1 = require("@nestjs/common");
4
+ const constants_1 = require("@nestjs/common/constants");
5
+ const core_1 = require("@nestjs/core");
6
+ let mockRegisterQueueAsyncOptions;
7
+ const mockQueueModule = {
8
+ module: class QueueModule {
9
+ },
10
+ };
11
+ const mockRegisterQueueAsync = jest.fn((options) => {
12
+ mockRegisterQueueAsyncOptions = options;
13
+ return mockQueueModule;
14
+ });
15
+ const mockProcessorDecorator = jest.fn();
16
+ const mockProcessor = jest.fn(() => mockProcessorDecorator);
17
+ jest.mock("@nest-boot/bullmq", () => ({
18
+ BullModule: {
19
+ registerQueueAsync: mockRegisterQueueAsync,
20
+ },
21
+ InjectQueue: jest.fn(() => jest.fn()),
22
+ Processor: mockProcessor,
23
+ WorkerHost: class WorkerHost {
24
+ constructor() {
25
+ this.worker = {
26
+ concurrency: 1,
27
+ run: jest.fn().mockResolvedValue(undefined),
28
+ };
29
+ }
30
+ },
31
+ }));
32
+ const schedule_module_1 = require("./schedule.module");
33
+ const schedule_module_definition_1 = require("./schedule.module-definition");
34
+ const schedule_processor_1 = require("./schedule.processor");
35
+ const schedule_registry_1 = require("./schedule.registry");
36
+ describe("ScheduleModule", () => {
37
+ beforeEach(() => {
38
+ jest.clearAllMocks();
39
+ });
40
+ it("should expose configurable root registrations", () => {
41
+ const options = {
42
+ concurrency: 3,
43
+ };
44
+ const useFactory = () => options;
45
+ const dynamicModule = schedule_module_1.ScheduleModule.forRoot(options);
46
+ const asyncModule = schedule_module_1.ScheduleModule.forRootAsync({
47
+ useFactory,
48
+ });
49
+ expect(dynamicModule.module).toBe(schedule_module_1.ScheduleModule);
50
+ expect(dynamicModule.providers).toEqual(expect.arrayContaining([
51
+ {
52
+ provide: schedule_module_definition_1.BASE_MODULE_OPTIONS_TOKEN,
53
+ useValue: options,
54
+ },
55
+ ]));
56
+ expect(asyncModule.providers).toEqual(expect.arrayContaining([
57
+ {
58
+ inject: [],
59
+ provide: schedule_module_definition_1.BASE_MODULE_OPTIONS_TOKEN,
60
+ useFactory,
61
+ },
62
+ ]));
16
63
  });
17
- it(`ScheduleModule.forRoot`, async () => {
18
- const moduleRef = await testing_1.Test.createTestingModule({
19
- imports: [bullmq_1.BullModule, _1.ScheduleModule.forRoot({})],
20
- }).compile();
21
- app = moduleRef.createNestApplication();
22
- await app.init();
23
- await app.close();
64
+ it("should provide options, queue registration, and schedule services", () => {
65
+ const imports = Reflect.getMetadata(constants_1.MODULE_METADATA.IMPORTS, schedule_module_1.ScheduleModule);
66
+ const providers = Reflect.getMetadata(constants_1.MODULE_METADATA.PROVIDERS, schedule_module_1.ScheduleModule);
67
+ const exports = Reflect.getMetadata(constants_1.MODULE_METADATA.EXPORTS, schedule_module_1.ScheduleModule);
68
+ const optionsProvider = providers.find((provider) => provider.provide === schedule_module_definition_1.MODULE_OPTIONS_TOKEN);
69
+ expect(imports).toEqual([core_1.DiscoveryModule, mockQueueModule]);
70
+ expect(providers).toEqual(expect.arrayContaining([common_1.Logger, schedule_registry_1.ScheduleRegistry, schedule_processor_1.ScheduleProcessor]));
71
+ expect(exports).toEqual([schedule_module_definition_1.MODULE_OPTIONS_TOKEN]);
72
+ expect(optionsProvider.useFactory(undefined)).toEqual({});
73
+ expect(optionsProvider.useFactory({
74
+ autorun: false,
75
+ })).toEqual({
76
+ autorun: false,
77
+ });
24
78
  });
25
- it(`ScheduleModule.forRootAsync`, async () => {
26
- const moduleRef = await testing_1.Test.createTestingModule({
27
- imports: [
28
- bullmq_1.BullModule,
29
- _1.ScheduleModule.forRootAsync({
30
- useFactory: () => ({}),
31
- }),
32
- ],
33
- }).compile();
34
- app = moduleRef.createNestApplication();
35
- await app.init();
36
- await app.close();
79
+ it("should register the schedule queue from module options", () => {
80
+ expect(mockRegisterQueueAsyncOptions).toEqual(expect.objectContaining({
81
+ inject: [schedule_module_definition_1.MODULE_OPTIONS_TOKEN],
82
+ name: "schedule",
83
+ }));
84
+ expect(mockRegisterQueueAsyncOptions.useFactory({
85
+ concurrency: 2,
86
+ })).toEqual({
87
+ concurrency: 2,
88
+ });
37
89
  });
38
90
  });
39
91
  //# sourceMappingURL=schedule.module.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.module.spec.js","sourceRoot":"","sources":["../src/schedule.module.spec.ts"],"names":[],"mappings":";;AAAA,yBAAuB;AAEvB,8CAA+C;AAE/C,6CAAuC;AAEvC,wBAAmC;AAEnC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,GAAqB,CAAC;IAE1B,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,SAAS,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC/C,OAAO,EAAE,CAAC,mBAAU,EAAE,iBAAc,CAAC;SACtC,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,GAAG,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;QACxC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,SAAS,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC/C,OAAO,EAAE,CAAC,mBAAU,EAAE,iBAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAClD,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,GAAG,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;QACxC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,SAAS,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC/C,OAAO,EAAE;gBACP,mBAAU;gBACV,iBAAc,CAAC,YAAY,CAAC;oBAC1B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;iBACvB,CAAC;aACH;SACF,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,GAAG,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;QACxC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"schedule.module.spec.js","sourceRoot":"","sources":["../src/schedule.module.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const mockProcessorDecorator = jest.fn();
37
+ const mockProcessor = jest.fn(() => mockProcessorDecorator);
38
+ jest.mock("@nest-boot/bullmq", () => ({
39
+ InjectQueue: jest.fn(() => jest.fn()),
40
+ Processor: mockProcessor,
41
+ WorkerHost: class WorkerHost {
42
+ constructor() {
43
+ this.worker = {
44
+ concurrency: 1,
45
+ run: jest.fn().mockResolvedValue(undefined),
46
+ };
47
+ }
48
+ },
49
+ }));
50
+ const testing_1 = require("@nestjs/testing");
51
+ const schedule_module_definition_1 = require("./schedule.module-definition");
52
+ const schedule_processor_1 = require("./schedule.processor");
53
+ const schedule_registry_1 = require("./schedule.registry");
54
+ describe("ScheduleProcessor", () => {
55
+ const createRegistry = (entry) => {
56
+ const get = jest.fn(() => entry);
57
+ return {
58
+ get,
59
+ registry: {
60
+ get,
61
+ },
62
+ };
63
+ };
64
+ it("should apply the schedule processor decorator", () => {
65
+ expect(mockProcessor).toHaveBeenCalledWith("schedule", {
66
+ autorun: false,
67
+ });
68
+ expect(mockProcessorDecorator).toHaveBeenCalledWith(schedule_processor_1.ScheduleProcessor);
69
+ });
70
+ it("should invoke the registered schedule handler for the job name", async () => {
71
+ const handler = jest.fn().mockResolvedValue(undefined);
72
+ const { get, registry } = createRegistry({
73
+ handler,
74
+ options: {
75
+ type: "cron",
76
+ value: "* * * * *",
77
+ },
78
+ });
79
+ const processor = await createProcessor(registry);
80
+ await processor.process({
81
+ name: "Tasks.run",
82
+ });
83
+ expect(get).toHaveBeenCalledWith("Tasks.run");
84
+ expect(handler).toHaveBeenCalledTimes(1);
85
+ });
86
+ it("should ignore jobs with no registered handler", async () => {
87
+ const { get, registry } = createRegistry();
88
+ const processor = await createProcessor(registry);
89
+ await expect(processor.process({
90
+ name: "Missing.run",
91
+ })).resolves.toBeUndefined();
92
+ expect(get).toHaveBeenCalledWith("Missing.run");
93
+ });
94
+ it("should configure concurrency and start the worker by default", async () => {
95
+ const processor = await createProcessor(createRegistry().registry, {
96
+ concurrency: 4,
97
+ });
98
+ processor.onApplicationBootstrap();
99
+ expect(processor.worker.concurrency).toBe(4);
100
+ expect(processor.worker.run).toHaveBeenCalledTimes(1);
101
+ });
102
+ it("should skip autorun when disabled", async () => {
103
+ const processor = await createProcessor(createRegistry().registry, {
104
+ autorun: false,
105
+ });
106
+ processor.onApplicationBootstrap();
107
+ expect(processor.worker.concurrency).toBe(1);
108
+ expect(processor.worker.run).not.toHaveBeenCalled();
109
+ });
110
+ it("should swallow worker run errors", async () => {
111
+ const processor = await createProcessor(createRegistry().registry);
112
+ processor.worker.run.mockRejectedValueOnce(new Error("boom"));
113
+ expect(() => {
114
+ processor.onApplicationBootstrap();
115
+ }).not.toThrow();
116
+ await Promise.resolve();
117
+ expect(processor.worker.run).toHaveBeenCalledTimes(1);
118
+ });
119
+ it("should load decorator metadata fallback branches", async () => {
120
+ await jest.isolateModulesAsync(async () => {
121
+ jest.doMock("@nest-boot/bullmq", () => ({
122
+ InjectQueue: jest.fn(() => jest.fn()),
123
+ Processor: jest.fn(() => jest.fn()),
124
+ WorkerHost: class WorkerHost {
125
+ constructor() {
126
+ this.worker = {
127
+ concurrency: 1,
128
+ run: jest.fn().mockResolvedValue(undefined),
129
+ };
130
+ }
131
+ },
132
+ }));
133
+ jest.doMock("./schedule.registry", () => ({
134
+ ScheduleRegistry: undefined,
135
+ }));
136
+ const module = await Promise.resolve().then(() => __importStar(require("./schedule.processor")));
137
+ expect(module.ScheduleProcessor).toBeDefined();
138
+ });
139
+ await jest.isolateModulesAsync(async () => {
140
+ jest.doMock("@nest-boot/bullmq", () => ({
141
+ InjectQueue: jest.fn(() => jest.fn()),
142
+ Processor: jest.fn(() => jest.fn()),
143
+ WorkerHost: class WorkerHost {
144
+ constructor() {
145
+ this.worker = {
146
+ concurrency: 1,
147
+ run: jest.fn().mockResolvedValue(undefined),
148
+ };
149
+ }
150
+ },
151
+ }));
152
+ jest.doMock("./schedule-module-options.interface", () => ({
153
+ ScheduleModuleOptions: class ScheduleModuleOptions {
154
+ },
155
+ }));
156
+ const module = await Promise.resolve().then(() => __importStar(require("./schedule.processor")));
157
+ expect(module.ScheduleProcessor).toBeDefined();
158
+ });
159
+ });
160
+ });
161
+ async function createProcessor(registry, options) {
162
+ const providers = [
163
+ schedule_processor_1.ScheduleProcessor,
164
+ {
165
+ provide: schedule_registry_1.ScheduleRegistry,
166
+ useValue: registry,
167
+ },
168
+ ];
169
+ if (typeof options !== "undefined") {
170
+ providers.push({
171
+ provide: schedule_module_definition_1.MODULE_OPTIONS_TOKEN,
172
+ useValue: options,
173
+ });
174
+ }
175
+ const moduleRef = await testing_1.Test.createTestingModule({
176
+ providers,
177
+ }).compile();
178
+ return moduleRef.get(schedule_processor_1.ScheduleProcessor);
179
+ }
180
+ //# sourceMappingURL=schedule.processor.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.processor.spec.js","sourceRoot":"","sources":["../src/schedule.processor.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "reflect-metadata";