config.test.ts•2.92 kB
import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest';
// Mock von process und dotenv
vi.mock('node:path', () => ({
default: {
dirname: vi.fn(() => '/mock/dir'),
resolve: vi.fn(() => '/mock/path/.env')
}
}));
vi.mock('dotenv', () => ({
default: {
config: vi.fn()
}
}));
describe('Konfiguration', () => {
// Speichere originale Umgebungsvariablen
const originalEnv = { ...process.env };
const originalExit = process.exit;
beforeEach(() => {
// Mock der process.exit
process.exit = vi.fn() as unknown as (code?: number) => never;
// Zuvor geladene Module löschen
vi.resetModules();
// Umgebungsvariablen zurücksetzen
process.env = { ...originalEnv };
// Grundlegende API-Credentials setzen, die für das Laden der Konfiguration benötigt werden
process.env.DB_TIMETABLE_CLIENT_ID = 'test-client-id';
process.env.DB_TIMETABLE_CLIENT_SECRET = 'test-client-secret';
});
afterEach(() => {
// Originale Umgebungsvariablen und Exit-Funktion wiederherstellen
process.env = originalEnv;
process.exit = originalExit;
vi.clearAllMocks();
});
test('lädt die Standardkonfiguration, wenn keine Umgebungsvariablen gesetzt sind', async () => {
const { config } = await import('../config.js');
expect(config.server.transportType).toBe('stdio');
expect(config.server.port).toBe(8080);
expect(config.server.endpoint).toBe('/sse');
expect(config.logging.level).toBe('info');
expect(config.api.baseUrl).toBe('https://apis.deutschebahn.com/db-api-marketplace/apis/timetables/v1');
});
test('nutzt Umgebungsvariablen, wenn gesetzt', async () => {
process.env.TRANSPORT_TYPE = 'sse';
process.env.PORT = '9000';
process.env.SSE_ENDPOINT = '/custom-endpoint';
process.env.LOG_LEVEL = 'debug';
const { config } = await import('../config.js');
expect(config.server.transportType).toBe('sse');
expect(config.server.port).toBe(9000);
expect(config.server.endpoint).toBe('/custom-endpoint');
expect(config.logging.level).toBe('debug');
});
test('beendet den Prozess, wenn API-Credentials fehlen', async () => {
// Entferne API-Credentials
process.env.DB_TIMETABLE_CLIENT_ID = '';
process.env.DB_TIMETABLE_CLIENT_SECRET = '';
// Ausgabe umlenken, um Fehlermeldungen zu unterdrücken
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
try {
await import('../config.js');
} catch (e) {
// Ignorieren, da der Prozess beendet werden würde
}
expect(process.exit).toHaveBeenCalledWith(1);
expect(consoleSpy).toHaveBeenCalled();
consoleSpy.mockRestore();
});
});