import { describe, it, expect } from 'vitest'; describe('Notification Dispatcher', () => { const SEVERITY_ORDER: Record = { critical: 5, high: 4, medium: 3, low: 2, info: 1 }; it('dispatches to channels meeting severity threshold', () => { const incidentSeverity = 'high'; const channelMinSeverity = 'medium'; const incidentLevel = SEVERITY_ORDER[incidentSeverity] ?? 0; const minLevel = SEVERITY_ORDER[channelMinSeverity] ?? 0; expect(incidentLevel >= minLevel).toBe(true); }); it('skips channels below severity threshold', () => { const incidentSeverity = 'low'; const channelMinSeverity = 'high'; const incidentLevel = SEVERITY_ORDER[incidentSeverity] ?? 0; const minLevel = SEVERITY_ORDER[channelMinSeverity] ?? 0; expect(incidentLevel >= minLevel).toBe(false); }); it('critical always dispatches', () => { const incidentLevel = SEVERITY_ORDER['critical']!; for (const [, minLevel] of Object.entries(SEVERITY_ORDER)) { expect(incidentLevel >= minLevel).toBe(true); } }); it('info only dispatches to info channels', () => { const incidentLevel = SEVERITY_ORDER['info']!; expect(incidentLevel >= SEVERITY_ORDER['info']!).toBe(true); expect(incidentLevel >= SEVERITY_ORDER['low']!).toBe(false); }); }); describe('Slack Block Kit Builder', () => { it('maps severity to emoji', () => { const emojiMap: Record = { critical: '🔴', high: '🟠', medium: '🟡', low: 'đŸ”ĩ', info: 'â„šī¸', }; expect(emojiMap['critical']).toBe('🔴'); expect(emojiMap['high']).toBe('🟠'); expect(emojiMap['unknown']).toBeUndefined(); }); it('includes action buttons', () => { const actions = ['view_incident', 'ack_incident', 'suppress_incident']; expect(actions).toHaveLength(3); expect(actions).toContain('ack_incident'); }); });