tests/Unit/Public/Get-sqmBlockingReport.Tests.ps1

#Requires -Modules Pester
<#
.SYNOPSIS
    Unit Tests fuer Get-sqmBlockingReport
#>


BeforeAll {
    . "$PSScriptRoot\..\..\..\tests\TestHelpers.ps1"
    Import-sqmTestModule
    $script:TestDir = New-TempTestDirectory
}

AfterAll {
    if (Test-Path $script:TestDir) { Remove-Item $script:TestDir -Recurse -Force }
    if (Get-Module sqmSQLTool) { Remove-Module sqmSQLTool -Force }
    $env:MSSQLTOOLS_SKIP_AUTO_UPDATE = $null
}

Describe 'Get-sqmBlockingReport' {

    Context 'Parameter-Validierung' {
        It 'Funktion existiert' {
            Get-Command Get-sqmBlockingReport | Should -Not -BeNullOrEmpty
        }

        It 'MinWaitSeconds Parameter existiert' {
            (Get-Command Get-sqmBlockingReport).Parameters.ContainsKey('MinWaitSeconds') | Should -Be $true
        }

        It 'OutputPath Parameter existiert' {
            (Get-Command Get-sqmBlockingReport).Parameters.ContainsKey('OutputPath') | Should -Be $true
        }
    }

    Context 'Ausfuehrung mit gemockten dbatools' {
        BeforeAll {
            Mock -ModuleName sqmSQLTool Connect-DbaInstance { New-MockSqlInstance }
            Mock -ModuleName sqmSQLTool Invoke-DbaQuery {
                @([PSCustomObject]@{
                    BlockedSpid      = 55
                    BlockingSpid     = 42
                    WaitTimeSeconds  = 30
                    DatabaseName     = 'TestDB'
                    BlockedQuery     = 'SELECT * FROM dbo.Test'
                    BlockingQuery    = 'UPDATE dbo.Test SET Col=1'
                    BlockedLoginName = 'domain\user1'
                })
            }
            Mock -ModuleName sqmSQLTool Invoke-sqmLogging { }
        }

        It 'Laeuft ohne Fehler mit gemockten Daten durch' {
            { Get-sqmBlockingReport -SqlInstance 'TESTSERVER' -OutputPath $script:TestDir } |
                Should -Not -Throw
        }
    }
}