34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
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<string, (value: never) => 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();
|
|
});
|
|
});
|