Почему: TASK-GROK-3 п.1 — на общем кластере (параллельные прогоны приёмки, чужой стенд) пересоздание ролей krona_migrator/krona_staff_app со случайными паролями ломает соседей. Если заданы оба URL, global-setup не вызывает provision и не требует E2E_PG_ADMIN_URL; по умолчанию поведение прежнее. provision-pg получил --roles keep: пересоздать только БД, не меняя паролей (нужно accept-branch для отдельной БД на ветку). ctx.adminDatabaseUrl (E2E_DB_ADMIN_URL или E2E_PG_ADMIN_URL + БД стенда) — только для PILOT-REHOME. Проверено: run-e2e с E2E_MIGRATOR_URL/E2E_APP_URL без E2E_PG_ADMIN_URL — 45 failed | 9 passed, как на основе; повторный прогон на уже мигрированной БД — то же.
43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import { randomBytes } from 'node:crypto';
|
|
|
|
export interface E2EContext {
|
|
baseUrl: string;
|
|
openBaseUrl: string;
|
|
rateLimitBaseUrl: string;
|
|
managerToken: string;
|
|
terminalToken: string;
|
|
tenantId: string;
|
|
actorId: string;
|
|
terminalActorId: string;
|
|
appDatabaseUrl: string;
|
|
migrationDatabaseUrl: string;
|
|
/** Админ (владелец кластера) в БД стенда; null, если не передан. Только для PILOT-REHOME. */
|
|
adminDatabaseUrl: string | null;
|
|
}
|
|
|
|
declare module 'vitest' {
|
|
export interface ProvidedContext {
|
|
e2e: E2EContext;
|
|
}
|
|
}
|
|
|
|
const crockford = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
|
|
|
|
/** Случайный ULID (время + crypto.randomBytes), чтобы не зависеть от src/. */
|
|
export function randomUlid(): string {
|
|
let time = Date.now();
|
|
let timePart = '';
|
|
for (let i = 0; i < 10; i += 1) {
|
|
timePart = crockford[time % 32]! + timePart;
|
|
time = Math.floor(time / 32);
|
|
}
|
|
const bytes = randomBytes(16);
|
|
let randomPart = '';
|
|
for (let i = 0; i < 16; i += 1) randomPart += crockford[bytes[i]! % 32]!;
|
|
return timePart + randomPart;
|
|
}
|
|
|
|
/** Синтетическая метка для данных тестов: очевидно не реальные люди/суммы. */
|
|
export function synthetic(label: string): string {
|
|
return `E2E-${label}-${randomBytes(3).toString('hex')}`;
|
|
}
|