diff --git a/src/tui/components/CrossReferencePanel.test.ts b/src/tui/components/CrossReferencePanel.test.ts index 9e45b78..b398c63 100644 --- a/src/tui/components/CrossReferencePanel.test.ts +++ b/src/tui/components/CrossReferencePanel.test.ts @@ -63,29 +63,33 @@ vi.mock('../utils/colors.js', () => ({ }, })); -// Mock crossReferenceManager module - define everything inline to avoid hoisting issues +// Mock crossReferenceManager module - use vi.hoisted() to avoid hoisting issues vi.mock('../../crossReferenceManager.js', () => { - let mockManagerInstance: any = null; + const { MockCrossReferenceManager, MockConstructor } = vi.hoisted(() => { + let mockManagerInstance: any = null; - class MockCrossReferenceManager { - getEntity = vi.fn(function() { return null; }); - getLinksForEntity = vi.fn(function() { return []; }); - getStats = vi.fn(function() { return ({ - totalLinks: 0, - totalEntities: 0, - byRelationship: {}, - byEntityType: {}, - mostLinked: [], - recentLinks: [], - });}); - findPath = vi.fn(function() { return null; }); - } - - const MockConstructor = vi.fn(function() { - if (!mockManagerInstance) { - mockManagerInstance = new MockCrossReferenceManager(); + class MockCrossReferenceManager { + getEntity = vi.fn(function() { return null; }); + getLinksForEntity = vi.fn(function() { return []; }); + getStats = vi.fn(function() { return ({ + totalLinks: 0, + totalEntities: 0, + byRelationship: {}, + byEntityType: {}, + mostLinked: [], + recentLinks: [], + });}); + findPath = vi.fn(function() { return null; }); } - return mockManagerInstance; + + const MockConstructor = vi.fn(function() { + if (!mockManagerInstance) { + mockManagerInstance = new MockCrossReferenceManager(); + } + return mockManagerInstance; + }); + + return { MockCrossReferenceManager, MockConstructor }; }); return { diff --git a/src/tui/components/WorkerAnalyticsPanel.test.ts b/src/tui/components/WorkerAnalyticsPanel.test.ts index 3b47040..2af6fee 100644 --- a/src/tui/components/WorkerAnalyticsPanel.test.ts +++ b/src/tui/components/WorkerAnalyticsPanel.test.ts @@ -71,19 +71,23 @@ vi.mock('../utils/colors.js', () => ({ }, })); -// Mock workerAnalytics module - define everything inline to avoid hoisting issues +// Mock workerAnalytics module - use vi.hoisted() to avoid hoisting issues vi.mock('../../workerAnalytics.js', () => { - class MockWorkerAnalytics { - compareWorkers = vi.fn(() => ({ - worker1: { workerId: 'w-1', beadsCompleted: 10, beadsPerHour: 5, avgCompletionTimeMs: 1000, errorRate: 0.1, costPerBead: 0.5, totalCostUsd: 5, efficiencyScore: 0.8, activeTimeMs: 10000, idlePercentage: 0.2, errorCount: 1, totalTokens: 1000, trend: undefined }, - worker2: { workerId: 'w-2', beadsCompleted: 15, beadsPerHour: 7, avgCompletionTimeMs: 800, errorRate: 0.05, costPerBead: 0.3, totalCostUsd: 4.5, efficiencyScore: 0.9, activeTimeMs: 15000, idlePercentage: 0.1, errorCount: 0, totalTokens: 900, trend: undefined }, - differences: { beadsCompleted: -5, beadsPerHour: -2, avgCompletionTimeMs: 200, errorRate: 0.05, costPerBead: 0.2, efficiencyScore: -0.1, activeTimeMs: -5000, idlePercentage: 0.1, totalCostUsd: 0.5, totalTokens: 100 }, - percentDifferences: { beadsCompleted: -33.3, beadsPerHour: -28.6, avgCompletionTimeMs: 25, errorRate: 100, costPerBead: 66.7, efficiencyScore: -12.5, activeTimeMs: -33.3, idlePercentage: 100, totalCostUsd: 11.1, totalTokens: 11.1 }, - betterWorker: { beadsCompleted: 'worker2', beadsPerHour: 'worker2', avgCompletionTimeMs: 'worker2', errorRate: 'worker2', costPerBead: 'worker2', efficiencyScore: 'worker2', activeTimeMs: 'worker2', idlePercentage: 'worker2', totalCostUsd: 'worker2' }, - score: { worker1: 0, worker2: 9 }, - overallWinner: 'worker2', - })); - } + const { MockWorkerAnalytics } = vi.hoisted(() => { + class MockWorkerAnalytics { + compareWorkers = vi.fn(() => ({ + worker1: { workerId: 'w-1', beadsCompleted: 10, beadsPerHour: 5, avgCompletionTimeMs: 1000, errorRate: 0.1, costPerBead: 0.5, totalCostUsd: 5, efficiencyScore: 0.8, activeTimeMs: 10000, idlePercentage: 0.2, errorCount: 1, totalTokens: 1000, trend: undefined }, + worker2: { workerId: 'w-2', beadsCompleted: 15, beadsPerHour: 7, avgCompletionTimeMs: 800, errorRate: 0.05, costPerBead: 0.3, totalCostUsd: 4.5, efficiencyScore: 0.9, activeTimeMs: 15000, idlePercentage: 0.1, errorCount: 0, totalTokens: 900, trend: undefined }, + differences: { beadsCompleted: -5, beadsPerHour: -2, avgCompletionTimeMs: 200, errorRate: 0.05, costPerBead: 0.2, efficiencyScore: -0.1, activeTimeMs: -5000, idlePercentage: 0.1, totalCostUsd: 0.5, totalTokens: 100 }, + percentDifferences: { beadsCompleted: -33.3, beadsPerHour: -28.6, avgCompletionTimeMs: 25, errorRate: 100, costPerBead: 66.7, efficiencyScore: -12.5, activeTimeMs: -33.3, idlePercentage: 100, totalCostUsd: 11.1, totalTokens: 11.1 }, + betterWorker: { beadsCompleted: 'worker2', beadsPerHour: 'worker2', avgCompletionTimeMs: 'worker2', errorRate: 'worker2', costPerBead: 'worker2', efficiencyScore: 'worker2', activeTimeMs: 'worker2', idlePercentage: 'worker2', totalCostUsd: 'worker2' }, + score: { worker1: 0, worker2: 9 }, + overallWinner: 'worker2', + })); + } + + return { MockWorkerAnalytics }; + }); return { WorkerAnalytics: MockWorkerAnalytics,