Files
emaui/apps/e2e/src/support/db.ts
2026-08-03 12:49:48 +03:00

61 lines
2.1 KiB
TypeScript

import { execFileSync } from 'node:child_process';
import { E2E } from '../../playwright.config';
/**
* Direct access to the E2E database.
*
* Shelling out to `psql` rather than adding a `pg` dependency to the frontend
* workspace: the suite needs a handful of reads and a cleanup delete, and a
* driver in `emaui/package.json` would follow the frontend build around
* forever for the sake of them.
*/
const PSQL_ENV = {
...process.env,
PGPASSWORD: process.env.E2E_DB_PASSWORD ?? 'TradingTria@2090',
};
export function sql(query: string): string[][] {
const out = execFileSync(
'psql',
[
'-h', process.env.E2E_DB_HOST ?? 'localhost',
'-p', process.env.E2E_DB_PORT ?? '5432',
'-U', process.env.E2E_DB_USER ?? 'postgres',
'-d', E2E.database,
'-tAF', '\t',
'-c', query,
],
{ env: PSQL_ENV, encoding: 'utf8' },
);
return out
.split('\n')
.filter((line) => line.trim() !== '')
.map((line) => line.split('\t'));
}
/** First column of the first row, or null when the query found nothing. */
export function sqlValue(query: string): string | null {
const rows = sql(query);
return rows.length > 0 ? rows[0][0] : null;
}
/** Removes everything a run created, so the next run starts from the same place. */
export function deleteApplicant(email: string): void {
const safe = email.replace(/'/g, "''");
const userId = sqlValue(`SELECT id FROM iam.users WHERE email = '${safe}'`);
if (!userId) return;
sql(`
DELETE FROM licenses WHERE holder_user_id = '${userId}';
DELETE FROM license_applications WHERE applicant_user_id = '${userId}';
DELETE FROM profile_operator_types
WHERE profile_id IN (SELECT id FROM profiles WHERE user_id = '${userId}');
DELETE FROM profiles WHERE user_id = '${userId}';
DELETE FROM iam.notifications WHERE recipient_id = '${userId}';
DELETE FROM iam.user_verifications WHERE user_id = '${userId}';
DELETE FROM iam.user_credentials WHERE user_id = '${userId}';
DELETE FROM iam.user_roles WHERE user_id = '${userId}';
DELETE FROM iam.users WHERE id = '${userId}';
`);
}