57 lines
2.0 KiB
JavaScript
57 lines
2.0 KiB
JavaScript
import { test } from 'node:test';
|
|||
|
|
import assert from 'node:assert/strict';
|
||
|
|
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
||
|
|
import { tmpdir } from 'node:os';
|
||
|
|
import { join } from 'node:path';
|
||
|
|
|
||
|
|
import { createClaudeProvider } from '../packages/core/src/providers/claude.ts';
|
||
|
|
import { createCodexProvider } from '../packages/core/src/providers/codex.ts';
|
||
|
|
import { createKimiProvider } from '../packages/core/src/providers/kimi.ts';
|
||
|
|
|
||
|
|
const providers = [
|
||
|
|
['claude', createClaudeProvider, 'projects'],
|
||
|
|
['codex', createCodexProvider, 'sessions'],
|
||
|
|
['kimi', createKimiProvider, 'sessions'],
|
||
|
|
];
|
||
|
|
|
||
|
|
for (const [name, createProvider, inventoryDir] of providers) {
|
||
|
|
test(`${name} reports directory enumeration failures`, () => {
|
||
|
|
const root = mkdtempSync(join(tmpdir(), `obelisk-${name}-inventory-`));
|
||
|
|
const sourcePath = join(root, inventoryDir);
|
||
|
|
writeFileSync(sourcePath, 'not a directory');
|
||
|
|
let issue;
|
||
|
|
try {
|
||
|
|
const units = createProvider({ rootDir: root }).discover({
|
||
|
|
lastCursor: () => null,
|
||
|
|
reportIncompleteInventory(value) { issue = value; },
|
||
|
|
});
|
||
|
|
assert.deepEqual(units, []);
|
||
|
|
assert.equal(issue.path, sourcePath);
|
||
|
|
assert.match(issue.error, /ENOTDIR|not a directory/i);
|
||
|
|
} finally {
|
||
|
|
rmSync(root, { recursive: true, force: true });
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test(`${name} treats a missing source as incomplete only when prior sessions exist`, () => {
|
||
|
|
const root = join(mkdtempSync(join(tmpdir(), `obelisk-${name}-missing-`)), 'absent');
|
||
|
|
const provider = createProvider({ rootDir: root });
|
||
|
|
const issues = [];
|
||
|
|
const context = {
|
||
|
|
lastCursor: () => null,
|
||
|
|
reportIncompleteInventory(value) { issues.push(value); },
|
||
|
|
};
|
||
|
|
|
||
|
|
assert.deepEqual(provider.discover(context), []);
|
||
|
|
assert.deepEqual(issues, []);
|
||
|
|
assert.deepEqual(provider.discover({
|
||
|
|
...context,
|
||
|
|
indexedSessions: () => [{ sessionId: 'prior', jsonlPath: '/prior/source' }],
|
||
|
|
}), []);
|
||
|
|
assert.deepEqual(issues, [{
|
||
|
|
path: join(root, inventoryDir),
|
||
|
|
error: 'Source folder is unavailable',
|
||
|
|
}]);
|
||
|
|
});
|
||
|
|
}
|