tests/Get-DFRole.Tests.ps1
|
BeforeAll { . "$PSScriptRoot/TestSupport.ps1" foreach ($f in Get-DFTestModuleFile) { . $f } $script:Tools = Join-Path $TestDrive 'tools' New-Item -ItemType Directory $script:Tools | Out-Null '{ "name": "pa", "executable": "pa.exe", "roles": { "pager": { "priority": 20, "env": { "DF_T2_PAGER": "pa" } } } }' | Set-Content (Join-Path $script:Tools 'pa.json') '{ "name": "pb", "executable": "pb.exe", "roles": { "pager": { "priority": 10, "env": { "DF_T2_PAGER": "pb" } } } }' | Set-Content (Join-Path $script:Tools 'pb.json') '{ "name": "rg", "executable": "rg.exe", "roles": { "grep": {} } }' | Set-Content (Join-Path $script:Tools 'rg.json') } Describe 'Get-DFRole' { BeforeEach { $script:DFToolDb = $null Set-DFTestConfig $null Remove-Item Env:DF_T2_PAGER -ErrorAction Ignore Mock Test-DFToolAvailable { $Executable -ne 'pb.exe' } # Point the role DB at a fixture whose pager reserves the test variable. $rolesFile = Join-Path $TestDrive 'roles.json' '{ "pager": { "kind": "single", "hook": "Initialize-DFRolePager", "reserved": { "env": ["DF_T2_PAGER"] } }, "grep": { "kind": "category" }, "prompt": { "kind": "single", "exclusive": true, "hook": "Initialize-DFRolePrompt" } }' | Set-Content $rolesFile $script:DFRoleDb = Get-DFRoleDb -Path $rolesFile } AfterEach { Remove-Item Env:DF_T2_PAGER -ErrorAction Ignore $script:DFRoleDb = $null } It 'reports members, installed candidates, winner and reason' { $r = Get-DFRole pager -ToolsPath $script:Tools $r.Kind | Should -Be 'single' $r.Members | Should -Be @('pa', 'pb') $r.Candidates | Should -Be @('pa') $r.Winner | Should -Be 'pa' $r.Reason | Should -Be 'sole' } It 'lists category roles with members and no winner' { $r = Get-DFRole grep -ToolsPath $script:Tools $r.Members | Should -Be @('rg') $r.Winner | Should -BeNullOrEmpty } It 'lists every role, sorted, when no name is given' { (Get-DFRole -ToolsPath $script:Tools).Name | Should -Be @('grep', 'pager', 'prompt') } It 'reports a reserved variable set outside DotForge as Overridden' { $Env:DF_T2_PAGER = 'less' $o = (Get-DFRole pager -ToolsPath $script:Tools).Overridden $o.Name | Should -Be 'DF_T2_PAGER' $o.Value | Should -Be 'less' $o.Source | Should -Be 'outside DotForge' } It 'reports nothing Overridden when the variable holds the winner''s value' { $Env:DF_T2_PAGER = 'pa' (Get-DFRole pager -ToolsPath $script:Tools).Overridden | Should -BeNullOrEmpty } It 'labels a value DotForge wrote for an earlier winner as such' { $global:DFRoleEnvState = @{ Written = @{ DF_T2_PAGER = 'pb' }; Warned = @{} } $Env:DF_T2_PAGER = 'pb' try { (Get-DFRole pager -ToolsPath $script:Tools).Overridden.Source | Should -Be 'DotForge (earlier winner)' } finally { Remove-Variable DFRoleEnvState -Scope Global -ErrorAction Ignore } } } |