UNPKG

nestjs-request-deduplication

Version:

[![npm version](https://badge.fury.io/js/nestjs-request-deduplication.svg)](https://www.npmjs.com/package/nestjs-request-deduplication) [![CI](https://github.com/daniyel/nestjs-request-deduplication/actions/workflows/pr-checks.yml/badge.svg)](https://gith

90 lines (89 loc) 5.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); require("reflect-metadata"); const testing_1 = require("@nestjs/testing"); const request_deduplication_module_1 = require("./request-deduplication.module"); const services_1 = require("./services"); const interceptors_1 = require("./interceptors"); const constants_1 = require("./constants"); const core_1 = require("@nestjs/core"); const interfaces_1 = require("./interfaces"); const constants_2 = require("@nestjs/common/constants"); describe('RequestDeduplicationModule', () => { describe('forRoot', () => { it('should provide default options when minimal config is provided', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const module = yield testing_1.Test.createTestingModule({ imports: [request_deduplication_module_1.RequestDeduplicationModule.forRoot({})], }).compile(); const options = module.get(constants_1.REQUEST_DEDUPLICATION_MODULE_OPTIONS); expect(options).toEqual({ storage: interfaces_1.StorageType.MEMORY, ttl: 1000, }); })); it('should merge provided options with defaults for Redis', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const customOptions = { storage: interfaces_1.StorageType.REDIS, ttl: 2000, redisConfig: { url: 'redis://localhost:6379', }, }; const module = yield testing_1.Test.createTestingModule({ imports: [request_deduplication_module_1.RequestDeduplicationModule.forRoot(customOptions)], }).compile(); const options = module.get(constants_1.REQUEST_DEDUPLICATION_MODULE_OPTIONS); expect(options).toEqual(customOptions); })); it('should merge provided options with defaults for Memcached', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const customOptions = { storage: interfaces_1.StorageType.MEMCACHED, ttl: 3000, memcachedConfig: { uri: 'localhost:11211', options: { retries: 3 }, }, }; const module = yield testing_1.Test.createTestingModule({ imports: [request_deduplication_module_1.RequestDeduplicationModule.forRoot(customOptions)], }).compile(); const options = module.get(constants_1.REQUEST_DEDUPLICATION_MODULE_OPTIONS); expect(options).toEqual(customOptions); })); it('should provide required dependencies', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const module = yield testing_1.Test.createTestingModule({ imports: [request_deduplication_module_1.RequestDeduplicationModule.forRoot({})], }).compile(); expect(module.get(services_1.RequestDeduplicationService)).toBeDefined(); expect(module.get(interceptors_1.RequestDeduplicationInterceptor)).toBeDefined(); expect(module.get(core_1.Reflector)).toBeDefined(); })); it('should properly inject dependencies into interceptor', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const module = yield testing_1.Test.createTestingModule({ imports: [request_deduplication_module_1.RequestDeduplicationModule.forRoot({})], }).compile(); const interceptor = module.get(interceptors_1.RequestDeduplicationInterceptor); // Verify the interceptor was constructed with the correct dependencies expect(interceptor).toHaveProperty('requestDeduplicationService'); expect(interceptor).toHaveProperty('options'); expect(interceptor).toHaveProperty('reflector'); })); it('should be registered as global module', () => { const moduleMetadata = Reflect.getMetadata(constants_2.GLOBAL_MODULE_METADATA, request_deduplication_module_1.RequestDeduplicationModule); const moduleDefinition = Reflect.getMetadata('modules', request_deduplication_module_1.RequestDeduplicationModule); const isGlobalModule = (moduleDefinition === null || moduleDefinition === void 0 ? void 0 : moduleDefinition.global) || moduleMetadata === true; expect(isGlobalModule).toBe(true); }); it('should export all required providers', () => { const dynamicModule = request_deduplication_module_1.RequestDeduplicationModule.forRoot({}); expect(dynamicModule.exports).toContain(services_1.RequestDeduplicationService); expect(dynamicModule.exports).toContain(interceptors_1.RequestDeduplicationInterceptor); expect(dynamicModule.exports).toEqual(expect.arrayContaining([ expect.objectContaining({ provide: constants_1.REQUEST_DEDUPLICATION_MODULE_OPTIONS, }), ])); }); }); });