feat: add admin config loader with multi-key support
Made-with: Cursor
This commit is contained in:
80
tests/api/named-admins.test.js
Normal file
80
tests/api/named-admins.test.js
Normal file
@@ -0,0 +1,80 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user