/ clis / douyin / _shared / browser-fetch.test.js
browser-fetch.test.js
 1  import { describe, expect, it, vi } from 'vitest';
 2  import { browserFetch } from './browser-fetch.js';
 3  function makePage(result) {
 4      return {
 5          goto: vi.fn(), evaluate: vi.fn().mockResolvedValue(result),
 6          getCookies: vi.fn(), snapshot: vi.fn(), click: vi.fn(),
 7          typeText: vi.fn(), pressKey: vi.fn(), scrollTo: vi.fn(),
 8          getFormState: vi.fn(), wait: vi.fn(), tabs: vi.fn(),
 9          networkRequests: vi.fn(), consoleMessages: vi.fn(),
10          scroll: vi.fn(), autoScroll: vi.fn(),
11          installInterceptor: vi.fn(), getInterceptedRequests: vi.fn(),
12          screenshot: vi.fn(),
13      };
14  }
15  describe('browserFetch', () => {
16      it('returns parsed JSON on success', async () => {
17          const page = makePage({ status_code: 0, data: { ak: 'KEY' } });
18          const result = await browserFetch(page, 'GET', 'https://creator.douyin.com/api/test');
19          expect(result).toEqual({ status_code: 0, data: { ak: 'KEY' } });
20      });
21      it('throws when status_code is non-zero', async () => {
22          const page = makePage({ status_code: 8, message: 'fail' });
23          await expect(browserFetch(page, 'GET', 'https://creator.douyin.com/api/test')).rejects.toThrow('Douyin API error 8');
24      });
25      it('returns result even when no status_code field', async () => {
26          const page = makePage({ some_field: 'value' });
27          const result = await browserFetch(page, 'GET', 'https://creator.douyin.com/api/test');
28          expect(result).toEqual({ some_field: 'value' });
29      });
30  });