69 lines
3.0 KiB
PowerShell
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'" }
|
||
|
}
|
||
|
}
|
||
|
}
|