Files
obelisk/tests/provider-inventory.test.mjs
T

57 lines
2.0 KiB
JavaScript
Raw Normal View History

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',
}]);
});
}