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.32 kB
import { __awaiter } from "tslib"; import { MemcachedAdapter } from './memcached.adapter'; import Keyv from 'keyv'; import KeyvMemcache from '@keyv/memcache'; jest.mock('keyv'); jest.mock('@keyv/memcache'); describe('MemcachedAdapter', () => { let adapter; const mockOptions = { memcachedConfig: { uri: 'localhost:11211', options: { retries: 3 }, }, }; beforeEach(() => { jest.clearAllMocks(); adapter = new MemcachedAdapter(mockOptions); }); describe('init', () => { it('should initialize keyv with memcached store', () => __awaiter(void 0, void 0, void 0, function* () { var _a; yield adapter.init(); expect(KeyvMemcache).toHaveBeenCalledWith((_a = mockOptions.memcachedConfig) === null || _a === void 0 ? void 0 : _a.uri, mockOptions.memcachedConfig); expect(Keyv).toHaveBeenCalledWith({ store: expect.any(KeyvMemcache), namespace: 'request-deduplication', }); })); it('should throw error if memcached config is missing', () => __awaiter(void 0, void 0, void 0, function* () { adapter = new MemcachedAdapter({}); yield expect(adapter.init()).rejects.toThrow('Memcached configuration is required'); })); }); describe('get', () => { it('should retrieve value from storage', () => __awaiter(void 0, void 0, void 0, function* () { const mockValue = { data: 'test' }; const mockGet = jest.fn().mockResolvedValue(mockValue); Keyv.mockImplementation(() => ({ get: mockGet })); yield adapter.init(); const result = yield adapter.get('test-key'); expect(mockGet).toHaveBeenCalledWith('test-key'); expect(result).toEqual(mockValue); })); it('should throw error when key not found', () => __awaiter(void 0, void 0, void 0, function* () { const mockGet = jest.fn().mockResolvedValue(undefined); Keyv.mockImplementation(() => ({ get: mockGet })); yield adapter.init(); yield expect(adapter.get('non-existent-key')).rejects.toThrow('Key non-existent-key not found'); })); it('should handle get errors', () => __awaiter(void 0, void 0, void 0, function* () { const mockGet = jest.fn().mockRejectedValue(new Error('Connection error')); Keyv.mockImplementation(() => ({ get: mockGet })); yield adapter.init(); yield expect(adapter.get('test-key')).rejects.toThrow('Connection error'); })); }); describe('set', () => { it('should store value with ttl', () => __awaiter(void 0, void 0, void 0, function* () { const mockSet = jest.fn().mockResolvedValue(undefined); Keyv.mockImplementation(() => ({ set: mockSet })); yield adapter.init(); yield adapter.set('test-key', 'test-value', 1000); expect(mockSet).toHaveBeenCalledWith('test-key', 'test-value', 1000); })); it('should handle set errors', () => __awaiter(void 0, void 0, void 0, function* () { const mockSet = jest.fn().mockRejectedValue(new Error('Storage error')); Keyv.mockImplementation(() => ({ set: mockSet })); yield adapter.init(); yield expect(adapter.set('test-key', 'test-value', 1000)).rejects.toThrow('Storage error'); })); }); describe('delete', () => { it('should delete value from storage', () => __awaiter(void 0, void 0, void 0, function* () { const mockDelete = jest.fn().mockResolvedValue(true); Keyv.mockImplementation(() => ({ delete: mockDelete })); yield adapter.init(); yield adapter.delete('test-key'); expect(mockDelete).toHaveBeenCalledWith('test-key'); })); it('should handle delete errors', () => __awaiter(void 0, void 0, void 0, function* () { const mockDelete = jest.fn().mockRejectedValue(new Error('Delete error')); Keyv.mockImplementation(() => ({ delete: mockDelete })); yield adapter.init(); yield expect(adapter.delete('test-key')).rejects.toThrow('Delete error'); })); }); });