From 92103305d6c286529c33e51f3a3cc6aa5ab8ee98 Mon Sep 17 00:00:00 2001 From: Andrew Davidson Date: Wed, 20 Jan 2021 12:28:18 +0000 Subject: [PATCH] Added ability to pass in Pester configuration object --- PSQualityCheck.psm1 | 52 +++++++++++++------ .../PSQualityCheck/Invoke-PSQualityCheck.ps1 | 52 +++++++++++++------ 2 files changed, 70 insertions(+), 34 deletions(-) diff --git a/PSQualityCheck.psm1 b/PSQualityCheck.psm1 index e0a759d..3731999 100644 --- a/PSQualityCheck.psm1 +++ b/PSQualityCheck.psm1 @@ -27,6 +27,9 @@ function Invoke-PSQualityCheck { .PARAMETER Passthru Returns the Check results objects back to the caller + .PARAMETER PesterConfiguration + A Pester configuration object to allow configuration of Pester + .EXAMPLE Invoke-PSQualityCheck -Path 'C:\Scripts' @@ -105,7 +108,10 @@ function Invoke-PSQualityCheck { [switch]$ExportCheckResults, - [switch]$Passthru + [switch]$Passthru, + + [Parameter(Mandatory = $false)] + [System.Object]$PesterConfiguration ) Set-StrictMode -Version Latest @@ -189,13 +195,20 @@ function Invoke-PSQualityCheck { } - # Default Pester Parameters - $configuration = [PesterConfiguration]::Default - $configuration.Run.Exit = $false - $configuration.CodeCoverage.Enabled = $false - $configuration.Output.Verbosity = 'Detailed' - $configuration.Run.PassThru = $true - $configuration.Should.ErrorAction = 'Stop' + if ($PSBoundParameters.ContainsKey('PesterConfiguration') -and $PesterConfiguration -is [PesterConfiguration]) { + + # left here so that we can over-ride passed in object with values we require + + } + else { + # Default Pester Parameters + $PesterConfiguration = [PesterConfiguration]::Default + $PesterConfiguration.Run.Exit = $false + $PesterConfiguration.CodeCoverage.Enabled = $false + $PesterConfiguration.Output.Verbosity = 'Detailed' + $PesterConfiguration.Run.PassThru = $true + $PesterConfiguration.Should.ErrorAction = 'Stop' + } $moduleResults = $null $extractionResults = $null @@ -209,21 +222,21 @@ function Invoke-PSQualityCheck { # Run the Module tests on all the valid module files found $container1 = New-PesterContainer -Path (Join-Path -Path $modulePath -ChildPath 'Checks\Module.Tests.ps1') -Data @{ Source = $modulesToTest } - $configuration.Run.Container = $container1 - $moduleResults = Invoke-Pester -Configuration $configuration + $PesterConfiguration.Run.Container = $container1 + $moduleResults = Invoke-Pester -Configuration $PesterConfiguration # Extract all the functions from the modules into individual .ps1 files ready for testing $container2 = New-PesterContainer -Path (Join-Path -Path $modulePath -ChildPath 'Checks\Function-Extraction.Tests.ps1') -Data @{ Source = $modulesToTest; ExtractPath = $extractPath } - $configuration.Run.Container = $container2 - $extractionResults = Invoke-Pester -Configuration $configuration + $PesterConfiguration.Run.Container = $container2 + $extractionResults = Invoke-Pester -Configuration $PesterConfiguration # Get a list of the 'extracted' function scripts .ps1 files $extractedScriptsToTest = Get-ChildItem -Path $extractPath -Include '*.ps1' -Recurse # Run the Script tests against all the extracted functions .ps1 files $container3 = New-PesterContainer -Path (Join-Path -Path $modulePath -ChildPath 'Checks\Script.Tests.ps1') -Data @{ Source = $extractedScriptsToTest; SonarQubeRules = $SonarQubeRulesPath } - $configuration.Run.Container = $container3 - $extractedScriptResults = Invoke-Pester -Configuration $configuration + $PesterConfiguration.Run.Container = $container3 + $extractedScriptResults = Invoke-Pester -Configuration $PesterConfiguration } @@ -231,8 +244,8 @@ function Invoke-PSQualityCheck { # Run the Script tests against all the valid script files found $container3 = New-PesterContainer -Path (Join-Path -Path $modulePath -ChildPath 'Checks\Script.Tests.ps1') -Data @{ Source = $scriptsToTest; SonarQubeRules = $SonarQubeRulesPath } - $configuration.Run.Container = $container3 - $scriptResults = Invoke-Pester -Configuration $configuration + $PesterConfiguration.Run.Container = $container3 + $scriptResults = Invoke-Pester -Configuration $PesterConfiguration } @@ -346,7 +359,12 @@ function Invoke-PSQualityCheck { if ($PSBoundParameters.ContainsKey('Passthru')) { - return $moduleResults, $extractionResults, $scriptsToTest, $extractedScriptResults + if ($PesterConfiguration.Run.PassThru.Value -eq $true) { + return $moduleResults, $extractionResults, $scriptsToTest, $extractedScriptResults + } + else { + Write-Error "Unable to pass back result objects. Passthru not enabled in Pester Configuration object" + } } diff --git a/Source/PSQualityCheck/Invoke-PSQualityCheck.ps1 b/Source/PSQualityCheck/Invoke-PSQualityCheck.ps1 index dd0f61e..54c91f0 100644 --- a/Source/PSQualityCheck/Invoke-PSQualityCheck.ps1 +++ b/Source/PSQualityCheck/Invoke-PSQualityCheck.ps1 @@ -27,6 +27,9 @@ function Invoke-PSQualityCheck { .PARAMETER Passthru Returns the Check results objects back to the caller + .PARAMETER PesterConfiguration + A Pester configuration object to allow configuration of Pester + .EXAMPLE Invoke-PSQualityCheck -Path 'C:\Scripts' @@ -105,7 +108,10 @@ function Invoke-PSQualityCheck { [switch]$ExportCheckResults, - [switch]$Passthru + [switch]$Passthru, + + [Parameter(Mandatory = $false)] + [System.Object]$PesterConfiguration ) Set-StrictMode -Version Latest @@ -189,13 +195,20 @@ function Invoke-PSQualityCheck { } - # Default Pester Parameters - $configuration = [PesterConfiguration]::Default - $configuration.Run.Exit = $false - $configuration.CodeCoverage.Enabled = $false - $configuration.Output.Verbosity = 'Detailed' - $configuration.Run.PassThru = $true - $configuration.Should.ErrorAction = 'Stop' + if ($PSBoundParameters.ContainsKey('PesterConfiguration') -and $PesterConfiguration -is [PesterConfiguration]) { + + # left here so that we can over-ride passed in object with values we require + + } + else { + # Default Pester Parameters + $PesterConfiguration = [PesterConfiguration]::Default + $PesterConfiguration.Run.Exit = $false + $PesterConfiguration.CodeCoverage.Enabled = $false + $PesterConfiguration.Output.Verbosity = 'Detailed' + $PesterConfiguration.Run.PassThru = $true + $PesterConfiguration.Should.ErrorAction = 'Stop' + } $moduleResults = $null $extractionResults = $null @@ -209,21 +222,21 @@ function Invoke-PSQualityCheck { # Run the Module tests on all the valid module files found $container1 = New-PesterContainer -Path (Join-Path -Path $modulePath -ChildPath 'Checks\Module.Tests.ps1') -Data @{ Source = $modulesToTest } - $configuration.Run.Container = $container1 - $moduleResults = Invoke-Pester -Configuration $configuration + $PesterConfiguration.Run.Container = $container1 + $moduleResults = Invoke-Pester -Configuration $PesterConfiguration # Extract all the functions from the modules into individual .ps1 files ready for testing $container2 = New-PesterContainer -Path (Join-Path -Path $modulePath -ChildPath 'Checks\Function-Extraction.Tests.ps1') -Data @{ Source = $modulesToTest; ExtractPath = $extractPath } - $configuration.Run.Container = $container2 - $extractionResults = Invoke-Pester -Configuration $configuration + $PesterConfiguration.Run.Container = $container2 + $extractionResults = Invoke-Pester -Configuration $PesterConfiguration # Get a list of the 'extracted' function scripts .ps1 files $extractedScriptsToTest = Get-ChildItem -Path $extractPath -Include '*.ps1' -Recurse # Run the Script tests against all the extracted functions .ps1 files $container3 = New-PesterContainer -Path (Join-Path -Path $modulePath -ChildPath 'Checks\Script.Tests.ps1') -Data @{ Source = $extractedScriptsToTest; SonarQubeRules = $SonarQubeRulesPath } - $configuration.Run.Container = $container3 - $extractedScriptResults = Invoke-Pester -Configuration $configuration + $PesterConfiguration.Run.Container = $container3 + $extractedScriptResults = Invoke-Pester -Configuration $PesterConfiguration } @@ -231,8 +244,8 @@ function Invoke-PSQualityCheck { # Run the Script tests against all the valid script files found $container3 = New-PesterContainer -Path (Join-Path -Path $modulePath -ChildPath 'Checks\Script.Tests.ps1') -Data @{ Source = $scriptsToTest; SonarQubeRules = $SonarQubeRulesPath } - $configuration.Run.Container = $container3 - $scriptResults = Invoke-Pester -Configuration $configuration + $PesterConfiguration.Run.Container = $container3 + $scriptResults = Invoke-Pester -Configuration $PesterConfiguration } @@ -346,7 +359,12 @@ function Invoke-PSQualityCheck { if ($PSBoundParameters.ContainsKey('Passthru')) { - return $moduleResults, $extractionResults, $scriptsToTest, $extractedScriptResults + if ($PesterConfiguration.Run.PassThru.Value -eq $true) { + return $moduleResults, $extractionResults, $scriptsToTest, $extractedScriptResults + } + else { + Write-Error "Unable to pass back result objects. Passthru not enabled in Pester Configuration object" + } }