Files
AfiS-Aktensystem/web/tests/schwaerzung-sql.test.ts
Harlekin e0b03ea336
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
Gedankenstriche durch Bindestriche ersetzt
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
2026-09-04 08:54:52 +02:00

59 lines
2.0 KiB
TypeScript

// @vitest-environment node
import { afterAll, beforeAll, describe, expect, it } from 'vitest'
import { createPrismaClient, type PrismaClient } from '@afis/db'
import { stripRedacted } from '@/lib/redaction'
/**
* Die Schwärzung wird an zwei Stellen entfernt: in TypeScript beim Rendern und
* in SQL, bevor der Suchvektor gefüllt wird. Laufen die beiden auseinander,
* findet die Suche einen Begriff, den die Ansicht verbirgt - und der Treffer
* allein verrät ihn dann.
*/
const url = process.env.DIRECT_DATABASE_URL ?? process.env.DATABASE_URL
const suite = url ? describe : describe.skip
let db: PrismaClient
const PROBEN = [
'Der Hinweis kam von [[c4]]Wachmann Perreira, Sektor B[[/c4]] am 27.08.',
'[[c2]]zwei[[/c2]] und [[c5]]fünf[[/c5]] und [[c0]]offen[[/c0]]',
'ganz ohne Auszeichnung',
'mehrzeilig [[c3]]Zeile eins\nZeile zwei[[/c3]] Ende',
'unvollständige [[c3]]Auszeichnung ohne Ende',
]
suite('Schwärzung in TypeScript und SQL', () => {
beforeAll(() => {
db = createPrismaClient(url)
})
afterAll(async () => {
await db.$disconnect()
})
it('entfernt in beiden Sprachen dieselben Stellen', async () => {
for (const probe of PROBEN) {
const [row] = await db.$queryRaw<{ ergebnis: string }[]>`
SELECT strip_redactions(${probe}) AS ergebnis
`
const ausSql = row?.ergebnis ?? ''
const ausTs = stripRedacted(probe)
// Auf Wortebene vergleichen: SQL ersetzt durch ein Leerzeichen, der
// Parser ebenso, aber die umliegenden Leerzeichen können abweichen.
expect(ausSql.split(/\s+/).filter(Boolean)).toEqual(
ausTs.split(/\s+/).filter(Boolean),
)
}
})
it('lässt geschwärzte Begriffe in keiner der beiden Fassungen stehen', async () => {
const probe = PROBEN[0]!
const [row] = await db.$queryRaw<{ ergebnis: string }[]>`
SELECT strip_redactions(${probe}) AS ergebnis
`
expect(row?.ergebnis).not.toContain('Perreira')
expect(stripRedacted(probe)).not.toContain('Perreira')
})
})