import { describe, expect, test } from 'bun:test'; import { auditServicesReachable } from './services-reachable'; describe('auditServicesReachable', () => { test('no findings when every service is reachable', async () => { const result = await auditServicesReachable({ results: [ { serviceId: 'home-proxmox', name: 'Home Proxmox', providerName: 'proxmox', reachable: true, }, { serviceId: 'do', name: 'DigitalOcean', providerName: 'digitalocean', reachable: true }, ], }); expect(result).toEqual([]); }); test('drift finding per unreachable service', async () => { const result = await auditServicesReachable({ results: [ { serviceId: 'home-proxmox', name: 'Home Proxmox', providerName: 'proxmox', reachable: false, message: 'Connection refused', }, ], }); expect(result).toHaveLength(1); expect(result[0]).toMatchObject({ category: 'services_reachable', severity: 'drift', code: 'service_unreachable', subject: 'home-proxmox', actionable: false, }); expect(result[0].message).toContain('Home Proxmox'); expect(result[0].details).toContain('Connection refused'); expect(result[0].remediation).toContain('celilo service set-credentials home-proxmox'); }); test('mixed report — only failures produce findings', async () => { const result = await auditServicesReachable({ results: [ { serviceId: 'good', name: 'Good', providerName: 'proxmox', reachable: true }, { serviceId: 'bad', name: 'Bad', providerName: 'proxmox', reachable: false, message: 'oops', }, ], }); expect(result.map((f) => f.subject)).toEqual(['bad']); }); });