/ clis / substack / utils.test.js
utils.test.js
 1  import { describe, expect, it, vi } from 'vitest';
 2  import { __test__, loadSubstackArchive, loadSubstackFeed } from './utils.js';
 3  function createPageMock(evaluateResult) {
 4      return {
 5          goto: vi.fn().mockResolvedValue(undefined),
 6          evaluate: vi.fn().mockResolvedValue(evaluateResult),
 7          snapshot: vi.fn().mockResolvedValue(undefined),
 8          click: vi.fn().mockResolvedValue(undefined),
 9          typeText: vi.fn().mockResolvedValue(undefined),
10          pressKey: vi.fn().mockResolvedValue(undefined),
11          scrollTo: vi.fn().mockResolvedValue(undefined),
12          getFormState: vi.fn().mockResolvedValue({}),
13          wait: vi.fn().mockResolvedValue(undefined),
14          tabs: vi.fn().mockResolvedValue([]),
15          selectTab: vi.fn().mockResolvedValue(undefined),
16          networkRequests: vi.fn().mockResolvedValue([]),
17          consoleMessages: vi.fn().mockResolvedValue([]),
18          scroll: vi.fn().mockResolvedValue(undefined),
19          autoScroll: vi.fn().mockResolvedValue(undefined),
20          installInterceptor: vi.fn().mockResolvedValue(undefined),
21          getInterceptedRequests: vi.fn().mockResolvedValue([]),
22          getCookies: vi.fn().mockResolvedValue([]),
23          screenshot: vi.fn().mockResolvedValue(''),
24          waitForCapture: vi.fn().mockResolvedValue(undefined),
25      };
26  }
27  describe('substack utils wait selectors', () => {
28      it('waits for both feed link shapes before scraping the feed', async () => {
29          const page = createPageMock([]);
30          await loadSubstackFeed(page, 'https://substack.com/', 5);
31          expect(page.wait).toHaveBeenCalledWith({
32              selector: __test__.FEED_POST_LINK_SELECTOR,
33              timeout: 5,
34          });
35      });
36      it('waits for archive post links before scraping archive pages', async () => {
37          const page = createPageMock([]);
38          await loadSubstackArchive(page, 'https://example.substack.com', 5);
39          expect(page.wait).toHaveBeenCalledWith({
40              selector: __test__.ARCHIVE_POST_LINK_SELECTOR,
41              timeout: 5,
42          });
43      });
44  });