Public/Wait-RemoveSpace.Tests.ps1
Set-StrictMode -Version Latest BeforeAll { . "$PSScriptRoot\Wait-RemoveSpace.ps1" . "$PSScriptRoot\Remove-Space.ps1" . "$PSScriptRoot\Wait-JobStatus.ps1" . "$PSScriptRoot\..\Private\Wait-Until.ps1" } Describe "Wait-RemoveSpace" { BeforeAll { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] $TargetSpace = [PSCustomObject]@{} $TargetJob = [PSCustomObject]@{} $JobStatus = [PSCustomObject]@{entity=@{status=""}} Mock Wait-JobStatus { $JobStatus } Mock Remove-Space { $TargetJob } } Context "job status" { It "has state not 'failed' then $true" { $JobStatus.entity.status="in progress" Mock Wait-Until { (& $ScriptBlock) | Should -Be $true } Wait-RemoveSpace -Space $TargetSpace Should -Invoke Wait-JobStatus -ParameterFilter { $Job -eq $TargetJob } Should -Invoke Remove-Space -ParameterFilter { $Space -eq $TargetSpace } } It "has state 'failed' then $false" { $JobStatus.entity.status="failed" Mock Wait-Until { (& $ScriptBlock) | Should -Be $false } Wait-RemoveSpace -Space $TargetSpace Should -Invoke Wait-JobStatus -ParameterFilter { $Job -eq $TargetJob } Should -Invoke Remove-Space -ParameterFilter { $Space -eq $TargetSpace } } It "passes Seconds and Timeout to Wait-Until" { $JobStatus.entity.status="in progress" Mock Wait-Until { (& $ScriptBlock) | Should -Be $true } -Verifiable -ParameterFilter { $Seconds -eq 33 -and $Timeout -eq 34 } Wait-RemoveSpace -Space $TargetSpace -Seconds 33 -Timeout 34 Should -Invoke Wait-JobStatus -ParameterFilter { $Job -eq $TargetJob } Should -Invoke Remove-Space -ParameterFilter { $Space -eq $TargetSpace } } } Context "parameters" { It "ensures 'Space' is not null" { { Wait-RemoveSpace -Space $null } | Should -Throw "*Cannot validate argument on parameter 'Space'. The argument is null or empty*" } It "supports 'Space' from pipeline" { $JobStatus.entity.status="in progress" Mock Wait-Until { (& $ScriptBlock) | Should -Be $true } $TargetSpace | Wait-RemoveSpace Should -Invoke Wait-JobStatus -ParameterFilter { $Job -eq $TargetJob } Should -Invoke Remove-Space -ParameterFilter { $Space -eq $TargetSpace } } It "supports positional parameters" { $JobStatus.entity.status="in progress" Mock Wait-Until { (& $ScriptBlock) | Should -Be $true } -Verifiable -ParameterFilter { $Seconds -eq 1 -and $Timeout -eq 2 } Wait-RemoveSpace $TargetSpace 1 2 Should -Invoke Wait-JobStatus -ParameterFilter { $Job -eq $TargetJob } Should -Invoke Remove-Space -ParameterFilter { $Space -eq $TargetSpace } } It "defaults" { $JobStatus.entity.status="in progress" Mock Wait-Until { (& $ScriptBlock) | Should -Be $true } -Verifiable -ParameterFilter { $Seconds -eq 3 -and $Timeout -eq 900 } Wait-RemoveSpace $TargetSpace Should -Invoke Wait-JobStatus -ParameterFilter { $Job -eq $TargetJob } Should -Invoke Remove-Space -ParameterFilter { $Space -eq $TargetSpace } } } } |