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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
- import { fetchWithCache } from '../../src/cache';
- import { WebhookProvider } from '../../src/providers/webhook';
- jest.mock('../../src/cache');
- describe('WebhookProvider', () => {
- beforeEach(() => {
- jest.resetAllMocks();
- });
- describe('constructor', () => {
- it('should create instance with url', () => {
- const provider = new WebhookProvider('http://test.com');
- expect(provider.webhookUrl).toBe('http://test.com');
- });
- it('should create instance with url and options', () => {
- const provider = new WebhookProvider('http://test.com', {
- id: 'test-id',
- config: { foo: 'bar' },
- });
- expect(provider.webhookUrl).toBe('http://test.com');
- expect(provider.config).toEqual({ foo: 'bar' });
- expect(provider.id()).toBe('test-id');
- });
- });
- describe('id', () => {
- it('should return webhook url id', () => {
- const provider = new WebhookProvider('http://test.com');
- expect(provider.id()).toBe('webhook:http://test.com');
- });
- });
- describe('toString', () => {
- it('should return string representation', () => {
- const provider = new WebhookProvider('http://test.com');
- expect(provider.toString()).toBe('[Webhook Provider http://test.com]');
- });
- });
- describe('callApi', () => {
- it('should call webhook and return output', async () => {
- const mockFetchResponse = {
- data: {
- output: 'test response',
- },
- cached: false,
- status: 200,
- statusText: 'OK',
- };
- jest.mocked(fetchWithCache).mockResolvedValue(mockFetchResponse);
- const provider = new WebhookProvider('http://test.com');
- const result = await provider.callApi('test prompt');
- expect(fetchWithCache).toHaveBeenCalledWith(
- 'http://test.com',
- {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- prompt: 'test prompt',
- }),
- },
- 300000,
- 'json',
- );
- expect(result).toEqual({
- output: 'test response',
- });
- });
- it('should include config in request if provided', async () => {
- const mockFetchResponse = {
- data: {
- output: 'test response',
- },
- cached: false,
- status: 200,
- statusText: 'OK',
- };
- jest.mocked(fetchWithCache).mockResolvedValue(mockFetchResponse);
- const provider = new WebhookProvider('http://test.com', {
- config: { foo: 'bar' },
- });
- await provider.callApi('test prompt');
- expect(fetchWithCache).toHaveBeenCalledWith(
- 'http://test.com',
- {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- prompt: 'test prompt',
- config: { foo: 'bar' },
- }),
- },
- 300000,
- 'json',
- );
- });
- it('should handle fetch errors', async () => {
- jest.mocked(fetchWithCache).mockRejectedValue(new Error('Network error'));
- const provider = new WebhookProvider('http://test.com');
- const result = await provider.callApi('test prompt');
- expect(result).toEqual({
- error: 'Webhook call error: Error: Network error',
- });
- });
- it('should handle invalid response format', async () => {
- const mockFetchResponse = {
- data: {
- foo: 'bar',
- },
- cached: false,
- status: 200,
- statusText: 'OK',
- };
- jest.mocked(fetchWithCache).mockResolvedValue(mockFetchResponse);
- const provider = new WebhookProvider('http://test.com');
- const result = await provider.callApi('test prompt');
- expect(result).toEqual({
- error: 'Webhook response error: Unexpected response format: {"foo":"bar"}',
- });
- });
- });
- });
|