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 });