ps/Modules/Alkami.PowerShell.Choco/Public/Compare-InstalledChocoPackages.Tests.ps1
2023-05-30 22:51:22 -07:00

137 lines
6.7 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 "Compare-InstalledChocoPackages" {
Mock Get-RemoteInstalledChocoPackages -ModuleName $moduleForMock {
[hashtable]$hostobjectProperty = @{ }
$hostobjectProperty.Add('foo.fh.local',
@("expectedPackage|1.1.1",
"MissingFromTargetPackage|3.3.3",
"OutOfOrderexpectedPackage|1.1.2",
"expectedPackageTargetVersionDiff|6.6.6",
"expectedPackageSourceVersionDiff|2.0.1"
)
)
$hostobjectProperty.Add('PSComputerName', "foo.fh.local")
$hostobjectProperty.Add("RunspaceId", "1c40b61f-fake-4f6e-bf42-1ff77d9e7e19")
$hostobjectProperty.Add('PSShowComputerName', $true)
[hashtable]$hostobjectProperty2 = @{ }
$hostobjectProperty2.Add('PSComputerName', "bar.fh.local")
$hostobjectProperty2.Add("RunspaceId", "1c40b61f-fake-4f6e-bf42-1ff77d9e7e19")
$hostobjectProperty2.Add('PSShowComputerName', $true)
$hostobjectProperty2.Add('bar.fh.local',
@("Chocolatey v0.10.11",
"expectedPackage|1.1.1",
"missingFromSourcePackage|2.2.2",
"expectedPackageTargetVersionDiff|9.9.9",
"expectedPackageSourceVersionDiff|0.0.1",
"OutOfOrderexpectedPackage|1.1.2"
)
)
$mockedDict = @()
$mockedDict += @($hostobjectProperty)
$mockedDict += @($hostobjectProperty2)
$mockeddict | convertto-json | Write-Host
return $mockedDict
}
$mockedResults = Compare-InstalledChocoPackages -sourceServer foo.fh.local -targetServer bar.fh.local
$mockedResults | convertto-json | Write-Host
Context "Full Match" {
BeforeEach {
$expectedPackageName = 'expectedPackage'
$OutOfOrderexpectedPackageName = "OutOfOrderexpectedPackage"
}
It "Identical results returned in `$fullyMatchedPackages" {
$mockedResults.fullyMatchedPackages.Name | Should -contain $expectedPackageName
}
It "Identical results not returned in `$missingFromSource" {
$mockedResults.missingFromSource.Name | Should -not -Contain $expectedPackageName
}
It "Identical results not returned in `$missingFromTarget" {
$mockedResults.missingFromTarget.Name | Should -not -Contain $expectedPackageName
}
It "Identical results not returned in `$packageVersionMismatch" {
$mockedResults.packageVersionMismatch.Name | Should -not -Contain $expectedPackageName
}
It "Out of order full match results returned in `$fullyMatchedPackages" {
$mockedResults.fullyMatchedPackages.Name | Should -Contain $OutOfOrderexpectedPackageName
}
It "Out of order results not returned in `$missingFromSource" {
$mockedResults.missingFromSource.Name | Should -not -Contain $OutOfOrderexpectedPackageName
}
It "Out of order results not returned in `$missingFromTarget" {
$mockedResults.missingFromTarget.Name | Should -not -Contain $OutOfOrderexpectedPackageName
}
It "Out of order results not returned in `$packageVersionMismatch" {
$mockedResults.packageVersionMismatch.Name | Should -not -Contain $OutOfOrderexpectedPackageName
}
}
Context "Missing from Source" {
BeforeEach {
$expectedPackageName = 'missingFromSourcePackage'
}
It "Target has entry not in source - returned in `$missingFromSource" {
$mockedResults.missingFromSource.Name | Should -contain $expectedPackageName
}
It "Target has entry not in source - not returned in `$fullyMatchedPackages" {
$mockedResults.fullyMatchedPackages.Name | Should -not -contain $expectedPackageName
}
It "Target has entry not in source - not returned in `$missingFromTarget" {
$mockedResults.missingFromTarget.Name | Should -not -contain $expectedPackageName
}
It "Target has entry not in source - not returned in `$packageVersionMismatch" {
$mockedResults.packageVersionMismatch.Name | Should -not -contain $expectedPackageName
}
}
Context "Missing from Target" {
BeforeEach {
$expectedPackageName = 'MissingFromTargetPackage'
}
It "Source has entry not in target - returned in `$missingFromTarget" {
$mockedResults.missingFromTarget.Name | Should -contain $expectedPackageName
}
It "Source has entry not in target - not returned in `$fullyMatchedPackages" {
$mockedResults.fullyMatchedPackages.Name | Should -not -contain $expectedPackageName
}
It "Source has entry not in target - not returned in `$missingFromSource" {
$mockedResults.missingFromSource.Name | Should -not -contain $expectedPackageName
}
It "Source has entry not in target - not returned in `$packageVersionMismatch" {
$mockedResults.packageVersionMismatch.Name | Should -not -contain $expectedPackageName
}
}
Context "Version mismatch" {
BeforeEach {
$expectedPackageNameTargetVersionDiff = 'expectedPackageTargetVersionDiff'
$expectedPackageNameSourceVersionDiff = 'expectedPackageSourceVersionDiff'
}
It "Package Name matches but Target version differs - returned in `$packageVersionMismatch" {
$mockedResults.packageVersionMismatch.name | Should -Contain $expectedPackageNameTargetVersionDiff
}
It "Package Name matches but Source version differs - returned in `$packageVersionMismatch" {
$mockedResults.packageVersionMismatch.name | Should -Contain $expectedPackageNameSourceVersionDiff
}
It "Package Name matches but Target version differs - not returned in`$missingFromTarget" {
$mockedResults.missingFromTarget.name | Should -not -Contain $expectedPackageNameTargetVersionDiff
}
It "Package Name matches but Target version differs - not returned in `$missingFromSource" {
$mockedResults.missingFromSource.name | Should -not -Contain $expectedPackageNameTargetVersionDiff
}
It "Package Name matches but Target version differs - not returned in `$fullyMatchedPackages" {
$mockedResults.fullyMatchedPackages.Name | Should -not -contain $expectedPackageNameTargetVersionDiff
}
}
}