mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-10-03 02:21:44 +00:00
77 lines
3 KiB
TypeScript
77 lines
3 KiB
TypeScript
import { beforeAll, describe, expect, it, vi } from 'vitest';
|
|
import { LocalBackend } from '../../src/mcp/local/local-backend.js';
|
|
import { listRegisteredRepos } from '../../src/storage/repo-manager.js';
|
|
import { withTestLbugDB } from '../helpers/test-indexed-db.js';
|
|
|
|
vi.mock('../../src/storage/repo-manager.js', () => ({
|
|
listRegisteredRepos: vi.fn().mockResolvedValue([]),
|
|
cleanupOldKuzuFiles: vi.fn().mockResolvedValue({ found: false, needsReindex: false }),
|
|
findSiblingClones: vi.fn().mockResolvedValue([]),
|
|
}));
|
|
|
|
const CONSUMER_ID = 'Property:src/Config.java:DirectValues.timeout';
|
|
const CONFIG_ID = 'Property:spring-config:application.properties:payment.timeout';
|
|
const SEED = [
|
|
`CREATE (p:\`Property\` {id:'${CONSUMER_ID}', name:'timeout', filePath:'src/Config.java', startLine:4, endLine:4, content:'', description:'', declaredType:'int'})`,
|
|
`CREATE (p:\`Property\` {id:'${CONFIG_ID}', name:'payment.timeout', filePath:'application.properties', startLine:1, endLine:1, content:'', description:'Spring configuration property', declaredType:''})`,
|
|
`MATCH (consumer:\`Property\` {id:'${CONSUMER_ID}'}), (config:\`Property\` {id:'${CONFIG_ID}'}) CREATE (consumer)-[:CodeRelation {type:'USES', confidence:1.0, reason:'spring-config:@Value payment.timeout'}]->(config)`,
|
|
];
|
|
|
|
withTestLbugDB(
|
|
'spring-config-mcp',
|
|
(handle) => {
|
|
let backend: LocalBackend;
|
|
|
|
beforeAll(() => {
|
|
backend = (handle as typeof handle & { _backend: LocalBackend })._backend;
|
|
});
|
|
|
|
describe('Spring configuration context and impact visibility', () => {
|
|
it('shows configuration dependencies in context without special query flags', async () => {
|
|
const context = await backend.callTool('context', { uid: CONSUMER_ID });
|
|
expect(context.outgoing.uses).toEqual([
|
|
expect.objectContaining({
|
|
uid: CONFIG_ID,
|
|
name: 'payment.timeout',
|
|
filePath: 'application.properties',
|
|
}),
|
|
]);
|
|
});
|
|
|
|
it('shows consumers in upstream impact from a configuration key', async () => {
|
|
const impact = await backend.callTool('impact', {
|
|
target_uid: CONFIG_ID,
|
|
target: 'payment.timeout',
|
|
direction: 'upstream',
|
|
});
|
|
expect(impact.risk).not.toBe('UNKNOWN');
|
|
expect(impact.byDepth[1]).toEqual([
|
|
expect.objectContaining({
|
|
id: CONSUMER_ID,
|
|
name: 'timeout',
|
|
relationType: 'USES',
|
|
}),
|
|
]);
|
|
});
|
|
});
|
|
},
|
|
{
|
|
seed: SEED,
|
|
poolAdapter: true,
|
|
afterSetup: async (handle) => {
|
|
vi.mocked(listRegisteredRepos).mockResolvedValue([
|
|
{
|
|
name: 'test-repo',
|
|
path: '/test/repo',
|
|
storagePath: handle.tmpHandle.dbPath,
|
|
indexedAt: new Date().toISOString(),
|
|
lastCommit: 'abc123',
|
|
stats: { files: 2, nodes: 2, communities: 0, processes: 0 },
|
|
},
|
|
]);
|
|
const backend = new LocalBackend();
|
|
await backend.init();
|
|
(handle as typeof handle & { _backend?: LocalBackend })._backend = backend;
|
|
},
|
|
},
|
|
);
|