import { describe, expect, it, vi } from 'vitest'; import type { BrowserContext, Frame } from 'playwright'; import { createMockLogger } from './mockLogger.js'; import { extractMatrixCredentials, MatrixBrowserLoginRequiredError, } from '../src/services/chat/matrix/token-extractor.js'; describe('extractMatrixCredentials', () => { it('fails as soon as Reddit redirects the chat page to login', async () => { const handlers = new Map void>(); const frame = { url: () => 'https://www.reddit.com/login/?dest=https://www.reddit.com/chat/' } as Frame; const page = { on: vi.fn((event: string, handler: (value: never) => void) => { handlers.set(event, handler); }), mainFrame: vi.fn(() => frame), goto: vi.fn(async () => { handlers.get('framenavigated')?.(frame as never); return null; }), url: vi.fn(() => frame.url()), screenshot: vi.fn(async () => undefined), close: vi.fn(async () => undefined), }; const context = { newPage: vi.fn(async () => page) } as unknown as BrowserContext; await expect( extractMatrixCredentials(context, createMockLogger(), { timeoutMs: 5_000 }), ).rejects.toBeInstanceOf(MatrixBrowserLoginRequiredError); expect(page.screenshot).not.toHaveBeenCalled(); }); });