72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { loadConfig } from '../src/config.js';
|
|
|
|
const REQUIRED_VARS = ['STORAGE_DIR', 'DB_HOST', 'DB_USER', 'DB_PASSWORD', 'DB_NAME'];
|
|
let savedEnv;
|
|
|
|
beforeEach(() => {
|
|
savedEnv = { ...process.env };
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.env = savedEnv;
|
|
});
|
|
|
|
describe('loadConfig', () => {
|
|
it('returns parsed config when all required vars are set', () => {
|
|
process.env.STORAGE_DIR = './storage';
|
|
process.env.DB_HOST = 'localhost';
|
|
process.env.DB_USER = 'user';
|
|
process.env.DB_PASSWORD = 'pass';
|
|
process.env.DB_NAME = 'db';
|
|
process.env.PORT = '4000';
|
|
process.env.MAX_FILE_SIZE_MB = '50';
|
|
|
|
const config = loadConfig();
|
|
|
|
expect(config.port).toBe(4000);
|
|
expect(config.storageDir).toBe('./storage');
|
|
expect(config.db).toEqual({ host: 'localhost', user: 'user', password: 'pass', database: 'db' });
|
|
expect(config.maxFileSizeMb).toBe(50);
|
|
});
|
|
|
|
it('applies defaults for optional vars', () => {
|
|
process.env.STORAGE_DIR = './storage';
|
|
process.env.DB_HOST = 'localhost';
|
|
process.env.DB_USER = 'user';
|
|
process.env.DB_PASSWORD = 'pass';
|
|
process.env.DB_NAME = 'db';
|
|
delete process.env.PORT;
|
|
delete process.env.MAX_FILE_SIZE_MB;
|
|
delete process.env.RETENTION_HOURS;
|
|
delete process.env.WORKER_CONCURRENCY;
|
|
|
|
const config = loadConfig();
|
|
|
|
expect(config.port).toBe(3000);
|
|
expect(config.maxFileSizeMb).toBe(100);
|
|
expect(config.retentionHours).toBe(1);
|
|
expect(config.workerConcurrency).toBe(3);
|
|
});
|
|
|
|
it('defaults ebookJobTimeoutMs to 180000ms and reads EBOOK_JOB_TIMEOUT_MS when set', () => {
|
|
process.env.STORAGE_DIR = './storage';
|
|
process.env.DB_HOST = 'localhost';
|
|
process.env.DB_USER = 'user';
|
|
process.env.DB_PASSWORD = 'pass';
|
|
process.env.DB_NAME = 'db';
|
|
delete process.env.EBOOK_JOB_TIMEOUT_MS;
|
|
|
|
expect(loadConfig().ebookJobTimeoutMs).toBe(180000);
|
|
|
|
process.env.EBOOK_JOB_TIMEOUT_MS = '240000';
|
|
expect(loadConfig().ebookJobTimeoutMs).toBe(240000);
|
|
});
|
|
|
|
it('throws listing every missing required variable', () => {
|
|
for (const key of REQUIRED_VARS) delete process.env[key];
|
|
|
|
expect(() => loadConfig()).toThrowError(/STORAGE_DIR.*DB_HOST.*DB_USER.*DB_PASSWORD.*DB_NAME/s);
|
|
});
|
|
});
|