Tests/Public/Get-OnypheDiscoveryCategories.Tests.ps1

BeforeDiscovery {
    Import-Module (Join-Path $PSScriptRoot '..\..\Use-Onyphe.psd1') -DisableNameChecking -Force
}

Describe 'Get-OnypheDiscoveryCategories' -Tag 'Unit' {
    BeforeEach {
        Mock -ModuleName Use-Onyphe Read-OnypheConfigFile {
            [PSCustomObject]@{
                DataModel = [PSCustomObject]@{
                    apis      = @(
                        'user',
                        'bulk/simple/ctl/ip',
                        'bulk/discovery/datascan/asset',
                        'bulk/discovery/resolver/asset',
                        'bulk/discovery/vulnscan/asset'
                    )
                    filters   = @('ip')
                    functions = @('exists')
                }
            }
        }
    }

    It 'extracts the unique discovery category (third path segment) from bulk/discovery/* entries' {
        $Result = @(Get-OnypheDiscoveryCategories)
        $Result | Should -Contain 'datascan'
        $Result | Should -Contain 'resolver'
        $Result | Should -Contain 'vulnscan'
    }

    It 'excludes bulk/simple/* entries (not bulk/discovery/*)' {
        $Result = @(Get-OnypheDiscoveryCategories)
        $Result | Should -Not -Contain 'ctl'
    }

    It 'returns nothing when no bulk/discovery/* entry is present (e.g. no Griffin View subscription)' {
        Mock -ModuleName Use-Onyphe Read-OnypheConfigFile {
            [PSCustomObject]@{
                DataModel = [PSCustomObject]@{
                    apis      = @('user', 'bulk/simple/ctl/ip')
                    filters   = @('ip')
                    functions = @('exists')
                }
            }
        }

        Get-OnypheDiscoveryCategories | Should -BeNullOrEmpty
    }

    It 'returns nothing when the data model has not been generated yet' {
        Mock -ModuleName Use-Onyphe Read-OnypheConfigFile {
            [PSCustomObject]@{ DataModel = [PSCustomObject]@{ apis = $null; filters = $null; functions = $null } }
        }

        Get-OnypheDiscoveryCategories | Should -BeNullOrEmpty
    }
}