Files
openchamber/packages/vscode/src/bridge-fs-runtime.test.js
T
Bohdan Triapitsyn 1b141b17da perf: dedupe VS Code git read execs
Reduce duplicate git rev-parse work in VS Code
Cache only safe git read commands
Add VS Code bridge cache coverage
2026-05-25 12:55:59 +03:00

89 lines
2.6 KiB
JavaScript

import { beforeEach, describe, expect, it, mock } from 'bun:test';
import { promisify } from 'node:util';
const execCalls = [];
const execMock = mock(() => {
throw new Error('exec should be called through promisify');
});
execMock[promisify.custom] = (command, options) => {
execCalls.push({ command, options });
return new Promise((resolve) => {
setTimeout(() => {
resolve({ stdout: '/repo/.git\n/repo/.git\n', stderr: '' });
}, 10);
});
};
mock.module('child_process', () => ({
exec: execMock,
}));
mock.module('vscode', () => ({
workspace: {
workspaceFolders: [{ uri: { fsPath: '/workspace' } }],
fs: {},
},
Uri: {
file: (fsPath) => ({ fsPath }),
},
FileType: {
Directory: 2,
},
window: {},
}));
const { clearGitReadCacheForTests, handleFsBridgeMessage } = await import('./bridge-fs-runtime');
const deps = {
resolveUserPath: (value) => value,
listDirectoryEntries: mock(),
normalizeFsPath: (value) => value,
execGit: mock(),
searchDirectory: mock(),
resolveFileReadPath: mock(),
parseDroppedFileReference: mock(),
readUriAsAttachment: mock(),
};
describe('bridge fs exec git read cache', () => {
beforeEach(() => {
execCalls.length = 0;
clearGitReadCacheForTests();
});
it('dedupes in-flight cacheable git reads and reuses fresh results', async () => {
const command = 'git rev-parse --absolute-git-dir --git-common-dir';
const cwd = '/repo';
const [first, second] = await Promise.all([
handleFsBridgeMessage({ id: '1', type: 'api:fs:exec', payload: { commands: [command], cwd } }, deps),
handleFsBridgeMessage({ id: '2', type: 'api:fs:exec', payload: { commands: [command], cwd } }, deps),
]);
expect(first?.success).toBe(true);
expect(second?.success).toBe(true);
expect(execCalls).toHaveLength(1);
const spacedCommand = 'git rev-parse --absolute-git-dir --git-common-dir';
const cached = await handleFsBridgeMessage({ id: '3', type: 'api:fs:exec', payload: { commands: [spacedCommand], cwd } }, deps);
expect(execCalls).toHaveLength(1);
expect(cached?.data?.results?.[0]).toMatchObject({
command: spacedCommand,
success: true,
stdout: '/repo/.git\n/repo/.git',
});
});
it('does not cache arbitrary exec commands', async () => {
const command = 'git status --porcelain';
const cwd = '/repo';
await handleFsBridgeMessage({ id: '1', type: 'api:fs:exec', payload: { commands: [command], cwd } }, deps);
await handleFsBridgeMessage({ id: '2', type: 'api:fs:exec', payload: { commands: [command], cwd } }, deps);
expect(execCalls).toHaveLength(2);
});
});