nestjs-request-deduplication
Version:
[](https://www.npmjs.com/package/nestjs-request-deduplication) [](https://gith
90 lines (89 loc) • 5.15 kB
JavaScript
;
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,
}),
]));
});
});
});