From 63e5b3d644465b20e4597c67e3380bf2d807babe Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Tue, 16 Dec 2025 09:17:53 +0900 Subject: [PATCH] fix unit tests --- .../test/unit/FetchInstanceMetadataService.ts | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/backend/test/unit/FetchInstanceMetadataService.ts b/packages/backend/test/unit/FetchInstanceMetadataService.ts index a97d85d1a9..d2c2dcf283 100644 --- a/packages/backend/test/unit/FetchInstanceMetadataService.ts +++ b/packages/backend/test/unit/FetchInstanceMetadataService.ts @@ -19,13 +19,24 @@ import { UtilityService } from '@/core/UtilityService.js'; import { IdService } from '@/core/IdService.js'; import { DI } from '@/di-symbols.js'; -function mockRedis() { - const hash = {} as any; - const set = vi.fn((key: string, value) => { - hash[key] = value; - return Promise.resolve('OK'); +function createMockRedis() { + const store = new Map(); + + const del = vi.fn((key: string) => { + const existed = store.delete(key); + return Promise.resolve(existed ? 1 : 0); }); - return set; + + const set = vi.fn((key: string, value: string, ...args: any[]) => { + const prev = store.get(key) ?? null; + store.set(key, value); + + // ioredis: SET key value ... GET => returns old value or null + const hasGet = args.some(a => typeof a === 'string' && a.toUpperCase() === 'GET'); + return Promise.resolve(hasGet ? prev : 'OK'); + }); + + return { set, del }; } describe('FetchInstanceMetadataService', () => { @@ -54,7 +65,7 @@ describe('FetchInstanceMetadataService', () => { } else if (token === FederatedInstanceService) { return { fetchOrRegister: vi.fn() }; } else if (token === DI.redis) { - return mockRedis; + return createMockRedis(); } return null; }) @@ -75,7 +86,6 @@ describe('FetchInstanceMetadataService', () => { }); test('Lock and update', async () => { - redisClient.set = mockRedis() as any; const now = Date.now(); federatedInstanceService.fetchOrRegister.mockResolvedValue({ infoUpdatedAt: { getTime: () => { return now - 10 * 1000 * 60 * 60 * 24; } } } as any); httpRequestService.getJson.mockImplementation(() => { throw Error(); }); @@ -90,7 +100,6 @@ describe('FetchInstanceMetadataService', () => { }); test('Lock and don\'t update', async () => { - redisClient.set = mockRedis() as any; const now = Date.now(); federatedInstanceService.fetchOrRegister.mockResolvedValue({ infoUpdatedAt: { getTime: () => now } } as any); httpRequestService.getJson.mockImplementation(() => { throw Error(); }); @@ -105,7 +114,6 @@ describe('FetchInstanceMetadataService', () => { }); test('Do nothing when lock not acquired', async () => { - redisClient.set = mockRedis() as any; const now = Date.now(); federatedInstanceService.fetchOrRegister.mockResolvedValue({ infoUpdatedAt: { getTime: () => now - 10 * 1000 * 60 * 60 * 24 } } as any); httpRequestService.getJson.mockImplementation(() => { throw Error(); }); @@ -121,7 +129,6 @@ describe('FetchInstanceMetadataService', () => { }); test('Do when lock not acquired but forced', async () => { - redisClient.set = mockRedis() as any; const now = Date.now(); federatedInstanceService.fetchOrRegister.mockResolvedValue({ infoUpdatedAt: { getTime: () => now - 10 * 1000 * 60 * 60 * 24 } } as any); httpRequestService.getJson.mockImplementation(() => { throw Error(); });