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

88 lines (87 loc) 4.62 kB
import { __awaiter } from "tslib"; import 'reflect-metadata'; import { Test } from '@nestjs/testing'; import { RequestDeduplicationModule } from './request-deduplication.module'; import { RequestDeduplicationService } from './services'; import { RequestDeduplicationInterceptor } from './interceptors'; import { REQUEST_DEDUPLICATION_MODULE_OPTIONS } from './constants'; import { Reflector } from '@nestjs/core'; import { StorageType } from './interfaces'; import { GLOBAL_MODULE_METADATA } from '@nestjs/common/constants'; describe('RequestDeduplicationModule', () => { describe('forRoot', () => { it('should provide default options when minimal config is provided', () => __awaiter(void 0, void 0, void 0, function* () { const module = yield Test.createTestingModule({ imports: [RequestDeduplicationModule.forRoot({})], }).compile(); const options = module.get(REQUEST_DEDUPLICATION_MODULE_OPTIONS); expect(options).toEqual({ storage: StorageType.MEMORY, ttl: 1000, }); })); it('should merge provided options with defaults for Redis', () => __awaiter(void 0, void 0, void 0, function* () { const customOptions = { storage: StorageType.REDIS, ttl: 2000, redisConfig: { url: 'redis://localhost:6379', }, }; const module = yield Test.createTestingModule({ imports: [RequestDeduplicationModule.forRoot(customOptions)], }).compile(); const options = module.get(REQUEST_DEDUPLICATION_MODULE_OPTIONS); expect(options).toEqual(customOptions); })); it('should merge provided options with defaults for Memcached', () => __awaiter(void 0, void 0, void 0, function* () { const customOptions = { storage: StorageType.MEMCACHED, ttl: 3000, memcachedConfig: { uri: 'localhost:11211', options: { retries: 3 }, }, }; const module = yield Test.createTestingModule({ imports: [RequestDeduplicationModule.forRoot(customOptions)], }).compile(); const options = module.get(REQUEST_DEDUPLICATION_MODULE_OPTIONS); expect(options).toEqual(customOptions); })); it('should provide required dependencies', () => __awaiter(void 0, void 0, void 0, function* () { const module = yield Test.createTestingModule({ imports: [RequestDeduplicationModule.forRoot({})], }).compile(); expect(module.get(RequestDeduplicationService)).toBeDefined(); expect(module.get(RequestDeduplicationInterceptor)).toBeDefined(); expect(module.get(Reflector)).toBeDefined(); })); it('should properly inject dependencies into interceptor', () => __awaiter(void 0, void 0, void 0, function* () { const module = yield Test.createTestingModule({ imports: [RequestDeduplicationModule.forRoot({})], }).compile(); const interceptor = module.get(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(GLOBAL_MODULE_METADATA, RequestDeduplicationModule); const moduleDefinition = Reflect.getMetadata('modules', 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 = RequestDeduplicationModule.forRoot({}); expect(dynamicModule.exports).toContain(RequestDeduplicationService); expect(dynamicModule.exports).toContain(RequestDeduplicationInterceptor); expect(dynamicModule.exports).toEqual(expect.arrayContaining([ expect.objectContaining({ provide: REQUEST_DEDUPLICATION_MODULE_OPTIONS, }), ])); }); }); });