Modules/BenchPress.Azure/Public/CustomAssertions/BeInResourceGroup.ps1 (75 lines of code) (raw):

function ShouldBeInResourceGroup ($ActualValue, [string]$ExpectedValue, [switch] $Negate, [string] $Because) { <# .SYNOPSIS Custom Assertion function to check resource's resource group. .DESCRIPTION BeInResourceGroup is a custom assertion that checks the resource group of a resource. It can be used when writing Pester tests. .EXAMPLE Confirm-AzBPContainerRegistry -ResourceGroupName $rgName | Should -BeInResourceGroup 'rg-test' .EXAMPLE Confirm-AzBPContainerRegistry -ResourceGroupName $rgName | Should -Not -BeInResourceGroup 'rg-test2' .INPUTS ConfirmResult System.Switch System.String .OUTPUTS PSCustomObject #> $rgProperty = 'ResourceGroup' $rgNameProperty = 'ResourceGroupName' $idProperty = 'Id' if ($null -eq $ActualValue) { [bool] $succeeded = $false $failureMessage = "ConfirmResult is null or empty." } else { if ([bool]$ActualValue.ResourceDetails.PSObject.Properties[$rgProperty]) { $resourceGroupName = $ActualValue.ResourceDetails.$rgProperty } elseif ([bool]$ActualValue.ResourceDetails.PSObject.Properties[$rgNameProperty]) { $resourceGroupName = $ActualValue.ResourceDetails.$rgNameProperty } elseif ([bool]$ActualValue.ResourceDetails.PSObject.Properties[$idProperty]) { # If it does not have a property for resource group, then we can maybe get the resource group from Id # ex: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/' # providers/{resourceProviderNamespace}/{resourceType}/{resourceName} $resourceId = $ActualValue.ResourceDetails.$idProperty $resourceGroupPath = $resourceId -split 'resourceGroups' | Select-Object -Last 1 $resourceGroupName = @($resourceGroupPath -split '/')[1] # If $resourceGroupName is empty, the Id is the wrong format # so, set it to null if ('' -eq $resourceGroupName) { $resourceGroupName = $null } } # Some resources don't have any of the resource group properties if ($null -eq $resourceGroupName) { [bool] $succeeded = $false $failureMessage = "Resource does not have a ResourceGroup, a ResourceGroupName, or an Id (with a RG) property. They are null or empty." } else { [bool] $succeeded = $resourceGroupName -eq $ExpectedValue if ($Negate) { $succeeded = -not $succeeded } if (-not $succeeded) { if ($Negate) { $failureMessage = "Resource is deployed, incorrectly, in $resourceGroupName." } else { $failureMessage = "Resource not in resource group or there was an error when confirming resource. Expected $ExpectedValue but got $resourceGroupName." if ($Because) { $failureMessage = "Resource not in resource group. This failed $Because." } } } } } return [pscustomobject]@{ Succeeded = $succeeded FailureMessage = $failureMessage } } Add-ShouldOperator -Name BeInResourceGroup ` -InternalName 'ShouldBeInResourceGroup' ` -Test ${function:ShouldBeInResourceGroup} ` -Alias 'SBIRG'