. $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-AvailabilityZone" { # Load up AWSPowerShell for Mocking if Available $awsPowerShellLoaded = $false if ($null -ne (Get-Module -ListAvailable AWSPowerShell)) { Import-AWSModule # EC2 $awsPowerShellLoaded = $true } else { Write-Warning "AWSPowerShell Module *NOT* installed. Some tests will not execute." } Context "When Not Running in AWS" { Mock -ModuleName $moduleForMock Test-IsAws { return $false } Mock -ModuleName $moduleForMock Write-Warning {} Mock -ModuleName $moduleForMock Invoke-WebRequest {} Mock -CommandName Get-CurrentInstanceAvailabilityZone -ModuleName $moduleForMock -MockWith { return $null } It "Returns Null When Not Run in AWS" { if (!($awsPowerShellLoaded)) { Set-ItResult -Inconclusive -Because "AWSPowerShell Not Installed" continue; } Mock -CommandName Write-Warning -MockWith { } -ModuleName $moduleForMock Mock -ModuleName Alkami.DevOps.Common Test-IsAws { return $false } Get-AvailabilityZone | Should -BeNullOrEmpty } } Context "When Running in AWS" { Mock -ModuleName $moduleForMock Test-IsAws { return $true } Mock -ModuleName $moduleForMock Write-Warning {} Mock -ModuleName $moduleForMock Get-EC2Instance { return @{ Instances = @( @{ Placement = @{ AvailabilityZone = "us-fake-1a" } } ) } } Mock -ModuleName $moduleForMock Get-CurrentInstanceAvailabilityZone { return "us-fake-2b" } It "Not-localhost Calls Get-EC2Instance and Returns the Instance AvailabilityZone" { $testResult = Get-AvailabilityZone -ComputerName "fakeweb01" Assert-MockCalled -ModuleName $moduleForMock Get-EC2Instance -Times 1 -Exactly -Scope It $testResult | Should -Be "us-fake-1a" } It "Localhost Calls Get-CurrentInstanceAvailabilityZone" { $testResult = Get-AvailabilityZone -ComputerName "localhost" Assert-MockCalled -ModuleName $moduleForMock Get-CurrentInstanceAvailabilityZone -Times 1 -Exactly -Scope It $testResult | Should -Be "us-fake-2b" } It "Explicit local hostname Calls Get-CurrentInstanceAvailabilityZone" { $localHostname = (hostname) $testResult = Get-AvailabilityZone -ComputerName $localHostname Assert-MockCalled -ModuleName $moduleForMock Get-CurrentInstanceAvailabilityZone -Times 1 -Exactly -Scope It $testResult | Should -Be "us-fake-2b" } It "No ComputerName(defaults to localhost) Calls Get-CurrentInstanceAvailabilityZone" { $testResult = Get-AvailabilityZone Assert-MockCalled -ModuleName $moduleForMock Get-CurrentInstanceAvailabilityZone -Times 1 -Exactly -Scope It $testResult | Should -Be "us-fake-2b" } } }