Public/New-Space.Tests.ps1
Set-StrictMode -Version Latest BeforeAll { . "$PSScriptRoot\New-Space.ps1" . "$PSScriptRoot\..\Private\Get-BaseHost.ps1" . "$PSScriptRoot\..\Private\Get-Header.ps1" . "$PSScriptRoot\..\Private\Invoke-Retry.ps1" } Describe "New-Space" { BeforeAll { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] $TargetOrg = New-Object PsObject -Property @{metadata=@{guid="1"}} $TheContent = "{'foo':'bar'}" [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] $TargetName="space1" $TargetHeader = @{} Mock Invoke-Retry { & $ScriptBlock } -Verifiable Mock Get-BaseHost { "basehost" } -Verifiable Mock Get-Header { $TargetHeader } -Verifiable Mock Invoke-WebRequest {@{StatusCode=201;Content=$TheContent}} } # Context "API call" { # It "calls proper web request" { # Mock Invoke-WebRequest {@{StatusCode=201;Content=$TheContent}} # New-Space -Org $TargetOrg -Name $TargetName | Should MatchHashtable ($TheContent | ConvertFrom-Json) # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "organization_guid" = $TargetOrg.metadata.guid # "name" = $TargetName # } # # $hashtable = @{} # # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } | Out-Null # # $Uri -eq "basehost/v2/spaces" -and $Method -eq "Post" ` # # -and (Compare-HashTable $hashtable $MatchBody) -eq $null ` # # -and (Compare-HashTable $Header $TargetHeader) -eq $null # } # } # } Context "API return values" { It "Returns non 201 status" { Mock Invoke-WebRequest {@{StatusCode=400;Content=$TheContent}} { New-Space -Org $TargetOrg -Name $TargetName } | Should -Throw "*basehost/v2/spaces 400*" } } Context "parameters" { It "ensures 'Org' cannot be null" { { New-Space -Org $null -Name "x" } | Should -Throw "*Cannot validate argument on parameter 'Org'. The argument is null or empty*" } It "supports positional" { New-Space $TargetOrg $TargetName } It "supports 'Org' from pipeline" { $TargetOrg | New-Space -Name $TargetName } } } |