/** * Tests for zone-scoped capability lookup */ import { afterEach, beforeEach, describe, expect, test } from 'bun:test'; import type { DbClient } from '../db/client'; import { cleanupTestDatabase, setupTestDatabase } from '../test-utils/database'; import { findAllCapabilityProviders, findCapabilityProvider } from './lookup'; describe('Zone-Scoped Capability Lookup', () => { let db: DbClient; beforeEach(async () => { db = await setupTestDatabase(); // Insert test modules db.$client.run( `INSERT INTO modules (id, name, version, source_path, manifest_data) VALUES ('greenwave', 'GreenWave', '1.0.0', '/path', '{}')`, ); db.$client.run( `INSERT INTO modules (id, name, version, source_path, manifest_data) VALUES ('iptables', 'iptables', '1.0.0', '/path', '{}')`, ); db.$client.run( `INSERT INTO modules (id, name, version, source_path, manifest_data) VALUES ('gmail', 'Gmail', '1.0.0', '/path', '{}')`, ); }); afterEach(async () => { await cleanupTestDatabase(db); }); describe('findCapabilityProvider', () => { test('returns null when no providers exist', () => { const result = findCapabilityProvider('firewall', db); expect(result).toBeNull(); }); test('returns zone-agnostic provider without zone filter', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('gmail', 'email_reader', '1.0.0', '{}', NULL)`, ); const result = findCapabilityProvider('email_reader', db); expect(result).not.toBeNull(); expect(result?.moduleId).toBe('gmail'); }); test('returns zone-agnostic provider when zone is specified but no zone-scoped match', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('gmail', 'email_reader', '1.0.0', '{}', NULL)`, ); const result = findCapabilityProvider('email_reader', db, 'dmz'); expect(result).not.toBeNull(); expect(result?.moduleId).toBe('gmail'); }); test('returns zone-scoped provider when zone matches', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('iptables', 'firewall', '1.0.0', '{}', '["dmz","app","secure"]')`, ); const result = findCapabilityProvider('firewall', db, 'dmz'); expect(result).not.toBeNull(); expect(result?.moduleId).toBe('iptables'); }); test('returns null when zone does not match any provider', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('iptables', 'firewall', '1.0.0', '{}', '["dmz"]')`, ); const result = findCapabilityProvider('firewall', db, 'external'); expect(result).toBeNull(); }); test('selects correct provider from multiple zone-scoped providers', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('greenwave', 'firewall', '1.0.0', '{"has_external":true}', '["internal"]')`, ); db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('iptables', 'firewall', '1.0.0', '{}', '["dmz","app","secure"]')`, ); const dmzResult = findCapabilityProvider('firewall', db, 'dmz'); expect(dmzResult?.moduleId).toBe('iptables'); const internalResult = findCapabilityProvider('firewall', db, 'internal'); expect(internalResult?.moduleId).toBe('greenwave'); }); test('returns first provider when no zone specified and multiple exist', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('greenwave', 'firewall', '1.0.0', '{}', '["internal"]')`, ); db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('iptables', 'firewall', '1.0.0', '{}', '["dmz"]')`, ); const result = findCapabilityProvider('firewall', db); expect(result).not.toBeNull(); // Returns first one found (order depends on DB insert order) }); test('includes zones in returned info', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('iptables', 'firewall', '1.0.0', '{"nat_ip":"192.168.0.253"}', '["dmz","app"]')`, ); const result = findCapabilityProvider('firewall', db, 'dmz'); expect(result?.zones).toEqual(['dmz', 'app']); expect(result?.data).toEqual({ nat_ip: '192.168.0.253' }); }); }); describe('findAllCapabilityProviders', () => { test('returns empty array when no providers exist', () => { const results = findAllCapabilityProviders('firewall', db); expect(results).toEqual([]); }); test('returns all providers of a capability', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('greenwave', 'firewall', '1.0.0', '{}', '["internal"]')`, ); db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('iptables', 'firewall', '1.0.0', '{}', '["dmz"]')`, ); const results = findAllCapabilityProviders('firewall', db); expect(results).toHaveLength(2); const moduleIds = results.map((r) => r.moduleId).sort(); expect(moduleIds).toEqual(['greenwave', 'iptables']); }); test('does not return providers of different capabilities', () => { db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('greenwave', 'firewall', '1.0.0', '{}', '["internal"]')`, ); db.$client.run( `INSERT INTO capabilities (module_id, capability_name, version, data, zones) VALUES ('gmail', 'email_reader', '1.0.0', '{}', NULL)`, ); const firewalls = findAllCapabilityProviders('firewall', db); expect(firewalls).toHaveLength(1); expect(firewalls[0].moduleId).toBe('greenwave'); }); }); });