Files
uptime-kuma-discord-bot/tests/config.test.ts
T

141 lines
5.4 KiB
TypeScript

import { ConfigManager } from '../src/config/config';
describe('ConfigManager', () => {
let originalEnv: NodeJS.ProcessEnv;
beforeEach(() => {
// Save original environment
originalEnv = { ...process.env };
// Clear environment variables
delete process.env.DISCORD_BOT_TOKEN;
delete process.env.UPTIME_KUMA_URL;
delete process.env.UPTIME_KUMA_USERNAME;
delete process.env.UPTIME_KUMA_PASSWORD;
delete process.env.ADMIN_USER_IDS;
delete process.env.UPDATE_INTERVAL;
delete process.env.EMBED_COLOR;
});
afterEach(() => {
// Restore original environment
process.env = originalEnv;
});
test('should load valid configuration', () => {
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = 'http://localhost:3001';
process.env.UPTIME_KUMA_USERNAME = 'test-user';
process.env.UPTIME_KUMA_PASSWORD = 'test-password';
process.env.ADMIN_USER_IDS = '123456789,987654321';
process.env.UPDATE_INTERVAL = '30';
process.env.EMBED_COLOR = '16711680';
const configManager = new ConfigManager();
const config = configManager.getConfig();
expect(config.discord.token).toBe('test-token');
expect(config.discord.adminUserIds).toEqual(['123456789', '987654321']);
expect(config.uptimeKuma.url).toBe('http://localhost:3001');
expect(config.uptimeKuma.username).toBe('test-user');
expect(config.uptimeKuma.password).toBe('test-password');
expect(config.bot.updateInterval).toBe(30000); // 30 * 1000
expect(config.bot.embedColor).toBe(16711680);
});
test('should use default values when environment variables are not set', () => {
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = 'http://localhost:3001';
process.env.UPTIME_KUMA_USERNAME = 'test-user';
process.env.UPTIME_KUMA_PASSWORD = 'test-password';
const configManager = new ConfigManager();
const config = configManager.getConfig();
expect(config.discord.adminUserIds).toEqual([]);
expect(config.bot.updateInterval).toBe(60000); // 60 * 1000 (default)
expect(config.bot.embedColor).toBe(5814783); // default color
});
test('should parse admin user IDs correctly', () => {
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = 'http://localhost:3001';
process.env.UPTIME_KUMA_USERNAME = 'test-user';
process.env.UPTIME_KUMA_PASSWORD = 'test-password';
process.env.ADMIN_USER_IDS = '123456789, 987654321 , 555666777 ';
const configManager = new ConfigManager();
const config = configManager.getConfig();
expect(config.discord.adminUserIds).toEqual(['123456789', '987654321', '555666777']);
});
test('should handle empty admin user IDs', () => {
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = 'http://localhost:3001';
process.env.UPTIME_KUMA_USERNAME = 'test-user';
process.env.UPTIME_KUMA_PASSWORD = 'test-password';
process.env.ADMIN_USER_IDS = '';
const configManager = new ConfigManager();
const config = configManager.getConfig();
expect(config.discord.adminUserIds).toEqual([]);
});
test('should throw error when DISCORD_BOT_TOKEN is missing', () => {
process.env.UPTIME_KUMA_URL = 'http://localhost:3001';
process.env.UPTIME_KUMA_USERNAME = 'test-user';
process.env.UPTIME_KUMA_PASSWORD = 'test-password';
expect(() => new ConfigManager()).toThrow('DISCORD_BOT_TOKEN is required');
});
test('should throw error when UPTIME_KUMA_URL is empty', () => {
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = '';
process.env.UPTIME_KUMA_USERNAME = 'test-user';
process.env.UPTIME_KUMA_PASSWORD = 'test-password';
expect(() => new ConfigManager()).toThrow('UPTIME_KUMA_URL is required');
});
test('should throw error when UPTIME_KUMA_USERNAME is missing', () => {
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = 'http://localhost:3001';
process.env.UPTIME_KUMA_PASSWORD = 'test-password';
expect(() => new ConfigManager()).toThrow('UPTIME_KUMA_USERNAME is required');
});
test('should throw error when UPTIME_KUMA_PASSWORD is missing', () => {
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = 'http://localhost:3001';
process.env.UPTIME_KUMA_USERNAME = 'test-user';
expect(() => new ConfigManager()).toThrow('UPTIME_KUMA_PASSWORD is required');
});
test('should throw error when UPDATE_INTERVAL is too low', () => {
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = 'http://localhost:3001';
process.env.UPTIME_KUMA_USERNAME = 'test-user';
process.env.UPTIME_KUMA_PASSWORD = 'test-password';
process.env.UPDATE_INTERVAL = '5'; // Less than 10 seconds
expect(() => new ConfigManager()).toThrow('UPDATE_INTERVAL must be at least 10 seconds');
});
test('should throw error with multiple validation failures', () => {
// Missing multiple required fields
process.env.DISCORD_BOT_TOKEN = 'test-token';
process.env.UPTIME_KUMA_URL = '';
// Missing UPTIME_KUMA_USERNAME, UPTIME_KUMA_PASSWORD
expect(() => new ConfigManager()).toThrow('Configuration validation failed:');
expect(() => new ConfigManager()).toThrow('UPTIME_KUMA_URL is required');
expect(() => new ConfigManager()).toThrow('UPTIME_KUMA_USERNAME is required');
expect(() => new ConfigManager()).toThrow('UPTIME_KUMA_PASSWORD is required');
});
});