GitNexus/gitnexus/test/unit/filesystem-walker-order.test.ts

39 lines
1.3 KiB
TypeScript

import fs from 'node:fs/promises';
import os from 'node:os';
import path from 'node:path';
import { glob } from 'glob';
import { afterEach, describe, expect, it, vi } from 'vitest';
vi.mock('glob', () => ({ glob: vi.fn() }));
vi.mock('../../src/config/ignore-service.js', () => ({
createIgnoreFilter: vi.fn(async () => []),
}));
import { walkRepositoryPaths } from '../../src/core/ingestion/filesystem-walker.js';
const temporaryRoots: string[] = [];
afterEach(async () => {
vi.mocked(glob).mockReset();
await Promise.all(
temporaryRoots.splice(0).map((root) => fs.rm(root, { recursive: true, force: true })),
);
});
describe('walkRepositoryPaths ordering', () => {
it('returns accepted files in canonical path order when glob order is unstable', async () => {
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'gitnexus-scan-order-'));
temporaryRoots.push(root);
await Promise.all(
['zeta.ts', 'alpha.ts', 'middle.ts'].map((file) =>
fs.writeFile(path.join(root, file), `export const ${file[0]} = true;\n`),
),
);
vi.mocked(glob).mockResolvedValue(['zeta.ts', 'alpha.ts', 'middle.ts']);
const result = await walkRepositoryPaths(root);
expect(result.map((entry) => entry.path)).toEqual(['alpha.ts', 'middle.ts', 'zeta.ts']);
});
});