mirror of
https://github.com/Tria-plc/emaui.git
synced 2026-09-01 18:13:28 +00:00
61 lines
2.1 KiB
TypeScript
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}';
|
|
`);
|
|
}
|