. $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 } } }