Skip to content

Commit

Permalink
Added ability to pass in Pester configuration object
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewrdavidson committed Jan 20, 2021
1 parent 160df8c commit 9210330
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 34 deletions.
52 changes: 35 additions & 17 deletions PSQualityCheck.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -105,7 +108,10 @@ function Invoke-PSQualityCheck {

[switch]$ExportCheckResults,

[switch]$Passthru
[switch]$Passthru,

[Parameter(Mandatory = $false)]
[System.Object]$PesterConfiguration
)

Set-StrictMode -Version Latest
Expand Down Expand Up @@ -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
Expand All @@ -209,30 +222,30 @@ 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

}

if ($scriptsToTest.Count -ge 1) {

# 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

}

Expand Down Expand Up @@ -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"
}

}

Expand Down
52 changes: 35 additions & 17 deletions Source/PSQualityCheck/Invoke-PSQualityCheck.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -105,7 +108,10 @@ function Invoke-PSQualityCheck {

[switch]$ExportCheckResults,

[switch]$Passthru
[switch]$Passthru,

[Parameter(Mandatory = $false)]
[System.Object]$PesterConfiguration
)

Set-StrictMode -Version Latest
Expand Down Expand Up @@ -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
Expand All @@ -209,30 +222,30 @@ 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

}

if ($scriptsToTest.Count -ge 1) {

# 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

}

Expand Down Expand Up @@ -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"
}

}

Expand Down

0 comments on commit 9210330

Please sign in to comment.