import { describe, it, expect } from 'vitest';
import { alertTriggersRouter } from './alertTriggers.ts';

describe('alertTriggersRouter', () => {
  describe('router structure', () => {
    it('should have all required procedures', () => {
      const procedures = alertTriggersRouter._def.procedures;

      expect(procedures).toHaveProperty('getThresholds');
      expect(procedures).toHaveProperty('updateThreshold');
      expect(procedures).toHaveProperty('getActiveAlerts');
      expect(procedures).toHaveProperty('checkMetrics');
      expect(procedures).toHaveProperty('resolveAlert');
      expect(procedures).toHaveProperty('acknowledgeAlert');
      expect(procedures).toHaveProperty('getAlertHistory');
      expect(procedures).toHaveProperty('getAlertStats');
      expect(procedures).toHaveProperty('startMonitoring');
      expect(procedures).toHaveProperty('getMonitoringStatus');
      expect(procedures).toHaveProperty('bulkResolveAlerts');
      expect(procedures).toHaveProperty('bulkAcknowledgeAlerts');
    });

    it('should have exactly 12 procedures', () => {
      const procedures = alertTriggersRouter._def.procedures;
      const procedureNames = Object.keys(procedures);

      expect(procedureNames).toHaveLength(12);
    });

    it('should have all procedures defined', () => {
      const procedures = alertTriggersRouter._def.procedures;

      Object.values(procedures).forEach((procedure) => {
        expect(procedure).toBeDefined();
        expect(procedure._def).toBeDefined();
      });
    });

    it('should have query procedures', () => {
      const procedures = alertTriggersRouter._def.procedures;

      expect(procedures.getThresholds).toBeDefined();
      expect(procedures.getActiveAlerts).toBeDefined();
      expect(procedures.getAlertHistory).toBeDefined();
      expect(procedures.getAlertStats).toBeDefined();
      expect(procedures.getMonitoringStatus).toBeDefined();
    });

    it('should have mutation procedures', () => {
      const procedures = alertTriggersRouter._def.procedures;

      expect(procedures.updateThreshold).toBeDefined();
      expect(procedures.checkMetrics).toBeDefined();
      expect(procedures.resolveAlert).toBeDefined();
      expect(procedures.acknowledgeAlert).toBeDefined();
      expect(procedures.startMonitoring).toBeDefined();
      expect(procedures.bulkResolveAlerts).toBeDefined();
      expect(procedures.bulkAcknowledgeAlerts).toBeDefined();
    });
  });
});
