nestjs-request-deduplication
Version:
[](https://www.npmjs.com/package/nestjs-request-deduplication) [](https://gith
70 lines (69 loc) • 3.1 kB
JavaScript
import { __awaiter } from "tslib";
import { RedisAdapter } from './redis.adapter';
import Keyv from 'keyv';
import KeyvRedis from '@keyv/redis';
jest.mock('keyv');
jest.mock('@keyv/redis');
describe('RedisAdapter', () => {
let adapter;
const mockOptions = {
redisConfig: {
url: 'localhost:6379',
},
};
beforeEach(() => {
jest.clearAllMocks();
adapter = new RedisAdapter(mockOptions);
});
describe('init', () => {
it('should initialize keyv with redis store', () => __awaiter(void 0, void 0, void 0, function* () {
yield adapter.init();
expect(KeyvRedis).toHaveBeenCalledWith(mockOptions.redisConfig);
expect(Keyv).toHaveBeenCalledWith({
store: expect.any(KeyvRedis),
namespace: 'request-deduplication',
});
}));
});
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('Redis connection error'));
Keyv.mockImplementation(() => ({ get: mockGet }));
yield adapter.init();
yield expect(adapter.get('test-key')).rejects.toThrow('Redis 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);
}));
});
describe('delete', () => {
it('should delete value from storage', () => __awaiter(void 0, void 0, void 0, function* () {
const mockDelete = jest.fn().mockResolvedValue(undefined);
Keyv.mockImplementation(() => ({ delete: mockDelete }));
yield adapter.init();
yield adapter.delete('test-key');
expect(mockDelete).toHaveBeenCalledWith('test-key');
}));
});
});