26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
import type { BrowserContext } from '@playwright/test';
|
||
import type { User } from './manifest';
|
||
|
||
export const API = process.env.PERF_API ?? 'http://localhost:8000';
|
||
export const WEB = process.env.PERF_WEB ?? 'http://localhost:8080';
|
||
|
||
// Ключи localStorage: web/src/api/utils/token.js (saveAuthTokens), их читает AuthProvider.jsx.
|
||
export const ACCESS_KEY = 'access_token';
|
||
export const REFRESH_KEY = 'refresh_token';
|
||
|
||
/** Логин через API и запись токенов в localStorage origin'а фронта (init-script, до загрузки страницы). */
|
||
export async function loginAs(context: BrowserContext, user: User): Promise<void> {
|
||
const r = await context.request.post(`${API}/api/v1/auth/login`, {
|
||
data: { username: user.username, password: user.password },
|
||
});
|
||
if (!r.ok()) throw new Error(`login ${user.username}: ${r.status()} ${await r.text()}`);
|
||
const d = await r.json();
|
||
await context.addInitScript(
|
||
([a, rk, at, rt]) => {
|
||
localStorage.setItem(a, at);
|
||
if (rt) localStorage.setItem(rk, rt);
|
||
},
|
||
[ACCESS_KEY, REFRESH_KEY, d.access_token, d.refresh_token ?? ''] as const,
|
||
);
|
||
}
|