const path = require('path'); const fs = require('fs'); const os = require('os'); describe('load-admins', () => { const originalEnv = { ...process.env }; let tmpDir; beforeEach(() => { tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'admins-test-')); delete process.env.ADMIN_CONFIG_PATH; delete process.env.ADMIN_KEY; }); afterEach(() => { process.env = { ...originalEnv }; fs.rmSync(tmpDir, { recursive: true, force: true }); jest.resetModules(); }); function writeConfig(admins) { const filePath = path.join(tmpDir, 'admins.json'); fs.writeFileSync(filePath, JSON.stringify(admins)); return filePath; } test('loads admins from ADMIN_CONFIG_PATH', () => { const configPath = writeConfig([ { name: 'Alice', key: 'key-a' }, { name: 'Bob', key: 'key-b' } ]); process.env.ADMIN_CONFIG_PATH = configPath; const { findAdminByKey } = require('../../backend/config/load-admins'); expect(findAdminByKey('key-a')).toEqual({ name: 'Alice' }); expect(findAdminByKey('key-b')).toEqual({ name: 'Bob' }); expect(findAdminByKey('wrong')).toBeNull(); }); test('falls back to ADMIN_KEY when no config file', () => { process.env.ADMIN_CONFIG_PATH = path.join(tmpDir, 'nonexistent.json'); process.env.ADMIN_KEY = 'legacy-key'; const { findAdminByKey } = require('../../backend/config/load-admins'); expect(findAdminByKey('legacy-key')).toEqual({ name: 'Admin' }); expect(findAdminByKey('wrong')).toBeNull(); }); test('throws when neither config file nor ADMIN_KEY exists', () => { process.env.ADMIN_CONFIG_PATH = path.join(tmpDir, 'nonexistent.json'); expect(() => { require('../../backend/config/load-admins'); }).toThrow(); }); test('rejects duplicate admin names', () => { const configPath = writeConfig([ { name: 'Alice', key: 'key-a' }, { name: 'Alice', key: 'key-b' } ]); process.env.ADMIN_CONFIG_PATH = configPath; expect(() => { require('../../backend/config/load-admins'); }).toThrow(/duplicate/i); }); test('rejects duplicate keys', () => { const configPath = writeConfig([ { name: 'Alice', key: 'same-key' }, { name: 'Bob', key: 'same-key' } ]); process.env.ADMIN_CONFIG_PATH = configPath; expect(() => { require('../../backend/config/load-admins'); }).toThrow(/duplicate/i); }); });