Testing/Unit/PowerShell/Orchestrator/Invoke-ReportCreation.Tests.ps1
|
$OrchestratorPath = '../../../../Modules/Orchestrator.psm1' $CreateReportPath = '../../../../Modules/CreateReport/CreateReport.psm1' Import-Module (Join-Path -Path $PSScriptRoot -ChildPath $OrchestratorPath) -Function Invoke-ReportCreation -Force Import-Module (Join-Path -Path $PSScriptRoot -ChildPath $CreateReportPath) -Function New-Report, Import-SecureBaseline -Force InModuleScope Orchestrator { Describe -Tag 'Orchestrator' -Name 'Invoke-ReportCreation' { BeforeAll { Mock -ModuleName Orchestrator New-Report {} Mock -ModuleName Orchestrator Pluralize {} Mock -ModuleName Orchestrator Import-SecureBaseline { @{} } Mock -CommandName Write-Progress {} Mock -CommandName Join-Path { "." } Mock -CommandName Out-File {} Mock -CommandName ConvertTo-Html {} Mock -CommandName Copy-Item {} Mock -CommandName Get-Content {} Mock -CommandName Add-Type {} Mock -CommandName Invoke-Item {} function Get-Utf8NoBom {throw 'this will be mocked'} Mock -CommandName Get-Utf8NoBom {} Mock -CommandName ConvertFrom-Json { @{ "report_uuid"="" } } } Context 'When creating the reports from Provider and OPA results JSON' { BeforeAll { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'CyberConfig')] $CyberConfig = [PSCustomObject]@{ ProductNames = @('aad') OutProviderFileName = "ProviderSettingsExport" OutRegoFileName = "TestResults" OutReportName = "BaselineReports" OPAPath = "." LogIn = $false } [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'TenantDetails')] $TenantDetails = '{"DisplayName": "displayName"}' [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'DarkMode')] $DarkMode = $false [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'ModuleVersion')] $ModuleVersion = '1.0' [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'OutFolderPath')] $OutFolderPath = "./" } It 'Do it quietly (Do not automatically show report)' { $CyberConfig.ProductNames = @("aad") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode -Quiet } | Should -Not -Throw Should -Invoke -CommandName Invoke-Item -Exactly -Times 0 $CyberConfig.ProductNames = @() } It 'Show report' { $CyberConfig.ProductNames = @("aad") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode } | Should -Not -Throw Should -Invoke -CommandName Invoke-Item -Exactly -Times 1 -ParameterFilter {-Not [string]::IsNullOrEmpty($Path) } $CyberConfig.ProductNames = @() } It 'With -ProductNames "aad", should not throw' { $CyberConfig.ProductNames = @("aad") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode } | Should -Not -Throw } It 'With -ProductNames "defender", should not throw' { $CyberConfig.ProductNames = @("defender") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode } | Should -Not -Throw } It 'With -ProductNames "exo", should not throw' { $CyberConfig.ProductNames = @("exo") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode } | Should -Not -Throw } It 'With -ProductNames "powerplatform", should not throw' { $CyberConfig.ProductNames = @("powerplatform") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode } | Should -Not -Throw } It 'With -ProductNames "sharepoint", should not throw' { $CyberConfig.ProductNames = @("sharepoint") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode } | Should -Not -Throw } It 'With -ProductNames "teams", should not throw' { $CyberConfig.ProductNames = @("teams") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode } | Should -Not -Throw } It 'With all products, should not throw' { $CyberConfig.ProductNames = @("aad", "defender", "exo", "powerplatform", "sharepoint", "teams") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode } | Should -Not -Throw } } Context 'When creating the reports with -Quiet True' { BeforeAll { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'CyberConfig')] $CyberConfig = [PSCustomObject]@{ ProductNames = @('aad') OutProviderFileName = "ProviderSettingsExport" OutRegoFileName = "TestResults" OutReportName = "BaselineReports" OPAPath = "." LogIn = $false } [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'DarkMode')] $DarkMode = $false [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'TenantDetails')] $TenantDetails = '{"DisplayName": "displayName"}' [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'ModuleVersion')] $ModuleVersion = '1.0' [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'OutFolderPath')] $OutFolderPath = "./" [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'Quiet')] $Quiet = $true } It 'With all products, should not throw' { $CyberConfig.ProductNames = @("aad", "defender", "exo", "powerplatform", "sharepoint", "teams") { Invoke-ReportCreation -CyberConfig $CyberConfig -TenantDetails $TenantDetails -ModuleVersion $ModuleVersion -OutFolderPath $OutFolderPath -DarkMode:$DarkMode -Quiet:$Quiet } | Should -Not -Throw } } } } AfterAll { Remove-Module Orchestrator -ErrorAction SilentlyContinue } |