Files
minecraft-atm10-stats/backend/test/db.test.ts
T
lucashahmannandClaude Opus 5.5 9cb9531e78 feat(deploy): Standalone-Compose mit Host-Netzwerk für LXC und Traefik auf anderem Server
- docker-compose.standalone.yml: Build und Betrieb im Host-Netzwerk (Docker in unprivilegiertem
  LXC hat kein NAT für Bridge-Netze), Dienste über 127.0.0.1, Postgres nur lokal
- TRUST_PROXY akzeptiert die IP(s) des Reverse Proxys statt nur true/false
- Doku: Traefik-Datei-Konfiguration, Proxmox-Firewall, Ressourcen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 10:53:06 +02:00

42 lines
1.6 KiB
TypeScript

import { afterAll, describe, expect, it } from 'vitest';
import { loadConfig } from '../src/config.ts';
import { migrate } from '../src/db/migrate.ts';
import { closeTestPool, getTestPool } from './helpers/db.ts';
afterAll(closeTestPool);
describe('database', () => {
it('migrate is idempotent', async () => {
const pool = await getTestPool();
await migrate(pool);
await migrate(pool);
const { rows } = await pool.query(`SELECT to_regclass('public.events') AS t`);
expect(rows[0].t).toBe('events');
});
});
describe('config', () => {
it('loadConfig rejects missing DATABASE_URL', () => {
expect(() => loadConfig({ INGEST_HMAC_SECRET: 'x'.repeat(32) })).toThrow(/DATABASE_URL/);
});
it('loadConfig applies defaults', () => {
const c = loadConfig({ DATABASE_URL: 'postgres://x', INGEST_HMAC_SECRET: 'x'.repeat(32) });
expect(c.PORT).toBe(3001);
expect(c.SFTP_INTERVAL_MIN).toBe(15);
expect(c.sftp).toBeNull();
});
});
describe('TRUST_PROXY', () => {
const base = { DATABASE_URL: 'postgres://x', INGEST_HMAC_SECRET: 'x'.repeat(32) };
it('accepts true/false', () => {
expect(loadConfig({ ...base, TRUST_PROXY: 'true' }).TRUST_PROXY).toBe(true);
expect(loadConfig({ ...base, TRUST_PROXY: 'false' }).TRUST_PROXY).toBe(false);
});
it('accepts the reverse proxy address(es), so only those may set X-Forwarded-For', () => {
expect(loadConfig({ ...base, TRUST_PROXY: '172.16.10.20' }).TRUST_PROXY).toEqual(['172.16.10.20']);
expect(loadConfig({ ...base, TRUST_PROXY: '172.16.10.20, 10.0.0.0/8' }).TRUST_PROXY).toEqual(['172.16.10.20', '10.0.0.0/8']);
});
});