Oberflaeche, Fehlermeldungen und Kommentare schrieben durchgehend ae, oe, ue und ss. Dafuer gab es keinen Grund - die Anwendung ist deutschsprachig und laeuft durchgehend in UTF-8. Betroffen waren 55 Dateien, darunter alle sichtbaren Texte: Guthaben-Zaehler, Import, Nutzerverwaltung, Passwortwechsel und die Zwei-Faktor-Einrichtung. Der Name einer Migration bleibt im README-Beispiel bewusst bei ASCII, weil daraus ein Verzeichnisname wird.
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { readFileSync } from 'node:fs';
|
|
import { dirname, join } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { PGlite } from '@electric-sql/pglite';
|
|
import { PGLiteSocketServer } from '@electric-sql/pglite-socket';
|
|
|
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
const MIGRATION = join(here, '..', 'prisma', 'migrations', '20250101000000_init', 'migration.sql');
|
|
|
|
export interface TestDatabase {
|
|
url: string;
|
|
stop: () => Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* Startet eine Postgres-Instanz im Speicher und stellt sie über einen lokalen
|
|
* Port bereit, damit Prisma sich wie an eine echte Datenbank verbindet.
|
|
* So laufen die Tests ohne Docker oder installiertes Postgres.
|
|
*/
|
|
export async function startTestDatabase(port: number): Promise<TestDatabase> {
|
|
const db = await PGlite.create();
|
|
await db.exec(readFileSync(MIGRATION, 'utf8'));
|
|
|
|
const server = new PGLiteSocketServer({ db, port, host: '127.0.0.1' });
|
|
await server.start();
|
|
|
|
return {
|
|
// connection_limit=1, weil die Testinstanz immer nur eine Verbindung
|
|
// gleichzeitig bedient. Echtes Postgres braucht die Einschränkung nicht.
|
|
url: `postgresql://postgres:postgres@127.0.0.1:${port}/postgres?connection_limit=1`,
|
|
stop: async () => {
|
|
await server.stop();
|
|
await db.close();
|
|
},
|
|
};
|
|
}
|