. $PSScriptRoot\..\..\Load-PesterModules.ps1 $here = Split-Path -Parent $MyInvocation.MyCommand.Path $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.' $functionPath = Join-Path -Path $here -ChildPath $sut Write-Host "Overriding SUT: $functionPath" Import-Module $functionPath -Force $moduleForMock = "" Describe "Get-CurrentInstanceAvailabilityZone" { Context "When Not Running in AWS" { Mock -ModuleName $moduleForMock Test-IsAws { return $false } Mock -ModuleName $moduleForMock Write-Warning {} Mock -ModuleName $moduleForMock Get-InstanceMetadata {} Get-CurrentInstanceAvailabilityZone -WarningAction SilentlyContinue It "Calls Test-IsAws" { Assert-MockCalled -ModuleName $moduleForMock Test-IsAws -Times 1 -Exactly -Scope Context } It "Writes a Warning" { Assert-MockCalled -ModuleName $moduleForMock Write-Warning -Times 1 -Exactly -Scope Context } It "Returns Without Calling AWS APIs" { Assert-MockCalled -ModuleName $moduleForMock Get-InstanceMetadata -ParameterFilter {$Endpoint -Match $azEndpointPath } -Times 0 -Exactly -Scope Context } } Context "When Running in AWS" { $azEndpointPath = "meta-data/placement/availability-zone" Mock -ModuleName $moduleForMock Test-IsAws { return $true } Mock -ModuleName $moduleForMock Write-Warning {} Mock -ModuleName $moduleForMock Get-InstanceMetadata { return (New-Object PSObject -Property @{ "StatusCode" = "200"; "Content" = "us-fake-1a"; } ) } It "Returns the Instance AvailabilityZone" { $testResult = Get-CurrentInstanceAvailabilityZone Assert-MockCalled -ModuleName $moduleForMock Get-InstanceMetadata -ParameterFilter {$Endpoint -Match $azEndpointPath } -Times 1 -Exactly -Scope It $testResult | Should -Be "us-fake-1a" } It "Throws if not success" { Mock -ModuleName $moduleForMock Get-InstanceMetadata { return (New-Object PSObject -Property @{ "StatusCode" = "404"; "Content" = "Not found"; } ) } {Get-CurrentInstanceAvailabilityZone} | Should -Throw } } }