tests/New-HardeningSchedule.Tests.ps1
|
BeforeAll { $modulePath = (Resolve-Path "$PSScriptRoot\..\modules\System.psm1").Path Import-Module $modulePath -Force } AfterAll { Remove-Module System -Force -ErrorAction SilentlyContinue } Describe "New-HardeningSchedule" { Context "Parameter Validation" { It "accepts Profile parameter" { { New-HardeningSchedule -Profile Basis -Schedule OneTime -Confirm:$false -ErrorAction SilentlyContinue } | Should -Not -Throw } It "accepts Schedule parameter" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -ErrorAction SilentlyContinue } | Should -Not -Throw } It "accepts Time parameter" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -Time "02:00" -ErrorAction SilentlyContinue } | Should -Not -Throw } It "accepts DayOfWeek for Weekly schedule" { { New-HardeningSchedule -Profile Basis -Schedule Weekly -Confirm:$false -DayOfWeek Monday -ErrorAction SilentlyContinue } | Should -Not -Throw } It "accepts AutoRemediate switch" { { New-HardeningSchedule -Profile Basis -Schedule OneTime -Confirm:$false -AutoRemediate -ErrorAction SilentlyContinue } | Should -Not -Throw } It "accepts GenerateReport switch" { { New-HardeningSchedule -Profile Basis -Schedule OneTime -Confirm:$false -GenerateReport -ErrorAction SilentlyContinue } | Should -Not -Throw } } Context "Schedule Types" { It "creates OneTime schedule" { { New-HardeningSchedule -Profile Basis -Schedule OneTime -Confirm:$false -ErrorAction SilentlyContinue } | Should -Not -Throw } It "creates Daily schedule" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -ErrorAction SilentlyContinue } | Should -Not -Throw } It "creates Weekly schedule" { { New-HardeningSchedule -Profile Basis -Schedule Weekly -Confirm:$false -DayOfWeek Monday -ErrorAction SilentlyContinue } | Should -Not -Throw } } Context "Validation Rules" { It "requires DayOfWeek for Weekly schedule" { { New-HardeningSchedule -Profile Basis -Schedule Weekly -Confirm:$false -ErrorAction Stop } | Should -Throw } It "accepts all days of week" { $daysOfWeek = @('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday') foreach ($day in $daysOfWeek) { { New-HardeningSchedule -Profile Basis -Schedule Weekly -Confirm:$false -DayOfWeek $day -ErrorAction SilentlyContinue } | Should -Not -Throw } } } Context "Time Configuration" { It "accepts time in HH:MM format" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -Time "14:30" -ErrorAction SilentlyContinue } | Should -Not -Throw } It "accepts midnight (00:00)" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -Time "00:00" -ErrorAction SilentlyContinue } | Should -Not -Throw } It "accepts end of day (23:59)" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -Time "23:59" -ErrorAction SilentlyContinue } | Should -Not -Throw } It "defaults to 00:00 if not specified for non-OneTime schedules" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -ErrorAction SilentlyContinue } | Should -Not -Throw } } Context "Profile Support" { It "creates schedule for Basis profile" { { New-HardeningSchedule -Profile Basis -Schedule OneTime -Confirm:$false -ErrorAction SilentlyContinue } | Should -Not -Throw } It "creates schedule for Recommended profile" { { New-HardeningSchedule -Profile Recommended -Confirm:$false -Schedule Daily -ErrorAction SilentlyContinue } | Should -Not -Throw } It "creates schedule for Strict profile" { { New-HardeningSchedule -Profile Strict -Confirm:$false -Schedule Weekly -DayOfWeek Monday -ErrorAction SilentlyContinue } | Should -Not -Throw } } Context "Optional Features" { It "enables AutoRemediate for schedule" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -AutoRemediate -ErrorAction SilentlyContinue } | Should -Not -Throw } It "enables GenerateReport for schedule" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -GenerateReport -ErrorAction SilentlyContinue } | Should -Not -Throw } It "enables both AutoRemediate and GenerateReport" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -AutoRemediate -GenerateReport -ErrorAction SilentlyContinue } | Should -Not -Throw } } Context "Schedule Task Creation" { It "accepts TaskName parameter" { { New-HardeningSchedule -Profile Basis -Schedule OneTime -Confirm:$false -TaskName 'CustomHardeningTask' -ErrorAction SilentlyContinue } | Should -Not -Throw } It "creates schedule with default task name if not specified" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -ErrorAction SilentlyContinue } | Should -Not -Throw } } Context "WhatIf Support" { It "supports WhatIf parameter without side effects" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -WhatIf -ErrorAction SilentlyContinue } | Should -Not -Throw } It "WhatIf mode does not throw errors" { { New-HardeningSchedule -Profile Basis -Schedule Daily -Confirm:$false -WhatIf -ErrorAction Stop } | Should -Not -Throw } } Context "Documentation" { It "has complete help documentation" { $help = Get-Help New-HardeningSchedule $help.Synopsis | Should -Not -BeNullOrEmpty } It "help includes Profile parameter" { $help = Get-Help New-HardeningSchedule $help.Parameters.Parameter.Name | Should -Contain 'Profile' } It "help includes Schedule parameter" { $help = Get-Help New-HardeningSchedule $help.Parameters.Parameter.Name | Should -Contain 'Schedule' } } } |