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
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die README; an keiner Stelle Bedeutung, nur Zeichensetzung.
59 lines
2.0 KiB
TypeScript
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')
|
|
})
|
|
})
|