Files
AFFiNE/packages/backend/server/src/__tests__/utils/utils.ts
2025-03-27 12:32:28 +00:00

54 lines
1.6 KiB
TypeScript

import { INestApplicationContext, LogLevel } from '@nestjs/common';
import { ModuleRef } from '@nestjs/core';
import { PrismaClient } from '@prisma/client';
import whywhywhy from 'why-is-node-running';
import { RefreshFeatures0001 } from '../../data/migrations/0001-refresh-features';
export const TEST_LOG_LEVEL: LogLevel =
(process.env.TEST_LOG_LEVEL as LogLevel) ?? 'fatal';
async function flushDB(client: PrismaClient) {
const result: { tablename: string }[] =
await client.$queryRaw`SELECT tablename
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog'
AND schemaname != 'information_schema'`;
// remove all table data
await client.$executeRawUnsafe(
`TRUNCATE TABLE ${result
.map(({ tablename }) => tablename)
.filter(name => !name.includes('migrations'))
.join(', ')}`
);
}
export async function initTestingDB(context: INestApplicationContext) {
const db = context.get(PrismaClient, { strict: false });
await flushDB(db);
await RefreshFeatures0001.up(db, context.get(ModuleRef));
}
export async function sleep(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}
export function debugProcessHolding(ignorePrismaStack = true) {
setImmediate(() => {
whywhywhy({
error: message => {
// ignore prisma error
if (
ignorePrismaStack &&
(message.includes('Prisma') || message.includes('prisma'))
) {
return;
}
console.error(message);
},
});
});
}