ps/Modules/Alkami.PowerShell.Services/Public/Get-ChocolateyServices.tests.ps1
2023-05-30 22:51:22 -07:00

69 lines
3.0 KiB
PowerShell

. $PSScriptRoot\..\..\Load-PesterModules.ps1
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.'
$functionPath = Join-Path -Path $here -ChildPath $sut
Write-Host "Overriding SUT: $functionPath"
Import-Module $functionPath -Force
$moduleForMock = ""
Describe "Get-ChocolateyServices" {
Context "Logic" {
It "Should warn if Chocolatey services point to non-existant file locations" {
Mock -ModuleName $moduleForMock Get-ChocolateyInstallPath -MockWith { return "C:\ProgramData\Chocolatey\lib"}
Mock -ModuleName $moduleForMock -CommandName Get-CIMInstance { return @(
@{ State = "Stopped"; Name = "Alkami.Bogus.Service"; PathName = "`"C:\ProgramData\Chocolatey\lib\BogusExe.exe`" -displayname `"Alkami.Bogus.Service`" -servicename `"Alkami.Bogus.Service"; StartMode = "Manual"; }
) }
Mock -ModuleName $moduleForMock Write-Warning -MockWith { }
Get-ChocolateyServices
Assert-MockCalled -ModuleName $moduleForMock Write-Warning -Times 1 -Exactly -Scope It `
-ParameterFilter { $Message -match "has nonexistent file path" }
}
It "Should warn and return null if no matching services found" {
Mock -ModuleName $moduleForMock Write-Warning -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Get-CIMInstance { return @() }
$null -eq (Get-ChocolateyServices) | Should -BeTrue
Assert-MockCalled -ModuleName $moduleForMock Write-Warning -Times 1 -Exactly -Scope It `
-ParameterFilter { $Message -match "No Chocolatey Services Found in" }
}
It "Should Use the System Choco Path" {
Mock -ModuleName $moduleForMock Test-Path -MockWith { return $true }
Mock -ModuleName $moduleForMock Get-ChocolateyInstallPath -MockWith { return "C:\BogusChoco"}
Mock -ModuleName $moduleForMock Get-CIMInstance -MockWith {}
Get-ChocolateyServices
Assert-MockCalled -ModuleName $moduleForMock Get-ChocolateyInstallPath -Times 1 -Exactly -Scope It
Assert-MockCalled -ModuleName $moduleForMock Get-CIMInstance -Times 1 -Exactly -Scope It `
-ParameterFilter { $Filter -match "BogusChoco" }
}
It "Uses CIM Filters to Exclude Disabled Services By Default" {
Mock -ModuleName $moduleForMock Get-ChocolateyInstallPath -MockWith { return "C:\ProgramData\Chocolatey\lib"}
Mock -ModuleName $moduleForMock -CommandName Get-CIMInstance { }
Get-ChocolateyServices
Assert-MockCalled -ModuleName $moduleForMock Get-CIMInstance -Times 1 -Exactly -Scope It `
-ParameterFilter { $Filter -match "StartMode <> 'Disabled'" }
}
It "Does Not Use CIM Filters to Exclude Disabled Services When -IncludeDisabled Is Specified" {
Mock -ModuleName $moduleForMock Get-ChocolateyInstallPath -MockWith { return "C:\ProgramData\Chocolatey\lib"}
Mock -ModuleName $moduleForMock -CommandName Get-CIMInstance { }
Get-ChocolateyServices -IncludeDisabled
Assert-MockCalled -ModuleName $moduleForMock Get-CIMInstance -Times 1 -Exactly -Scope It `
-ParameterFilter { $Filter -notmatch "StartMode <> 'Disabled'" }
}
}
}