syncova-policies/scripts/test-server.mjs
Weapie 265ca8ac38
All checks were successful
Container-Image bauen und veröffentlichen / build-and-push (push) Successful in 5m15s
Improve accessibility and access controls; verify production and database recovery
2026-09-14 11:44:41 +02:00

29 lines
2.3 KiB
JavaScript

import { mkdtempSync, cpSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { spawnSync, spawn } from 'node:child_process'
import { randomBytes } from 'node:crypto'
import { PrismaClient } from '@prisma/client'
import bcrypt from 'bcryptjs'
const production=process.argv.includes('--production')
const dir=mkdtempSync(join(tmpdir(),'syncova-test-'))
const database='file:'+join(dir,'test.db').replaceAll('\\','/')
const env={...process.env,DATABASE_URL:database,NEXTAUTH_SECRET:randomBytes(32).toString('hex'),AUTH_TRUST_HOST:'true',NEXTAUTH_URL:'http://127.0.0.1:3219',PORT:'3219',HOSTNAME:'127.0.0.1',TEST_DIST_DIR:production?'.next-e2e-production':'.next-e2e'}
const setup=spawnSync(process.execPath,['node_modules/prisma/build/index.js','db','push','--skip-generate'],{env,stdio:'inherit'})
if(setup.status!==0) process.exit(1)
const prisma=new PrismaClient({datasources:{db:{url:database}}})
await prisma.user.create({data:{email:'super@example.org',password:await bcrypt.hash('Test-password-only-2026',12),role:'SUPER_ADMIN'}})
await prisma.user.create({data:{email:'editor@example.org',password:await bcrypt.hash('Test-password-only-2026',12),role:'ADMIN'}})
await prisma.sitePages.create({data:{id:1,imprint:'## Kontakt\nTestverwaltung',privacy:'## Datenschutz\nTestinhalt',accessibility:'## Stand\nTestinhalt',easyLanguage:'## Willkommen\nTestinhalt',signLanguage:'## Video\nTestinhalt'}})
await prisma.privacyPolicy.create({data:{slug:'test-bauantrag',title:'Bauantrag',processingDescription:'Bauantrag bearbeiten',recipients:'Bauamt',responsible:'Testverwaltung',isPublic:true}})
await prisma.$disconnect()
if(production){
const build=spawnSync(process.execPath,['node_modules/next/dist/bin/next','build'],{env,stdio:'inherit'})
if(build.status!==0)process.exit(build.status??1)
cpSync(join(env.TEST_DIST_DIR,'static'),join(env.TEST_DIST_DIR,'standalone',env.TEST_DIST_DIR,'static'),{recursive:true})
}
const args=production?[join(env.TEST_DIST_DIR,'standalone','server.js')]:['node_modules/next/dist/bin/next','dev','--port','3219','--hostname','127.0.0.1']
const child=spawn(process.execPath,args,{env,stdio:'inherit'})
for(const signal of ['SIGINT','SIGTERM']) process.on(signal,()=>child.kill(signal))
child.on('exit',code=>process.exit(code??1))