. $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-Environment" { Context "Happy Path" { It "Returns the Expected Environment Based on AWS Tags" { Mock -CommandName Get-CurrentInstanceTags -ModuleName $moduleForMock -MockWith { return $Global:MockedEnvironmentValue; } Mock -CommandName Test-IsAws -ModuleName $moduleForMock -MockWith { return $true } $Global:MockedEnvironmentValue = $Global:AlkamiTagValueEnvironmentDev Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentDev $Global:MockedEnvironmentValue = $Global:AlkamiTagValueEnvironmentQa Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentQa $Global:MockedEnvironmentValue = $Global:AlkamiTagValueEnvironmentSandbox Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentSandbox $Global:MockedEnvironmentValue = $Global:AlkamiTagValueEnvironmentStaging Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentStaging $Global:MockedEnvironmentValue = $Global:AlkamiTagValueEnvironmentProd Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentProd $Global:MockedEnvironmentValue = $Global:AlkamiTagValueEnvironmentDR Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentDR $Global:MockedEnvironmentValue = $Global:AlkamiTagValueEnvironmentLTM Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentLTM $Global:MockedEnvironmentValue = $Global:AlkamiTagValueEnvironmentLoadtest Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentLoadtest } It "Returns the Expected Environment Based on Machine Config Environment.Type Setting" { Mock -CommandName Test-IsAws -ModuleName $moduleForMock -MockWith { return $false } Mock -CommandName Get-AppSetting -ModuleName $moduleForMock -MockWith { return $Global:MockAppSettingValue; } $Global:MockAppSettingValue = "Development" Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentDev $Global:MockAppSettingValue = "TeamQA" Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentQa $Global:MockAppSettingValue = "QA" Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentQa $Global:MockAppSettingValue = "Staging" Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentStaging $Global:MockAppSettingValue = "Production" Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentProd } It "Returns the Expected Environment Based on (Shudder) Naming Convention" { Mock -CommandName Test-IsAws -ModuleName $moduleForMock -MockWith { return $false } Mock -CommandName Get-AppSetting -ModuleName $moduleForMock -MockWith { return $null; } $env:ComputerName = "ALK-PLA1-QA999999999999" Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentQa $env:ComputerName = "ALK-WIDGETSZ-WEB1" Get-Environment | Should -Be $Global:AlkamiTagValueEnvironmentDev } } Context "Errors and Unknowns" { It "Returns Unknown if the AWS Tag Value is Unexpected" { Mock -CommandName Test-IsAws -ModuleName $moduleForMock -MockWith { return $true } Mock -CommandName Get-CurrentInstanceTags -ModuleName $moduleForMock -MockWith { return $Global:MockedEnvironmentValue; } $Global:MockedEnvironmentValue = "You fool! You thought you could defeat me? With my power levels at OVER 50000?" Get-Environment | Should -Be "Unknown" } It "Returns Unknown if All Efforts At Finding a Value to Key Off of Fail" { Mock -CommandName Test-IsAws -ModuleName $moduleForMock -MockWith { return $false } Mock -CommandName Get-AppSetting -ModuleName $moduleForMock -MockWith { return $null; } $env:COMPUTERNAME = "WEB1234567" Get-Environment | Should -Be "Unknown" } It "Returns Unknown if The $Global:AlkamiTagKeyEnvironment Tag Doesn't Exist" { Mock -CommandName Test-IsAws -ModuleName $moduleForMock -MockWith { return $true } Mock -CommandName Get-CurrentInstanceTags -ModuleName $moduleForMock -MockWith { return $null; } Get-Environment | Should -Be "Unknown" } It "Returns Unknown if The $Global:AlkamiTagKeyEnvironment Tag Is Empty" { Mock -CommandName Test-IsAws -ModuleName $moduleForMock -MockWith { return $true } Mock -CommandName Get-CurrentInstanceTags -ModuleName $moduleForMock -MockWith { return ""; } Get-Environment | Should -Be "Unknown" } } }