tests/Public.Functions.Tests.ps1
|
#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '5.0.0' } <# .SYNOPSIS Pester tests for Public/PublicFunctions utility scripts. .DESCRIPTION Tests public function files: Diagram generation functions and Job wrapper functions. Validates file existence, syntax, and function definitions. No live Azure authentication is required. .NOTES Author: AzureScout Contributors Version: 1.0.0 #> BeforeAll { $script:ModuleRoot = Split-Path -Parent $PSScriptRoot $script:PublicPath = Join-Path $script:ModuleRoot 'Modules' 'Public' 'PublicFunctions' $script:DiagramPath = Join-Path $script:PublicPath 'Diagram' $script:JobsPath = Join-Path $script:PublicPath 'Jobs' } # ===================================================================== # FILE EXISTENCE # ===================================================================== Describe 'Public/PublicFunctions Files Exist' { It 'Invoke-AzureScout.ps1 exists' { Join-Path $script:PublicPath 'Invoke-AzureScout.ps1' | Should -Exist } It 'Test-AZTIPermissions.ps1 exists' { Join-Path $script:PublicPath 'Test-AZTIPermissions.ps1' | Should -Exist } } Describe 'Public/Diagram Files Exist' { $diagramFiles = @( 'Build-AZTIDiagramSubnet.ps1', 'Set-AZTIDiagramFile.ps1', 'Start-AZTIDiagramJob.ps1', 'Start-AZTIDiagramNetwork.ps1', 'Start-AZTIDiagramOrganization.ps1', 'Start-AZTIDiagramSubscription.ps1', 'Start-AZTIDrawIODiagram.ps1' ) It '<_> exists' -ForEach $diagramFiles { Join-Path $script:DiagramPath $_ | Should -Exist } } Describe 'Public/Jobs Files Exist' { $jobFiles = @( 'Start-AZTIAdvisoryJob.ps1', 'Start-AZTIPolicyJob.ps1', 'Start-AZTISecCenterJob.ps1', 'Start-AZTISubscriptionJob.ps1', 'Wait-AZTIJob.ps1' ) It '<_> exists' -ForEach $jobFiles { Join-Path $script:JobsPath $_ | Should -Exist } } # ===================================================================== # SYNTAX VALIDATION # ===================================================================== Describe 'Public/PublicFunctions Syntax Validation' { It 'Invoke-AzureScout.ps1 parses without errors' { $errors = $null [System.Management.Automation.Language.Parser]::ParseFile( (Join-Path $script:PublicPath 'Invoke-AzureScout.ps1'), [ref]$null, [ref]$errors) $errors | Should -BeNullOrEmpty } It 'Test-AZTIPermissions.ps1 parses without errors' { $errors = $null [System.Management.Automation.Language.Parser]::ParseFile( (Join-Path $script:PublicPath 'Test-AZTIPermissions.ps1'), [ref]$null, [ref]$errors) $errors | Should -BeNullOrEmpty } $diagramFiles = @( 'Build-AZTIDiagramSubnet.ps1', 'Set-AZTIDiagramFile.ps1', 'Start-AZTIDiagramJob.ps1', 'Start-AZTIDiagramNetwork.ps1', 'Start-AZTIDiagramOrganization.ps1', 'Start-AZTIDiagramSubscription.ps1', 'Start-AZTIDrawIODiagram.ps1' ) It 'Diagram/<_> parses without errors' -ForEach $diagramFiles { $filePath = Join-Path $script:DiagramPath $_ $errors = $null [System.Management.Automation.Language.Parser]::ParseFile($filePath, [ref]$null, [ref]$errors) $errors | Should -BeNullOrEmpty } $jobFiles = @( 'Start-AZTIAdvisoryJob.ps1', 'Start-AZTIPolicyJob.ps1', 'Start-AZTISecCenterJob.ps1', 'Start-AZTISubscriptionJob.ps1', 'Wait-AZTIJob.ps1' ) It 'Jobs/<_> parses without errors' -ForEach $jobFiles { $filePath = Join-Path $script:JobsPath $_ $errors = $null [System.Management.Automation.Language.Parser]::ParseFile($filePath, [ref]$null, [ref]$errors) $errors | Should -BeNullOrEmpty } } # ===================================================================== # FUNCTION DEFINITIONS # ===================================================================== Describe 'Public/Diagram Function Definitions' { It 'Build-AZTIDiagramSubnet.ps1 defines Build-AZSCDiagramSubnet' { $content = Get-Content (Join-Path $script:DiagramPath 'Build-AZTIDiagramSubnet.ps1') -Raw $content | Should -Match 'function\s+Build-AZSCDiagramSubnet' } It 'Set-AZTIDiagramFile.ps1 defines Set-AZSCDiagramFile' { $content = Get-Content (Join-Path $script:DiagramPath 'Set-AZTIDiagramFile.ps1') -Raw $content | Should -Match 'function\s+Set-AZSCDiagramFile' } It 'Start-AZTIDiagramJob.ps1 defines Start-AZSCDiagramJob' { $content = Get-Content (Join-Path $script:DiagramPath 'Start-AZTIDiagramJob.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCDiagramJob' } It 'Start-AZTIDiagramNetwork.ps1 defines Start-AZSCDiagramNetwork' { $content = Get-Content (Join-Path $script:DiagramPath 'Start-AZTIDiagramNetwork.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCDiagramNetwork' } It 'Start-AZTIDiagramOrganization.ps1 defines Start-AZSCDiagramOrganization' { $content = Get-Content (Join-Path $script:DiagramPath 'Start-AZTIDiagramOrganization.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCDiagramOrganization' } It 'Start-AZTIDiagramSubscription.ps1 defines Start-AZSCDiagramSubscription' { $content = Get-Content (Join-Path $script:DiagramPath 'Start-AZTIDiagramSubscription.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCDiagramSubscription' } It 'Start-AZTIDrawIODiagram.ps1 defines Start-AZSCDrawIODiagram' { $content = Get-Content (Join-Path $script:DiagramPath 'Start-AZTIDrawIODiagram.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCDrawIODiagram' } } Describe 'Public/Jobs Function Definitions' { It 'Start-AZTIAdvisoryJob.ps1 defines Start-AZSCAdvisoryJob' { $content = Get-Content (Join-Path $script:JobsPath 'Start-AZTIAdvisoryJob.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCAdvisoryJob' } It 'Start-AZTIPolicyJob.ps1 defines Start-AZSCPolicyJob' { $content = Get-Content (Join-Path $script:JobsPath 'Start-AZTIPolicyJob.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCPolicyJob' } It 'Start-AZTISecCenterJob.ps1 defines Start-AZSCSecCenterJob' { $content = Get-Content (Join-Path $script:JobsPath 'Start-AZTISecCenterJob.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCSecCenterJob' } It 'Start-AZTISubscriptionJob.ps1 defines Start-AZSCSubscriptionJob' { $content = Get-Content (Join-Path $script:JobsPath 'Start-AZTISubscriptionJob.ps1') -Raw $content | Should -Match 'function\s+Start-AZSCSubscriptionJob' } It 'Wait-AZTIJob.ps1 defines Wait-AZSCJob' { $content = Get-Content (Join-Path $script:JobsPath 'Wait-AZTIJob.ps1') -Raw $content | Should -Match 'function\s+Wait-AZSCJob' } } |