File size: 1,472 Bytes
0bcc252
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { getResponse } from '../agent';
import { generateObject } from 'ai';
import { search } from '../tools/jina-search';
import { readUrl } from '../tools/read';

// Mock external dependencies
jest.mock('ai', () => ({
  generateObject: jest.fn()
}));

jest.mock('../tools/jina-search', () => ({
  search: jest.fn()
}));

jest.mock('../tools/read', () => ({
  readUrl: jest.fn()
}));

describe('getResponse', () => {
  beforeEach(() => {
    // Mock generateObject to return a valid response
    (generateObject as jest.Mock).mockResolvedValue({
      object: { action: 'answer', answer: 'mocked response', references: [], think: 'mocked thought' },
      usage: { totalTokens: 100 }
    });

    // Mock search to return empty results
    (search as jest.Mock).mockResolvedValue({
      response: { data: [] }
    });

    // Mock readUrl to return empty content
    (readUrl as jest.Mock).mockResolvedValue({
      response: { data: { content: '', url: 'test-url' } },
      tokens: 0
    });
  });

  afterEach(() => {
    jest.useRealTimers();
    jest.clearAllMocks();
  });

  it('should handle search action', async () => {
    const result = await getResponse('What is TypeScript?', 50000); // Increased token budget to handle real-world usage
    expect(result.result.action).toBeDefined();
    expect(result.context).toBeDefined();
    expect(result.context.tokenTracker).toBeDefined();
    expect(result.context.actionTracker).toBeDefined();
  }, 30000);
});