ps/Modules/Alkami.PowerShell.Choco/Public/Invoke-ChocoInstallPackagesPrivate.tests.ps1
2023-05-30 22:51:22 -07:00

113 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 "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
}
}
}