ps/Modules/Alkami.PowerShell.Common/Public/Get-AvailabilityZone.tests.ps1
2023-05-30 22:51:22 -07:00

89 lines
3.4 KiB
PowerShell

. $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"
}
}
}