Use JSON server configuration and repository database name

This commit is contained in:
2026-10-14 19:33:03 +09:00
parent cc6319ec18
commit 714a2b1006
12 changed files with 122 additions and 54 deletions
+37
View File
@@ -0,0 +1,37 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { mkdtemp, writeFile, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { loadServerConfig } from '../src/server/config.js';
test('JSON configuration preserves database and secrets independently of environment variables', async t => {
const previous = process.env.MONGODB_DATABASE;
process.env.MONGODB_DATABASE = 'must_not_override_json';
t.after(() => { if (previous === undefined) delete process.env.MONGODB_DATABASE; else process.env.MONGODB_DATABASE = previous; });
const dir = await mkdtemp(join(tmpdir(), 'dragon-config-'));
t.after(() => rm(dir, { recursive: true, force: true }));
const path = join(dir, '.config.json');
const input = { MONGODB_URI: 'mongodb://localhost:27017', MONGODB_DATABASE: 'local_game', HOST: '127.0.0.1', PORT: 2100,
ADMIN_PASSWORD: ' spaces # $ remain ', TRUST_PROXY: 'loopback', STUN_URLS: ['stun:example.com:3478'] };
await writeFile(path, JSON.stringify(input));
const config = loadServerConfig(path);
assert.equal(config.MONGODB_DATABASE, 'local_game');
assert.equal(config.ADMIN_PASSWORD, input.ADMIN_PASSWORD);
assert.equal(config.PORT, 2100);
assert.deepEqual(config.STUN_URLS, input.STUN_URLS);
});
test('missing, malformed and invalid configuration produces safe actionable error codes', async t => {
const dir = await mkdtemp(join(tmpdir(), 'dragon-config-'));
t.after(() => rm(dir, { recursive: true, force: true }));
const path = join(dir, '.config.json');
assert.throws(() => loadServerConfig(path), { code: 'CONFIG_NOT_FOUND' });
await writeFile(path, '{"password":"private');
assert.throws(() => loadServerConfig(path), error => (error as Error).message === 'INVALID_CONFIG');
for (const input of [null, {}, { MONGODB_URI: 'secret', MONGODB_DATABASE: 'db', PORT: '2100' },
{ MONGODB_URI: 'mongodb://localhost', MONGODB_DATABASE: 'db', STUN_URLS: 'stun:host' }]) {
await writeFile(path, JSON.stringify(input));
assert.throws(() => loadServerConfig(path), { code: 'INVALID_CONFIG' });
}
});