add: filter function for tests
This commit is contained in:
63
source/Private/Get-TestDefinitionsObject.ps1
Normal file
63
source/Private/Get-TestDefinitionsObject.ps1
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
function Get-TestDefinitionsObject {
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[object[]]$TestDefinitions,
|
||||||
|
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$ParameterSetName,
|
||||||
|
|
||||||
|
[string]$ELevel,
|
||||||
|
[string]$ProfileLevel,
|
||||||
|
[string[]]$IncludeRecommendation,
|
||||||
|
[string[]]$SkipRecommendation
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Verbose "Initial test definitions count: $($TestDefinitions.Count)"
|
||||||
|
|
||||||
|
switch ($ParameterSetName) {
|
||||||
|
'ELevelFilter' {
|
||||||
|
Write-Verbose "Applying ELevelFilter"
|
||||||
|
if ($null -ne $ELevel -and $null -ne $ProfileLevel) {
|
||||||
|
Write-Verbose "Filtering on ELevel = $ELevel and ProfileLevel = $ProfileLevel"
|
||||||
|
$TestDefinitions = $TestDefinitions | Where-Object {
|
||||||
|
$_.ELevel -eq $ELevel -and $_.ProfileLevel -eq $ProfileLevel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif ($null -ne $ELevel) {
|
||||||
|
Write-Verbose "Filtering on ELevel = $ELevel"
|
||||||
|
$TestDefinitions = $TestDefinitions | Where-Object {
|
||||||
|
$_.ELevel -eq $ELevel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif ($null -ne $ProfileLevel) {
|
||||||
|
Write-Verbose "Filtering on ProfileLevel = $ProfileLevel"
|
||||||
|
$TestDefinitions = $TestDefinitions | Where-Object {
|
||||||
|
$_.ProfileLevel -eq $ProfileLevel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'IG1Filter' {
|
||||||
|
Write-Verbose "Applying IG1Filter"
|
||||||
|
$TestDefinitions = $TestDefinitions | Where-Object { $_.IG1 -eq 'TRUE' }
|
||||||
|
}
|
||||||
|
'IG2Filter' {
|
||||||
|
Write-Verbose "Applying IG2Filter"
|
||||||
|
$TestDefinitions = $TestDefinitions | Where-Object { $_.IG2 -eq 'TRUE' }
|
||||||
|
}
|
||||||
|
'IG3Filter' {
|
||||||
|
Write-Verbose "Applying IG3Filter"
|
||||||
|
$TestDefinitions = $TestDefinitions | Where-Object { $_.IG3 -eq 'TRUE' }
|
||||||
|
}
|
||||||
|
'RecFilter' {
|
||||||
|
Write-Verbose "Applying RecFilter"
|
||||||
|
$TestDefinitions = $TestDefinitions | Where-Object { $IncludeRecommendation -contains $_.Rec }
|
||||||
|
}
|
||||||
|
'SkipRecFilter' {
|
||||||
|
Write-Verbose "Applying SkipRecFilter"
|
||||||
|
$TestDefinitions = $TestDefinitions | Where-Object { $SkipRecommendation -notcontains $_.Rec }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Verbose "Filtered test definitions count: $($TestDefinitions.Count)"
|
||||||
|
return $TestDefinitions
|
||||||
|
}
|
@@ -71,28 +71,28 @@ function Invoke-M365SecurityAudit {
|
|||||||
[string]$DomainName,
|
[string]$DomainName,
|
||||||
|
|
||||||
# E-Level with optional ProfileLevel selection
|
# E-Level with optional ProfileLevel selection
|
||||||
[Parameter(ParameterSetName = 'ELevelFilter')]
|
[Parameter(Mandatory = $true, ParameterSetName = 'ELevelFilter')]
|
||||||
[ValidateSet('E3', 'E5')]
|
[ValidateSet('E3', 'E5')]
|
||||||
[string]$ELevel,
|
[string]$ELevel,
|
||||||
|
|
||||||
[Parameter(ParameterSetName = 'ELevelFilter')]
|
[Parameter(Mandatory = $true, ParameterSetName = 'ELevelFilter')]
|
||||||
[ValidateSet('L1', 'L2')]
|
[ValidateSet('L1', 'L2')]
|
||||||
[string]$ProfileLevel,
|
[string]$ProfileLevel,
|
||||||
|
|
||||||
# IG Filters, one at a time
|
# IG Filters, one at a time
|
||||||
[Parameter(ParameterSetName = 'IG1Filter')]
|
[Parameter(Mandatory = $true, ParameterSetName = 'IG1Filter')]
|
||||||
[switch]$IncludeIG1,
|
[switch]$IncludeIG1,
|
||||||
|
|
||||||
[Parameter(ParameterSetName = 'IG2Filter')]
|
[Parameter(Mandatory = $true, ParameterSetName = 'IG2Filter')]
|
||||||
[switch]$IncludeIG2,
|
[switch]$IncludeIG2,
|
||||||
|
|
||||||
[Parameter(ParameterSetName = 'IG3Filter')]
|
[Parameter(Mandatory = $true, ParameterSetName = 'IG3Filter')]
|
||||||
[switch]$IncludeIG3,
|
[switch]$IncludeIG3,
|
||||||
|
|
||||||
# Inclusion of specific recommendation numbers
|
# Inclusion of specific recommendation numbers
|
||||||
[Parameter(ParameterSetName = 'RecFilter')]
|
[Parameter(Mandatory = $true, ParameterSetName = 'RecFilter')]
|
||||||
[ValidateSet(
|
[ValidateSet(
|
||||||
'1.1.1','1.1.3', '1.2.1', '1.2.2', '1.3.1', '1.3.3', '1.3.6', '2.1.1', '2.1.2', `
|
'1.1.1', '1.1.3', '1.2.1', '1.2.2', '1.3.1', '1.3.3', '1.3.6', '2.1.1', '2.1.2', `
|
||||||
'2.1.3', '2.1.4', '2.1.5', '2.1.6', '2.1.7', '2.1.9', '3.1.1', '5.1.2.3', `
|
'2.1.3', '2.1.4', '2.1.5', '2.1.6', '2.1.7', '2.1.9', '3.1.1', '5.1.2.3', `
|
||||||
'5.1.8.1', '6.1.1', '6.1.2', '6.1.3', '6.2.1', '6.2.2', '6.2.3', '6.3.1', `
|
'5.1.8.1', '6.1.1', '6.1.2', '6.1.3', '6.2.1', '6.2.2', '6.2.3', '6.3.1', `
|
||||||
'6.5.1', '6.5.2', '6.5.3', '7.2.1', '7.2.10', '7.2.2', '7.2.3', '7.2.4', `
|
'6.5.1', '6.5.2', '6.5.3', '7.2.1', '7.2.10', '7.2.2', '7.2.3', '7.2.4', `
|
||||||
@@ -103,9 +103,9 @@ function Invoke-M365SecurityAudit {
|
|||||||
[string[]]$IncludeRecommendation,
|
[string[]]$IncludeRecommendation,
|
||||||
|
|
||||||
# Exclusion of specific recommendation numbers
|
# Exclusion of specific recommendation numbers
|
||||||
[Parameter(ParameterSetName = 'SkipRecFilter')]
|
[Parameter(Mandatory = $true, ParameterSetName = 'SkipRecFilter')]
|
||||||
[ValidateSet(
|
[ValidateSet(
|
||||||
'1.1.1','1.1.3', '1.2.1', '1.2.2', '1.3.1', '1.3.3', '1.3.6', '2.1.1', '2.1.2', `
|
'1.1.1', '1.1.3', '1.2.1', '1.2.2', '1.3.1', '1.3.3', '1.3.6', '2.1.1', '2.1.2', `
|
||||||
'2.1.3', '2.1.4', '2.1.5', '2.1.6', '2.1.7', '2.1.9', '3.1.1', '5.1.2.3', `
|
'2.1.3', '2.1.4', '2.1.5', '2.1.6', '2.1.7', '2.1.9', '3.1.1', '5.1.2.3', `
|
||||||
'5.1.8.1', '6.1.1', '6.1.2', '6.1.3', '6.2.1', '6.2.2', '6.2.3', '6.3.1', `
|
'5.1.8.1', '6.1.1', '6.1.2', '6.1.3', '6.2.1', '6.2.2', '6.2.3', '6.3.1', `
|
||||||
'6.5.1', '6.5.2', '6.5.3', '7.2.1', '7.2.10', '7.2.2', '7.2.3', '7.2.4', `
|
'6.5.1', '6.5.2', '6.5.3', '7.2.1', '7.2.10', '7.2.2', '7.2.3', '7.2.4', `
|
||||||
@@ -164,40 +164,15 @@ function Invoke-M365SecurityAudit {
|
|||||||
# Load the Test Definitions into the script scope for use in other functions
|
# Load the Test Definitions into the script scope for use in other functions
|
||||||
$script:TestDefinitionsObject = $testDefinitions
|
$script:TestDefinitionsObject = $testDefinitions
|
||||||
# Apply filters based on parameter sets
|
# Apply filters based on parameter sets
|
||||||
switch ($PSCmdlet.ParameterSetName) {
|
$params = @{
|
||||||
'ELevelFilter' {
|
TestDefinitions = $testDefinitions
|
||||||
if ($null -ne $ELevel -and $null -ne $ProfileLevel) {
|
ParameterSetName = $PSCmdlet.ParameterSetName
|
||||||
$testDefinitions = $testDefinitions | Where-Object {
|
ELevel = $ELevel
|
||||||
$_.ELevel -eq $ELevel -and $_.ProfileLevel -eq $ProfileLevel
|
ProfileLevel = $ProfileLevel
|
||||||
}
|
IncludeRecommendation = $IncludeRecommendation
|
||||||
}
|
SkipRecommendation = $SkipRecommendation
|
||||||
elseif ($null -ne $ELevel) {
|
|
||||||
$testDefinitions = $testDefinitions | Where-Object {
|
|
||||||
$_.ELevel -eq $ELevel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
elseif ($null -ne $ProfileLevel) {
|
|
||||||
$testDefinitions = $testDefinitions | Where-Object {
|
|
||||||
$_.ProfileLevel -eq $ProfileLevel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'IG1Filter' {
|
|
||||||
$testDefinitions = $testDefinitions | Where-Object { $_.IG1 -eq 'TRUE' }
|
|
||||||
}
|
|
||||||
'IG2Filter' {
|
|
||||||
$testDefinitions = $testDefinitions | Where-Object { $_.IG2 -eq 'TRUE' }
|
|
||||||
}
|
|
||||||
'IG3Filter' {
|
|
||||||
$testDefinitions = $testDefinitions | Where-Object { $_.IG3 -eq 'TRUE' }
|
|
||||||
}
|
|
||||||
'RecFilter' {
|
|
||||||
$testDefinitions = $testDefinitions | Where-Object { $IncludeRecommendation -contains $_.Rec }
|
|
||||||
}
|
|
||||||
'SkipRecFilter' {
|
|
||||||
$testDefinitions = $testDefinitions | Where-Object { $SkipRecommendation -notcontains $_.Rec }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
$testDefinitions = Get-TestDefinitionsObject @params
|
||||||
# End switch ($PSCmdlet.ParameterSetName)
|
# End switch ($PSCmdlet.ParameterSetName)
|
||||||
|
|
||||||
# Determine which test files to load based on filtering
|
# Determine which test files to load based on filtering
|
||||||
|
27
tests/Unit/Private/Get-TestDefinitionsObject.tests.ps1
Normal file
27
tests/Unit/Private/Get-TestDefinitionsObject.tests.ps1
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
$ProjectPath = "$PSScriptRoot\..\..\.." | Convert-Path
|
||||||
|
$ProjectName = ((Get-ChildItem -Path $ProjectPath\*\*.psd1).Where{
|
||||||
|
($_.Directory.Name -match 'source|src' -or $_.Directory.Name -eq $_.BaseName) -and
|
||||||
|
$(try { Test-ModuleManifest $_.FullName -ErrorAction Stop } catch { $false } )
|
||||||
|
}).BaseName
|
||||||
|
|
||||||
|
|
||||||
|
Import-Module $ProjectName
|
||||||
|
|
||||||
|
InModuleScope $ProjectName {
|
||||||
|
Describe Get-PrivateFunction {
|
||||||
|
Context 'Default' {
|
||||||
|
BeforeEach {
|
||||||
|
$return = Get-PrivateFunction -PrivateData 'string'
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'Returns a single object' {
|
||||||
|
($return | Measure-Object).Count | Should -Be 1
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'Returns a string based on the parameter PrivateData' {
|
||||||
|
$return | Should -Be 'string'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user