import path from 'path';
process.env.RUNBOOK_ROOT = path.resolve('tests/fixtures');
process.env.LLM_API_KEY = 'test-key'; // Enable LLM for testing
import { loadConfig } from '../../src/adapters/config.mjs';
import { createFsAdapter } from '../../src/adapters/fsio.mjs';
import { createIndexer } from '../../src/services/indexer.mjs';
import { createSearchService } from '../../src/services/searchService.mjs';
import { createLLMAdapter } from '../../src/adapters/llmAdapter.mjs';
import { createAnswerService } from '../../src/services/answerService.mjs';
import { createAnswerTool } from '../../src/mcp/tools/answer.mjs';
import { describe, test, expect, runTests } from '../unit/core/_harness.mjs';
const config = loadConfig(process.env);
const fsAdapter = createFsAdapter(config.root);
const indexer = createIndexer({ fsAdapter, config, logger:{ log:()=>{} } });
describe('us2:answer-integration', () => {
test('complete answer workflow with LLM', async () => {
const index = await indexer.buildIndex();
// Create services
const searchService = createSearchService({ index, config, logger:{ log:()=>{} } });
const llmAdapter = createLLMAdapter({ apiKey: 'test-key', logger:{ log:()=>{} } });
const answerService = createAnswerService({ searchService, llmAdapter, logger:{ log:()=>{} } });
// Create tool
const answerTool = createAnswerTool({ answerService, logger:{ log:()=>{} } });
// Test answer generation
const result = await answerTool.handler({
question: 'How do I restart a service?',
topK: 3,
useLLM: true
});
expect(result.question).toBe('How do I restart a service?');
expect(result.mode).toBe('online');
expect(result.summary !== null).toBe(true);
expect(Array.isArray(result.citations)).toBe(true);
expect(result.citations.length > 0).toBe(true);
expect(typeof result.metadata.llm_available).toBe('boolean');
});
test('graceful degradation to offline mode', async () => {
const index = await indexer.buildIndex();
const searchService = createSearchService({ index, config, logger:{ log:()=>{} } });
const answerService = createAnswerService({ searchService, llmAdapter: null, logger:{ log:()=>{} } });
const answerTool = createAnswerTool({ answerService, logger:{ log:()=>{} } });
const result = await answerTool.handler({
question: 'How do I restart a service?',
useLLM: false
});
expect(result.mode).toBe('offline');
expect(result.summary).toBe(null);
expect(Array.isArray(result.citations)).toBe(true);
expect(result.metadata.llm_available).toBe(false);
});
});
await runTests();