Public/New-Service.Tests.ps1
# Set-StrictMode -Version Latest # BeforeAll { # . "$PSScriptRoot\New-Service.ps1" # . "$PSScriptRoot\..\Private\Get-BaseHost.ps1" # . "$PSScriptRoot\..\Private\Get-Header.ps1" # . "$PSScriptRoot\..\Private\Invoke-Retry.ps1" # } # Describe "New-Service" { # BeforeAll { # [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] # $Space = [PSCustomObject]@{metadata=@{guid="1"}} # $serviceplan1 = [PSCustomObject]@{entity=@{name="plan1"};metadata=@{guid="2"}} # $serviceplan2 = [PSCustomObject]@{entity=@{name="plan2"};metadata=@{guid="3"}} # [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] # $ServicePlans = @($serviceplan1,$serviceplan2) # [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignment', '', Justification='pester supported')] # $Name = "servicename1" # Mock Invoke-Retry { & $ScriptBlock } # } # It "throws when service plan not found" { # { New-Service -Space $Space -ServicePlans $ServicePlans -Plan "notfound" -Name $Name } | Should -Throw "*service plan not found*" # } # It "returns correct result when service_instances returns <StatusCode>" -TestCases @( @{StatusCode=202}, @{StatusCode=201}) { # param ($StatusCode) # Mock Get-baseHost { "http://google.com" } # Mock Get-Header { @{} } # $response = "{'foo': 'bar'}" # Mock Invoke-WebRequest { @{StatusCode=$StatusCode;Content=$response} } # New-Service -Space $Space -ServicePlans $ServicePlans -Plan "plan1" -Name $Name | Should MatchHashtable ($response | ConvertFrom-Json -AsHashtable) # } # It "it thows exception when service_instances returns <StatusCode>" -TestCases @( @{StatusCode=500}, @{StatusCode=401}) { # param ($StatusCode) # $response = "{'foo': 'bar'}" # Mock Get-baseHost { "http://google.com" } # Mock Get-Header { @{} } # Mock Invoke-WebRequest { @{StatusCode=$StatusCode;Content=$response} } # { New-Service -Space $Space -ServicePlans $ServicePlans -Plan "plan1" -Name $Name } | Should -Throw "http://google.com/v2/service_instances?accepts_incomplete=true $($StatusCode)" # } # It "thows exceptions when service_instances returns <StatusCode>" -TestCases @( @{StatusCode=204}) { # param ($StatusCode) # $response = "{'foo': 'bar'}" # Mock Get-baseHost { "http://google.com" } # Mock Get-Header { @{} } # Mock -Command Invoke-WebRequest -MockWith {@{StatusCode=$StatusCode;Content=$response}} # { New-Service -Space $Space -ServicePlans $ServicePlans -Plan "plan1" -Name $Name } | Should -Throw " http://google.com/v2/service_instances?accepts_incomplete=true $($StatusCode)" # } # Context "Correct results" { # BeforeAll { # $response = "{'foo': 'bar'}" # Mock Get-baseHost { "http://google.com" } # Mock Get-Header { @{} } # Mock Invoke-WebRequest { @{StatusCode=202;Content=$response} } # } # it "creates space" { # New-Service -Space $Space -ServicePlans $ServicePlans -Plan "plan1" -Name $Name | Should MatchHashtable ($response | ConvertFrom-Json) # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # } # Context "parameters" { # BeforeAll { # $response = "{'foo': 'bar'}" # Mock Get-baseHost { "http://google.com" } # Mock Get-Header { @{} } # Mock Invoke-WebRequest { @{StatusCode=202;Content=$response} } # } # It "ensures 'Space' cannot be null" { # { New-Service -Space $null -ServicePlans $ServicePlans -Plan "plan1" -Name $Name } | Should -Throw "Cannot validate argument on parameter 'Space'. The argument is null or empty" # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # It "ensures 'ServicePlans' cannot be null" { # { New-Service -Space $Space -ServicePlans $null -Plan "plan1" -Name $Name } | Should -Throw "Cannot validate argument on parameter 'ServicePlans'. The argument is null or empty" # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # It "ensures 'Plan' cannot be empty" { # { New-Service -Space $Space -ServicePlans $ServicePlans -Plan "" -Name $Name } | Should -Throw "Cannot validate argument on parameter 'Plan'. The argument is null or empty" # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # It "ensures 'Plan' cannot be null" { # { New-Service -Space $Space -ServicePlans $ServicePlans -Plan $null -Name $Name } | Should -Throw "Cannot validate argument on parameter 'Plan'. The argument is null or empty" # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # It "ensures 'Name' cannot be empty" { # { New-Service -Space $Space -ServicePlans $ServicePlans -Plan "plan1" -Name "" } | Should -Throw "Cannot validate argument on parameter 'Name'. The argument is null or empty" # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # It "ensures 'Name' cannot be null" { # { New-Service -Space $Space -ServicePlans $ServicePlans -Plan "plan1" -Name $null } | Should -Throw "Cannot validate argument on parameter 'Name'. The argument is null or empty" # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # It "support positional" { # New-Service $Space $ServicePlans "plan1" $Name | Should MatchHashtable ($response | ConvertFrom-Json) # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # It "supports 'Space' from pipeline" { # $Space | New-Service -ServicePlans $ServicePlans -Plan "plan1" -Name $Name | Should MatchHashtable ($response | ConvertFrom-Json) # Should -Invoke Invoke-WebRequest -ParameterFilter { # $MatchBody = @{ # "name" = $Name # "parameters" = @() # "service_plan_guid" = $serviceplan[0].metadata.guid # "space_guid" = $Space.metadata.guid # } # $hashtable = @{} # (ConvertFrom-Json $Body).psobject.properties | ForEach-Object { $hashtable[$_.Name] = $_.Value } # (Compare-HashTable $hashtable $MatchBody) -eq $null # } # } # } # } |