tests/Resolve-DFPackageManager.Tests.ps1
|
BeforeAll { . "$PSScriptRoot/../Private/Resolve-DFPackageManager.ps1" } Describe 'Resolve-DFPackageManager' { BeforeEach { $script:DFPackageManagers = $null } It 'returns only managers found on PATH' { Mock Get-Command { if ($Name -eq 'scoop') { [PSCustomObject]@{ Name = 'scoop' } } else { $null } } $result = Resolve-DFPackageManager $result | Should -Contain 'scoop' $result | Should -Not -Contain 'winget' $result | Should -Not -Contain 'choco' } It 'returns empty array when no managers are found' { Mock Get-Command { $null } $result = Resolve-DFPackageManager @($result).Count | Should -Be 0 } It 'caches result on second call (Get-Command not called again)' { Mock Get-Command { [PSCustomObject]@{ Name = $Name } } -Verifiable Resolve-DFPackageManager | Out-Null Resolve-DFPackageManager | Out-Null # Get-Command should only be called for the first invocation (3 PMs) Should -Invoke Get-Command -Times 3 -Exactly } It 'reloads when -Force is specified' { Mock Get-Command { $null } Resolve-DFPackageManager | Out-Null # caches empty Mock Get-Command { [PSCustomObject]@{ Name = 'scoop' } } -ParameterFilter { $Name -eq 'scoop' } $result = Resolve-DFPackageManager -Force $result | Should -Contain 'scoop' } It 'respects custom -Priority order' { Mock Get-Command { [PSCustomObject]@{ Name = $Name } } $result = Resolve-DFPackageManager -Priority @('winget', 'scoop') @($result)[0] | Should -Be 'winget' @($result)[1] | Should -Be 'scoop' @($result).Count | Should -Be 2 } } |