Public/Wait-CreateService.Tests.ps1

Set-StrictMode -Version Latest

BeforeAll {
    . "$PSScriptRoot\Wait-CreateService.ps1"
    . "$PSScriptRoot\Get-SpaceSummary.ps1"
    . "$PSScriptRoot\Wait-Until.ps1"
}

Describe "Wait-CreateService" {
    BeforeAll {
        [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')]
        $TargetSpace = [PSCustomObject]@{}
        $SpaceSummary = [PSCustomObject]@{
            services = @(
                [PSCustomObject]@{
                    name="service1"
                    last_operation = @{
                        type = "create"
                        state = ""
                    }
                }

            )
        }
        [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')]
        $TargetServiceInstance = [PSCustomObject]@{
            entity=@{
                name="service1"
            }
        }
        Mock Get-SpaceSummary { $SpaceSummary }
    }
    Context "service instance complete" {
        It "has state 'in progress' then retry $true" {
             $SpaceSummary.services[0].last_operation.state = "succeded"
             Mock Wait-Until { (& $ScriptBlock) | Should -Be $true }
             Wait-CreateService -Space $TargetSpace -ServiceInstance $TargetServiceInstance
             Should -Invoke Wait-Until
             Should -Invoke Get-SpaceSummary -ParameterFilter { $Space -eq $TargetSpace }
        }
        It "has state not 'in progress' then retry $false " {
            $SpaceSummary.services[0].last_operation.state = "in progress"
            Mock Wait-Until { (& $ScriptBlock) | Should -Be $false }
            Wait-CreateService -Space $TargetSpace -ServiceInstance $TargetServiceInstance
            Should -Invoke Wait-Until
            Should -Invoke Get-SpaceSummary -ParameterFilter { $Space -eq $TargetSpace }
       }
    }
    Context "parameters" {
        It "ensures Space is not null" {
            { Wait-CreateService -Space $null -ServiceInstance $TargetServiceInstance } | Should -Throw "*Cannot validate argument on parameter 'Space'. The argument is null or empty*"
        }
        It "ensures ServiceInstance is not null" {
            { Wait-CreateService -Space $TargetSpace -ServiceInstance $null } | Should -Throw "*Cannot validate argument on parameter 'ServiceInstance'. The argument is null or empty*"
        }
        It "supports Space from pipeline" {
            $SpaceSummary.services[0].last_operation.state = "succeded"
            Mock Wait-Until { & $ScriptBlock }
            $TargetSpace | Wait-CreateService -ServiceInstance $TargetServiceInstance
        }
        It "supports positional" {
            $SpaceSummary.services[0].last_operation.state = "succeded"
            Mock Wait-Until { & $ScriptBlock } -Verifiable -ParameterFilter {$Seconds -eq 34 -and $Timeout -eq 35}
            Wait-CreateService $TargetSpace $TargetServiceInstance 34 35
        }
        It "defaults" {
            $SpaceSummary.services[0].last_operation.state = "succeded"
            Mock Wait-Until { & $ScriptBlock } -Verifiable -ParameterFilter {$Seconds -eq 3 -and $Timeout -eq 900}
            Wait-CreateService $TargetSpace $TargetServiceInstance
        }
    }
}