. $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 "Invoke-ChocoInstallPackagesPrivate" { Mock Invoke-Expression -ModuleName $moduleForMock { } Context "build version" { BeforeEach { Mock Get-ChocoState -ModuleName $moduleForMock { return @{Name = "dummyPackage"; Version = "1.3.2" } } } It "null -> 1.3.3 should not contain --allow-downgrade --ignore-dependencies" { Mock Get-ChocoState -ModuleName $moduleForMock { } Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "1.3.3" } -Verbose Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -notlike "*--allow-downgrade*") -and ($command -notlike "*--ignore-dependencies*") } } It "1.3.2 -> 1.3.3 should not contain --allow-downgrade --ignore-dependencies" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "1.3.3" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -notlike "*--allow-downgrade*") -and ($command -notlike "*--ignore-dependencies*") } } It "1.3.2 -> 1.3.2 should contain--ignore-dependencies; not --allow-downgrade" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "1.3.2" } -forceSameVersion Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -notlike "*--allow-downgrade*") -and ($command -like "*--ignore-dependencies*") } } It "1.3.2 -> 1.3.1 should contain --allow-downgrade --ignore-dependencies" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "1.3.1" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -like "*--allow-downgrade*") -or ($command -like "*--ignore-dependencies*") } } } Context "pre version" { BeforeEach { Mock Get-ChocoState -ModuleName $moduleForMock { return @{Name = "dummyPackage"; Version = "6.6.6-pre666" } } } It "null -> 6.6.6-pre666 should not contain --allow-downgrade --ignore-dependencies" { Mock Get-ChocoState -ModuleName $moduleForMock { } Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "6.6.6-pre666" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -notlike "*--allow-downgrade*") -and ($command -notlike "*--ignore-dependencies*") } } It "6.6.6-pre666 -> 6.6.6-pre777 should not contain --allow-downgrade --ignore-dependencies" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "6.6.6-pre777" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -notlike "*--allow-downgrade*") -and ($command -notlike "*--ignore-dependencies*") } } It "6.6.6-pre666 -> 6.6.6-pre666 should contain--ignore-dependencies; not --allow-downgrade " { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "6.6.6-pre666" } -forceSameVersion Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -notlike "*--allow-downgrade*") -and ($command -like "*--ignore-dependencies*") } } It "6.6.6-pre666 -> 6.6.6-pre111 should contain --allow-downgrade --ignore-dependencies" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "6.6.6-pre111" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -like "*--allow-downgrade*") -and ($command -like "*--ignore-dependencies*") } } } Context "major minor version" { BeforeEach { Mock Get-ChocoState -ModuleName $moduleForMock { return @{Name = "dummyPackage"; Version = "7.7.7" } } } It "7.7.7 -> 8.8.8 should not contain --allow-downgrade --ignore-dependencies" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "8.8.8" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -notlike "*--allow-downgrade*") -and ($command -notlike "*--ignore-dependencies*") } } It "7.7.7 -> 2.2.2 should contain --allow-downgrade --ignore-dependencies" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "2.2.2" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -like "*--allow-downgrade*") -and ($command -like "*--ignore-dependencies*") } } It "7.7.7 -> 8.9.8 should not contain --allow-downgrade --ignore-dependencies" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "8.9.8" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -notlike "*--allow-downgrade*") -and ($command -notlike "*--ignore-dependencies*") } } It "7.7.7 -> 7.6.7 should contain --allow-downgrade --ignore-dependencies" { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "7.6.7" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -ParameterFilter { ($command -like "*--allow-downgrade*") -and ($command -like "*--ignore-dependencies*") } } } Context "Skip Needless Installs" { BeforeEach { Mock Get-ChocoState -ModuleName $moduleForMock { return @{Name = "dummyPackage"; Version = "1.3.2" } } } It "Skips installing a package that already exists." { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "1.3.2" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -Times 0 } } Context "feat versions" { BeforeEach { Mock Get-ChocoState -ModuleName $moduleForMock { return @{Name = "dummyPackage"; Version = "1.3.2-feat-some-long-version-038" } } } It "1.3.2-feat-038 -> 1.3.2-feat-039 upgrade should trigger install." { Invoke-ChocoInstallPackagesPrivate -packages @{Name = "dummyPackage"; Version = "1.3.2-feat-some-long-version-039" } Assert-MockCalled Invoke-Expression -ModuleName $moduleForMock -Times 1 } } }