tests/Private/Get-AzureTagData.Tests.ps1
|
BeforeAll { # Stub Az.Resources commands so Pester can create mocks when Az.Resources is not installed if (-not (Get-Command Get-AzTag -ErrorAction SilentlyContinue)) { $script:stubCreatedGetAzTag = $true function global:Get-AzTag { param([string]$ResourceId) } } Import-Module (Resolve-Path (Join-Path $PSScriptRoot '..\..\PSCumulus.psd1')).Path -Force } AfterAll { if ($script:stubCreatedGetAzTag) { Remove-Item -Path Function:global:Get-AzTag -ErrorAction SilentlyContinue } } Describe 'Get-AzureTagData' { Context 'when Az.Resources is not installed' { It 'throws when Get-AzTag is unavailable' { InModuleScope PSCumulus { Mock Assert-CommandAvailable { throw [System.Management.Automation.CommandNotFoundException]::new( "Required command 'Get-AzTag' was not found." ) } { Get-AzureTagData -ResourceId '/subscriptions/abc/vm/vm01' } | Should -Throw } } } Context 'when tags are returned' { BeforeAll { $script:mockTagWrapper = [pscustomobject]@{ Properties = [pscustomobject]@{ TagsProperty = @{ Environment = 'production' Team = 'platform' } } } } It 'returns a CloudRecord' { InModuleScope PSCumulus -Parameters @{ MockTagWrapper = $script:mockTagWrapper } { param($MockTagWrapper) Mock Assert-CommandAvailable {} Mock Get-AzTag { $MockTagWrapper } $result = Get-AzureTagData -ResourceId '/subscriptions/abc/virtualMachines/vm01' $result | Should -Not -BeNullOrEmpty } } It 'sets Name to the last segment of ResourceId' { InModuleScope PSCumulus -Parameters @{ MockTagWrapper = $script:mockTagWrapper } { param($MockTagWrapper) Mock Assert-CommandAvailable {} Mock Get-AzTag { $MockTagWrapper } $result = Get-AzureTagData -ResourceId '/subscriptions/abc/virtualMachines/vm01' $result.Name | Should -Be 'vm01' } } It 'sets Provider to Azure' { InModuleScope PSCumulus -Parameters @{ MockTagWrapper = $script:mockTagWrapper } { param($MockTagWrapper) Mock Assert-CommandAvailable {} Mock Get-AzTag { $MockTagWrapper } $result = Get-AzureTagData -ResourceId '/subscriptions/abc/virtualMachines/vm01' $result.Provider | Should -Be 'Azure' } } It 'includes ResourceId in Metadata' { InModuleScope PSCumulus -Parameters @{ MockTagWrapper = $script:mockTagWrapper } { param($MockTagWrapper) Mock Assert-CommandAvailable {} Mock Get-AzTag { $MockTagWrapper } $result = Get-AzureTagData -ResourceId '/subscriptions/abc/virtualMachines/vm01' $result.Metadata.ResourceId | Should -Be '/subscriptions/abc/virtualMachines/vm01' } } It 'includes Tags in Metadata' { InModuleScope PSCumulus -Parameters @{ MockTagWrapper = $script:mockTagWrapper } { param($MockTagWrapper) Mock Assert-CommandAvailable {} Mock Get-AzTag { $MockTagWrapper } $result = Get-AzureTagData -ResourceId '/subscriptions/abc/virtualMachines/vm01' $result.Metadata.Tags['Environment'] | Should -Be 'production' $result.Metadata.Tags['Team'] | Should -Be 'platform' } } It 'returns PSCumulus.CloudRecord type' { InModuleScope PSCumulus -Parameters @{ MockTagWrapper = $script:mockTagWrapper } { param($MockTagWrapper) Mock Assert-CommandAvailable {} Mock Get-AzTag { $MockTagWrapper } $result = Get-AzureTagData -ResourceId '/subscriptions/abc/virtualMachines/vm01' $result.PSObject.TypeNames | Should -Contain 'PSCumulus.CloudRecord' } } It 'returns empty Tags hashtable when resource has no tags' { InModuleScope PSCumulus { Mock Assert-CommandAvailable {} Mock Get-AzTag { [pscustomobject]@{ Properties = [pscustomobject]@{ TagsProperty = @{} } } } $result = Get-AzureTagData -ResourceId '/subscriptions/abc/virtualMachines/vm02' $result.Metadata.Tags.Count | Should -Be 0 } } } } |