mirror of
https://github.com/eyaltoledano/claude-task-master.git
synced 2025-11-22 13:06:46 +00:00
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
|
|
import { jest } from '@jest/globals';
|
||
|
|
|
||
|
|
// Mock AI SDK functions at the top level
|
||
|
|
jest.unstable_mockModule('ai', () => ({
|
||
|
|
generateObject: jest.fn(),
|
||
|
|
generateText: jest.fn(),
|
||
|
|
streamText: jest.fn(),
|
||
|
|
streamObject: jest.fn(),
|
||
|
|
zodSchema: jest.fn(),
|
||
|
|
JSONParseError: class JSONParseError extends Error {},
|
||
|
|
NoObjectGeneratedError: class NoObjectGeneratedError extends Error {}
|
||
|
|
}));
|
||
|
|
|
||
|
|
// Mock CLI failure scenario
|
||
|
|
jest.unstable_mockModule('ai-sdk-provider-claude-code', () => ({
|
||
|
|
createClaudeCode: jest.fn(() => {
|
||
|
|
throw new Error('Claude Code CLI not found');
|
||
|
|
})
|
||
|
|
}));
|
||
|
|
|
||
|
|
// Import the provider after mocking
|
||
|
|
const { ClaudeCodeProvider } = await import(
|
||
|
|
'../../src/ai-providers/claude-code.js'
|
||
|
|
);
|
||
|
|
|
||
|
|
describe('Claude Code Error Handling', () => {
|
||
|
|
it('should handle missing Claude Code CLI gracefully', () => {
|
||
|
|
const provider = new ClaudeCodeProvider();
|
||
|
|
|
||
|
|
expect(() => provider.getClient()).toThrow(/Claude Code CLI not available/);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should handle CLI errors during client creation', () => {
|
||
|
|
const provider = new ClaudeCodeProvider();
|
||
|
|
|
||
|
|
expect(() => provider.getClient({ commandName: 'test' })).toThrow(
|
||
|
|
/Claude Code CLI not available/
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should provide a helpful CLI-not-available error', () => {
|
||
|
|
const provider = new ClaudeCodeProvider();
|
||
|
|
expect(() => provider.getClient()).toThrow(
|
||
|
|
/Claude Code CLI not available/i
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should still support basic provider functionality', () => {
|
||
|
|
const provider = new ClaudeCodeProvider();
|
||
|
|
|
||
|
|
// These should work even if CLI is not available
|
||
|
|
expect(provider.name).toBe('Claude Code');
|
||
|
|
expect(provider.getSupportedModels()).toEqual(['sonnet', 'opus']);
|
||
|
|
expect(provider.isModelSupported('sonnet')).toBe(true);
|
||
|
|
expect(provider.isRequiredApiKey()).toBe(false);
|
||
|
|
expect(() => provider.validateAuth()).not.toThrow();
|
||
|
|
});
|
||
|
|
});
|