fancive_obsidian-parallel-r.../tests/direct-providers.test.js
wujunchen 0264ef0b6c refactor: split direct-modules.test.js into 5 per-module test files
Replaces the monolithic direct-modules.test.js (780 lines) with focused
per-module test files sharing a common direct-test-setup.js. Each file
is under 165 lines. All existing test assertions preserved.

New files: direct-test-setup.js, direct-cache.test.js,
direct-providers.test.js, direct-settings.test.js, direct-i18n.test.js,
direct-streaming.test.js

Change-Id: Ie9cceaf3b9b71e618c0d7e524a5186b5c44079c8
2026-04-27 15:24:32 +08:00

52 lines
3.8 KiB
JavaScript

const { assert, requireBundledModule, cleanup } = require('./direct-test-setup');
(async () => {
try {
const generation = await requireBundledModule('src/generation.ts');
const providerParsers = await requireBundledModule('src/provider-parsers.ts');
// ── generation.ts ──
assert.strictEqual(generation.cancellationNoticeKey({ backend: 'api' }, { phase: 'generating' }), 'cancelRequestedApiInFlight');
assert.strictEqual(generation.cancellationNoticeKey({ backend: 'codex' }, { phase: 'generating' }), 'cancelRequested');
// ── provider-parsers.ts ──
const cardsJson = JSON.stringify({ cards: [{ title: 'T', anchor: 'A', gist: 'G', bullets: ['B'] }] });
assert.strictEqual(providerParsers.textFromOpenAiChatResponse({ choices: [{ message: { content: [{ text: cardsJson }] } }] }), cardsJson);
assert.strictEqual(providerParsers.textFromAnthropicMessagesResponse({ content: [{ type: 'text', text: cardsJson }] }), cardsJson);
assert.strictEqual(providerParsers.textFromOpenAiResponsesResponse({ output: [{ content: [{ type: 'output_text', text: cardsJson }] }] }), cardsJson);
assert.strictEqual(providerParsers.textFromGoogleGenerativeAiResponse({ candidates: [{ content: { parts: [{ text: cardsJson }] } }] }), cardsJson);
assert.deepStrictEqual(providerParsers.cardsFromAnthropicToolUse({ content: [{ type: 'tool_use', name: 'record_parallel_reader_cards', input: JSON.parse(cardsJson) }] }), [{ title: 'T', anchor: 'A', gist: 'G', bullets: ['B'] }]);
// ── Provider parser edge cases ──
assert.strictEqual(providerParsers.textFromProviderContent('hello'), 'hello');
assert.strictEqual(providerParsers.textFromProviderContent({ output_text: 'ot' }), 'ot');
assert.strictEqual(providerParsers.textFromProviderContent(['a', { text: 'b' }, { output_text: 'c' }, 42]), 'abc');
assert.strictEqual(providerParsers.textFromProviderContent(null), '');
assert.strictEqual(providerParsers.textFromProviderContent(undefined), '');
assert.strictEqual(providerParsers.textFromProviderContent({ foo: 'bar' }), '');
assert.strictEqual(providerParsers.textFromOpenAiChatResponse({}), '');
assert.strictEqual(providerParsers.textFromOpenAiChatResponse({ choices: [] }), '');
assert.strictEqual(providerParsers.textFromOpenAiChatResponse({ choices: [{ text: 'legacy' }] }), 'legacy');
assert.strictEqual(providerParsers.textFromAnthropicMessagesResponse({}), '');
assert.strictEqual(providerParsers.textFromAnthropicMessagesResponse({ content: [] }), '');
assert.strictEqual(providerParsers.textFromAnthropicMessagesResponse({ content: [{ type: 'text', text: 'a' }, { type: 'text', text: 'b' }] }), 'ab');
assert.strictEqual(providerParsers.textFromGoogleGenerativeAiResponse({}), '');
assert.strictEqual(providerParsers.textFromGoogleGenerativeAiResponse({ candidates: [] }), '');
assert.strictEqual(providerParsers.textFromGoogleGenerativeAiResponse({ candidates: [{ content: {} }] }), '');
assert.strictEqual(providerParsers.textFromOpenAiResponsesResponse({ output_text: 'direct' }), 'direct');
assert.strictEqual(providerParsers.textFromOpenAiResponsesResponse({ output: [{ content: [{ type: 'output_text', content: 'nested' }] }] }), 'nested');
assert.strictEqual(providerParsers.textFromOpenAiResponsesResponse({}), '');
assert.strictEqual(providerParsers.cardsFromAnthropicToolUse({ content: [{ type: 'text', text: 'hello' }] }), null);
assert.strictEqual(providerParsers.cardsFromAnthropicToolUse({ content: [{ type: 'tool_use', name: 'other_tool', input: {} }] }), null);
assert.strictEqual(providerParsers.cardsFromAnthropicToolUse({}), null);
console.log('direct providers tests passed');
} finally {
cleanup();
}
})().catch((e) => { console.error(e); process.exit(1); });