config.Tests.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# Call Invoke-Pester Set-StrictMode -Version Latest Import-Module powershell-yaml Describe "Get-Config" { It "local config" { $expected = @{ foo = 'bar' } ConvertTo-Yaml $expected | Out-File "$name.yaml" $actual = Get-Config $name $actual.Keys | Should -Be $expected.Keys $actual.foo | Should -Be $expected.foo } It "local config (int)" { $expected = @{ foo = 1 } ConvertTo-Yaml $expected | Out-File "$name.yaml" $actual = Get-Config $name $actual.Keys | Should -Be $expected.Keys $actual.foo | Should -Be $expected.foo } It "user global config" { $expected = @{ foo = 'bar' } ConvertTo-Yaml $expected | Out-File "$Env:APPDATA\$name\config.yaml" $actual = Get-Config $name $actual.Keys | Should -Be $expected.Keys $actual.foo | Should -Be $expected.foo } It "system global config" { $expected = @{ foo = 'bar' } ConvertTo-Yaml $expected | Out-File "$Env:ProgramData\$name\config.yaml" $actual = Get-Config $name $actual.Keys | Should -Be $expected.Keys $actual.foo | Should -Be $expected.foo } It "joined config" { $local = @{ bar = 'bar' } $user = @{ bar = 'bazz' } $system = @{ foo = 'foo' } $expected = @{ foo = 'foo' bar = 'bar' } ConvertTo-Yaml $local | Out-File "$name.yaml" ConvertTo-Yaml $user | Out-File "$Env:APPDATA\$name\config.yaml" ConvertTo-Yaml $system | Out-File "$Env:ProgramData\$name\config.yaml" $actual = Get-Config $name $actual.Keys.Length | Should -Be $expected.Keys.Length $actual.foo | Should -Be $expected.foo $actual.bar | Should -Be $expected.bar } BeforeAll { New-Variable -Option Constant, AllScope -Name name -Value 'powershell-config' New-Variable originalProgramData -Option Constant -Value "$Env:ProgramData" New-Variable originalAPPDATA -Option Constant -Value "$Env:APPDATA" New-Variable originalPWD -Option Constant -Value "$PWD" function New-TemporaryDirectory { $parent = [System.IO.Path]::GetTempPath() [String] $temp = New-Guid New-Item -ItemType Directory -Path (Join-Path $parent $temp) } $Env:ProgramData = New-TemporaryDirectory New-Item -ItemType Directory -Path "$Env:ProgramData\$name" $Env:APPDATA = New-TemporaryDirectory New-Item -ItemType Directory -Path "$Env:APPDATA\$name" Import-Module -Force (Join-Path "$PSScriptRoot" 'config.psm1') $tempPWD = New-TemporaryDirectory Set-Location $tempPWD } AfterAll { Remove-Item $Env:ProgramData -Recurse -ErrorAction Ignore Set-Location $originalPWD Remove-Item $tempPWD -Recurse Set-Item Env:\ProgramData -Value $originalProgramData Set-Item Env:\APPDATA -Value $originalAPPDATA } AfterEach { Remove-Item "$name.yaml", "$Env:APPDATA\$name\config.yaml", "$Env:ProgramData\$name\config.yaml" -ErrorAction Ignore } } |