- ProviderHolder: mutable holder + listeners, indirection layer - AiWorker: constructor InferenceProvider → ProviderHolder this.provider.x → this.holder.get().x 전환 - HealthChecker: 동일 패턴 - src/main/index.ts: provider 를 ProviderHolder 로 감싸서 생성 - 기존 AiWorker / HealthChecker 테스트의 constructor 호출에 ProviderHolder wrap - 단위 +2 cases (ProviderHolder) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
31 lines
1.1 KiB
TypeScript
31 lines
1.1 KiB
TypeScript
import { describe, it, expect, vi } from 'vitest';
|
|
import { ProviderHolder } from '@main/ai/ProviderHolder.js';
|
|
import { LocalOllamaProvider } from '@main/ai/LocalOllamaProvider.js';
|
|
|
|
describe('ProviderHolder', () => {
|
|
it('replace() fires listener and get() returns new instance', () => {
|
|
const a = new LocalOllamaProvider({ endpoint: 'http://a:11434', model: 'm1' });
|
|
const b = new LocalOllamaProvider({ endpoint: 'http://b:11434', model: 'm2' });
|
|
const holder = new ProviderHolder(a);
|
|
const listener = vi.fn();
|
|
holder.onReplace(listener);
|
|
expect(holder.get()).toBe(a);
|
|
holder.replace(b);
|
|
expect(holder.get()).toBe(b);
|
|
expect(listener).toHaveBeenCalledWith(b);
|
|
});
|
|
|
|
it('multiple listeners all fire on replace()', () => {
|
|
const a = new LocalOllamaProvider({ model: 'm1' });
|
|
const b = new LocalOllamaProvider({ model: 'm2' });
|
|
const holder = new ProviderHolder(a);
|
|
const l1 = vi.fn();
|
|
const l2 = vi.fn();
|
|
holder.onReplace(l1);
|
|
holder.onReplace(l2);
|
|
holder.replace(b);
|
|
expect(l1).toHaveBeenCalledWith(b);
|
|
expect(l2).toHaveBeenCalledWith(b);
|
|
});
|
|
});
|