import { datatype } from 'faker' import { RedisService } from './redis.service' jest.mock('redis', () => ({ createClient: () => ({ on: jest.fn(), set: jest.fn((_a, _b, callback) => callback(null, true)), get: jest.fn((_a, callback) => callback(null, true)), }), })) describe('RedisService', () => { let subject: RedisService let isActive: boolean beforeAll(() => { globalThis.secret = { redis: { url: '', }, } as any subject = new RedisService() subject.onModuleInit() }) beforeEach(() => { Object.defineProperty(subject, 'isActive', { get: () => isActive ?? true, configurable: true }) }) afterEach(() => { jest.clearAllMocks() }) describe('#set', () => { const key = datatype.uuid() const value = datatype.uuid() it('calls redis set function', async () => { await subject.set(key, value) expect(subject['_client'].set).toBeCalledWith(key, value, expect.anything()) }) describe('when is inactive', () => { beforeAll(() => { isActive = false }) afterAll(() => { isActive = true }) it('does not call redis set function', async () => { await subject.set(key, value) expect(subject['_client'].set).not.toBeCalled() }) }) }) describe('#get', () => { const key = datatype.uuid() it('calls redis get function', async () => { await subject.get(key) expect(subject['_client'].get).toBeCalledWith(key, expect.anything()) }) describe('when is inactive', () => { beforeAll(() => { isActive = false }) afterAll(() => { isActive = true }) it('does not calls redis get function', async () => { await subject.get(key) expect(subject['_client'].get).not.toBeCalled() }) }) }) })