Tests/ADOpsKit.Module.Tests.ps1

Import-Module "$PSScriptRoot\..\ADOpsKit.psd1" -Force -ErrorAction Stop

Describe "ADOpsKit Module" {

    Context "Module loads correctly" {

        It "Should import without errors" {
            { Import-Module "$PSScriptRoot\..\ADOpsKit.psd1" -Force } | Should -Not -Throw
        }

        It "Should be version 1.1.2 or higher" {
            (Get-Module ADOpsKit).Version | Should -BeGreaterOrEqual ([version]'1.1.2')
        }

        It "Should export exactly 11 functions" {
            (Get-Command -Module ADOpsKit).Count | Should -Be 11
        }
    }

    Context "All expected functions are exported" {

        $expectedFunctions = @(
            'Get-AccountLockoutReport',
            'Get-InsecureLDAPBinds',
            'Enable-DCPerformanceBaseline',
            'Get-ADForestHealth',
            'Test-DCPortHealth',
            'Get-ADArchitectureAssessment',
            'Get-ADReplicationTopologyDiagram',
            'Get-GPOInventory',
            'Get-GPOInventoryWithSettings',
            'Get-EntraConnectSyncStatus',
            'Register-ADOpsKitScheduledTasks'
        )

        It "Should export <_>" -ForEach $expectedFunctions {
            Get-Command -Module ADOpsKit -Name $_ | Should -Not -BeNullOrEmpty
        }
    }

    Context "Comment-based help is present on all functions" {

        $functions = Get-Command -Module ADOpsKit

        It "<_.Name> should have a Synopsis" -ForEach $functions {
            (Get-Help $_.Name).Synopsis | Should -Not -BeNullOrEmpty
        }

        It "<_.Name> should have a Description" -ForEach $functions {
            (Get-Help $_.Name).Description | Should -Not -BeNullOrEmpty
        }
    }
}