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

79 lines
3.1 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-WindowsServiceApplicationName" {
Mock -CommandName Write-Warning -MockWith {} -ModuleName $moduleForMock
$fakeServiceName = -join ((65..90) + (97..122) | Get-Random -Count 15 | ForEach-Object {[char]$_})
Context "Error Handling" {
It "Does not throw if the service is not found" {
{ Get-WindowsServiceApplicationName "$fakeServiceName" } | Should -Not -Throw
Assert-MockCalled -CommandName Write-Warning -Times 1 -Exactly -Scope It `
-ModuleName $moduleForMock -ParameterFilter { $Message -match "Unable to find service detail" }
}
It "Does not throw if the service has no pathname property" {
Mock -CommandName Get-CIMInstance -MockWith {
return New-Object PSObject -Property @{ NoPathName="Here"; }
} -ModuleName $moduleForMock
{ Get-WindowsServiceApplicationName "$fakeServiceName" } | Should -Not -Throw
Assert-MockCalled -CommandName Get-CIMInstance -Times 1 -Exactly -Scope It -ModuleName $moduleForMock
Assert-MockCalled -CommandName Write-Warning -Times 1 -Exactly -Scope It `
-ModuleName $moduleForMock -ParameterFilter { $Message -match "Unable to find the property PathName" }
}
It "Returns one service if more than one matching service is found" {
Mock -CommandName Get-CIMInstance -MockWith {
@(
[PSCustomObject]@{
Name = "FakeService";
PathName = "NoWay";
},
[PSCustomObject]@{
Name = "FakeService2";
PathName = "NoHow";
}
)
} -ModuleName $moduleForMock
Get-WindowsServiceApplicationName "$fakeServiceName" | Should -HaveCount 1
Assert-MockCalled -CommandName Get-CIMInstance -Times 1 -Exactly -Scope It -ModuleName $moduleForMock
Assert-MockCalled -CommandName Write-Warning -Times 1 -Exactly -Scope It `
-ModuleName $moduleForMock -ParameterFilter { $Message -match "More than one service found" }
}
}
Context "Happy Path" {
It "Returns only the PathName property" {
Mock -CommandName Get-CIMInstance -MockWith {
[PSCustomObject]@{
Name = "FakeService";
PathName = "HappyPath";
}
} -ModuleName $moduleForMock
Get-WindowsServiceApplicationName "$fakeServiceName" | Should -Be "HappyPath"
Assert-MockCalled -CommandName Get-CIMInstance -Times 1 -Exactly -Scope It -ModuleName $moduleForMock
Assert-MockCalled -CommandName Write-Warning -Times 0 -Exactly -Scope It -ModuleName $moduleForMock
}
}
}