Public/Remove-AllServiceBindings.Tests.ps1

Set-StrictMode -Version Latest

BeforeAll {
    . "$PSScriptRoot\Remove-AllServiceBindings.ps1"
    . "$PSScriptRoot\Get-SpaceSummary.ps1"
    . "$PSScriptRoot\Get-App.ps1"
    . "$PSScriptRoot\Get-ServiceBindings.ps1"
    . "$PSScriptRoot\Remove-ServiceBinding.ps1"
    }

Describe "Remove-AllServiceBindings" {
    BeforeAll {
        [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')]
        $TargetSpace = [PSCustomObject]@{name="myspace"}
    }
    Context "calls depdendent cmdlets" {
        It "has no apps" {
            $TargetSpaceSummary = @{apps=@()}
            Mock Get-SpaceSummary { $TargetSpaceSummary }
            Remove-AllServiceBindings $TargetSpace
            Should -Invoke Get-SpaceSummary -ParameterFilter { $Space -eq $TargetSpace }
        }
        It "app with no bindings" {
            $TargetApp = @{name="app1"}
            $TargetSpaceSummary = @{apps=@($TargetApp)}
            $TargetServiceBindings = @()
            Mock Get-SpaceSummary { $TargetSpaceSummary }
            Mock Get-App { $TargetApp }
            Mock Get-ServiceBindings { $TargetServiceBindings }
            Remove-AllServiceBindings $TargetSpace
            Should -Invoke Get-SpaceSummary -ParameterFilter { $Space -eq $TargetSpace }
            Should -Invoke Get-App -ParameterFilter { $Space -eq $TargetSpace -and $Name -eq $TargetApp.name }
            Should -Invoke Get-ServiceBindings -ParameterFilter { $App -eq $TargetApp }
        }
        It "app with one binding is removed" {
            $TargetApp = @{name="app1"}
            $TargetSpaceSummary = @{apps=@($TargetApp)}
            $TargetServiceBinding = @{}
            $TargetServiceBindings = @($TargetServiceBinding)
            Mock Get-SpaceSummary { $TargetSpaceSummary }
            Mock Get-App { $TargetApp }
            Mock Get-ServiceBindings { $TargetServiceBindings }
            Mock Remove-ServiceBinding
            Remove-AllServiceBindings $TargetSpace
            Should -Invoke Get-SpaceSummary -ParameterFilter { $Space -eq $TargetSpace }
            Should -Invoke Get-App -ParameterFilter { $Space -eq $TargetSpace -and $Name -eq $TargetApp.name }
            Should -Invoke Get-ServiceBindings -ParameterFilter { $App -eq $TargetApp }
            Should -Invoke Remove-ServiceBinding -ParameterFilter { $ServiceBinding -eq $TargetServiceBinding }
        }
    }
    Context "parameters" {
        It "ensures 'Space' is not null" {
            {Remove-AllServiceBindings -Space $null } | Should -Throw "*Cannot validate argument on parameter 'Space'. The argument is null or empty*"
        }
        It "supports positional" {
            { Remove-AllServiceBindings $null } | Should -Throw "*Cannot validate argument on parameter 'Space'. The argument is null or empty*"
        }
    }
}