import { describe, it, expect } from 'vitest' import { isParameterCoveredByInventory, suggestInventoryPath, } from '../../../app/utils/inventory_coverage.js' describe('isParameterCoveredByInventory', () => { it('returns true for subtree match (path ending with dot)', () => { const inventoryPaths = [{ path: 'InternetGatewayDevice.ManagementServer.' }] expect( isParameterCoveredByInventory( 'InternetGatewayDevice.ManagementServer.PeriodicInformInterval', inventoryPaths ) ).toBe(true) }) it('returns true for exact match (path without trailing dot)', () => { const inventoryPaths = [ { path: 'InternetGatewayDevice.ManagementServer.PeriodicInformInterval' }, ] expect( isParameterCoveredByInventory( 'InternetGatewayDevice.ManagementServer.PeriodicInformInterval', inventoryPaths ) ).toBe(true) }) it('returns false when parameter is not covered', () => { const inventoryPaths = [{ path: 'InternetGatewayDevice.DeviceInfo.' }] expect( isParameterCoveredByInventory( 'InternetGatewayDevice.ManagementServer.PeriodicInformInterval', inventoryPaths ) ).toBe(false) }) it('returns false for empty inventory', () => { expect( isParameterCoveredByInventory( 'InternetGatewayDevice.ManagementServer.PeriodicInformInterval', [] ) ).toBe(false) }) it('handles multiple inventory paths', () => { const inventoryPaths = [ { path: 'InternetGatewayDevice.DeviceInfo.' }, { path: 'InternetGatewayDevice.ManagementServer.' }, ] expect( isParameterCoveredByInventory( 'InternetGatewayDevice.ManagementServer.PeriodicInformInterval', inventoryPaths ) ).toBe(true) }) it('does not match partial path names without trailing dot', () => { const inventoryPaths = [{ path: 'InternetGatewayDevice.Man' }] expect( isParameterCoveredByInventory( 'InternetGatewayDevice.ManagementServer.PeriodicInformInterval', inventoryPaths ) ).toBe(false) }) }) describe('suggestInventoryPath', () => { it('removes the leaf name and adds trailing dot', () => { expect( suggestInventoryPath('InternetGatewayDevice.ManagementServer.PeriodicInformInterval') ).toBe('InternetGatewayDevice.ManagementServer.') }) it('handles deeply nested paths', () => { expect( suggestInventoryPath('InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.Name') ).toBe('InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.') }) it('handles single-level path', () => { expect(suggestInventoryPath('ParameterName')).toBe('.') }) })